【问题标题】:Excel VBA Index / Match issueExcel VBA 索引/匹配问题
【发布时间】:2014-08-12 17:52:03
【问题描述】:

我很难设置这个索引/匹配功能代码。 我尝试了几个选项,但都不起作用。

我收到错误Run-time error '91': Object variable or With block variable not set

这是我的代码:

Sub breaks()

Dim wks As Worksheet

With Worksheets("report")
Range("I2") = Application.WorksheetFunction.Index(wks("final pos.xlsx").Sheet("position").Range("AG:AG"), Application.WorksheetFunction.Match(Sheets("report").Range("H2"), Sheets("position").Range("AK:AK"), 0))
Range("J2") = Application.WorksheetFunction.Index(wks("final pos.xlsx").Sheet("position").Range("I:I"), Application.WorksheetFunction.Match(Sheets("CASSreport").Range("H2"), Sheets("position").Range("AK:AK"), 0))

End With

End Sub

【问题讨论】:

  • 究竟什么'不起作用'?当唯一的问题是“你能帮帮我吗?”时,很难提供帮助
  • 首先我没有得到任何结果,只有引用变量声明(缺失)然后是函数结构的错误消息。
  • 也许发布错误消息?
  • 错误信息是“运行时错误'91': Object variable or With block variable not set
  • 我不认为wks("final pos.xlsx") 做你认为它做的事。你的错误可能就在这里。

标签: excel vba indexing match


【解决方案1】:

如果您有 Run-time error '91': Object variable or With block variable not set 错误,那么您的函数中的 somehtng 将返回 Nothing 并且您正在尝试使用它。

找到这个最简单的方法是引入中间变量,然后查看其中哪些没有设置。例如,我在下面的语句的第一部分引入了临时变量。您可以重复其他部分,直到找到中断的部分,然后看看为什么没有设置。

Sub breaks()

Dim wks As Worksheet
Dim finalPosWorksheet as Worksheet
finalposWorksheet = wks("final pos.xlsx")

Dim position as Sheet
position = finalPosWorksheet.Sheet("position")

Dim positionRange as Range 
postionRange = position.Range("AG:AG")

With Worksheets("report")
Range("I2") = Application.WorksheetFunction.Index(positionRange, Application.WorksheetFunction.Match(Sheets("report").Range("H2"), Sheets("position").Range("AK:AK"), 0))
Range("J2") = Application.WorksheetFunction.Index(wks("final pos.xlsx").Sheet("position").Range("I:I"), Application.WorksheetFunction.Match(Sheets("CASSreport").Range("H2"), Sheets("position").Range("AK:AK"), 0))

End With

End Sub

写下来后,我现在对这条线非常怀疑:

wks("final pos.xlsx")

这里的意图是什么?打开工作簿?我怀疑这会奏效......

我会将您的代码分解为您想要遵循的步骤,每行一个步骤。一旦你让它工作了,你就可以重构它以将行连接在一起并消除临时变量。

【讨论】:

  • 谢谢山姆。因此,在“Dim position As Sheet”声明中,我收到“编译错误:未定义用户定义类型”。它可以与工作表“最终位置在另一个工作簿上”这一事实联系起来吗?
  • finalPosWorksheet.Sheet("position") 返回的类型可能不是Sheet,而是其他类型。我对 excel vba 对象模型的了解不是很好,所以只需将Sheet 替换为Worksheet.Sheet("blah) 返回的实际类型(WorkSheet?)
  • 似乎也可能是Chart,因此可能应该使用其他方法:vbforums.com/showthread.php?512860-Worksheets-vs-Sheets
猜你喜欢
  • 1970-01-01
  • 2011-11-26
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2021-04-04
  • 1970-01-01
相关资源
最近更新 更多