在 VBA 中使用索引匹配

在 VBA 中使用索引匹配

我正在尝试在我的 VBA 宏中插入一个 Index-Match 函数它看起来像这样:

列(“C:C”)。Forumla =“=INDEX('[blabla.xlsm] Sheet1'!$F$4:$F$102,MATCH(B1,'[blabla.xlsm] Sheet1'!$G$4:$G$102,0))”

但是我一直收到“运行时错误 438:对象不支持此属性或方法”

非常感谢任何提示或建议。

答案1

声明一个Range变量,并将其分配给Columns("C:C")例如Set myRange = ActiveSheet.Columns("C:C")(如果它在标准模块中)或Set myRange = Me.Columns("C:C")(如果它在工作表模块中)。

Dim myRange As Range
Set myRange = Columns("C:C")
myRange.Formula = "..."

然后,当您在 中输入点时myRange.,您将获得一个下拉列表,其中列出了可用的成员、参数快速信息工具提示和编译时验证。您的代码被允许编译和运行(无论是否Option Explicit指定)的原因是,因为Columns返回一个Range对象,但没有任何参数 - 参数("C:C")实际上是提供给Range.[_Default]属性的,该属性返回一个Variant。因此,链接到它的任何成员调用都只能在运行时解析,即任何拼写错误都不会阻止编译,并且会在运行时抛出错误 438。

通过声明一个Range变量,你可以将其“类型转换”VariantRange,然后编译器就可以验证哪些成员存在,并抛出編輯時由于打字错误而导致的错误。

相关内容