Excel VBA使用工作表之间索引匹配的对象

Excel VBA使用工作表之间索引匹配的对象,vba,excel,object,Vba,Excel,Object,我正在尝试编写一个Excel宏,该宏将获取分配给未保存电子表格上记录的ID值(通过条件后将进行保存),并使用该值与保存所有数据的工作表进行匹配。然后,它必须获取特定记录的状态,并根据该结果执行代码 基本上,我的宏将下载数据的电子表格拆分,并将每个工作表拆分为一个新工作簿,并使用JobID作为WS和WB的名称保存它。现在,如果宏的状态为“Completed&Retured”,我要求宏不保存作业,我可以使用电子表格上的索引/匹配来检查值是否正确且正常工作,但当尝试在宏中复制它时,我会得到 对象变量或

我正在尝试编写一个Excel宏,该宏将获取分配给未保存电子表格上记录的ID值(通过条件后将进行保存),并使用该值与保存所有数据的工作表进行匹配。然后,它必须获取特定记录的状态,并根据该结果执行代码

基本上,我的宏将下载数据的电子表格拆分,并将每个工作表拆分为一个新工作簿,并使用JobID作为WS和WB的名称保存它。现在,如果宏的状态为“Completed&Retured”,我要求宏不保存作业,我可以使用电子表格上的索引/匹配来检查值是否正确且正常工作,但当尝试在宏中复制它时,我会得到

对象变量或未设置块变量(错误91)

fname在宏的前面定义,但它包含一个5位数字。我正在寻找使用fname值的索引/匹配,将其与dbsheet的A列中的所有记录进行比较,并返回E列作为结果


如果您能帮助我指出正确的方向,我们将不胜感激,因为目前objectfname不等于任何东西,因为它似乎无法获取fname中包含的值。

从我所知,在这种情况下,Index不会返回特定的单元格范围。通过查看代码,您应该能够使用MATCH查找匹配的单元格,然后从中构建特定的单元格引用。另一方面,从msgbox(结果)来看,您似乎只是试图返回匹配的值,而不是范围本身。在这种情况下,使用output作为字符串,删除output前面的集合。您还需要在索引调用之后添加.Value。这将返回一个您可以解释的字符串。@BrandonBarney我还没有尝试您的第一个想法,我注释掉了
Set objectfname=fname
,并尝试只使用
output=.Index(dbsheet.Range(dbsheet.Cells(2,5),dbsheet.Cells(40000,5.Value),.Match(fname,dbsheet.Range(dbsheet.Cells(2,1),dbsheet.Cells(40000,1))
但我现在在该行上获取对象“U工作表”的方法“Range”失败。在frame和dbsheet.Range之间有命令吗?当引用找不到的范围时,会发生此错误。此外,我相信您需要在最后使用“.value”。我不经常使用索引,所以在这一点上可能会出错,但如果它像常规范围一样工作。应该需要返回值。
fname
声明为
字符串,因此不能使用
集将其分配给
对象。这段代码甚至不应该编译——你应该得到一个“类型不匹配”。如果要匹配
fname
,只需直接传递它,而不是
objectfname
@BrandonBarney中间没有任何东西,fname在子行的前面定义了很多代码,但它们与此位无关,我可能会尝试将索引取出,并使用Match来获取正确的行,然后从那里获取引用。
Dim ThisWbk As Workbook
Dim dbsheet As Worksheet
Set ThisWbk = ThisWorkbook
Set dbsheet = ThisWbk.Sheets("Data")
Dim objectfname As Object
Dim fname As String
Dim outcome as Object

With Application 

Set objectfname = fname    'Error occurs here

'MsgBox (objectfname)
Set outcome = .Index(dbsheet.Range(dbsheet.Cells(2, 5), dbsheet.Cells(40000, 5)), .Match(objectfname, dbsheet.Range(dbsheet.Cells(2, 1), dbsheet.Cells(40000, 1)), 0))
MsgBox (outcome)

End With