我正在尝试在我的 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
变量,你可以将其“类型转换”Variant
为Range
,然后编译器就可以验证哪些成员存在,并抛出編輯時由于打字错误而导致的错误。