你.Find
显然是Range.Find
方法,因为它包含方法中不存在的参数WorksheetFunction.Find
。
该Range.Find
方法需要一个计算结果为Range Object的表达式。
ThisWorkbook.Sheets("Sheet2").column(1)
不评估范围。您可以通过在“立即”窗格中输入来进行测试
ThisWorkbook.Sheets("Sheet2").column(1).select
这将返回错误 438
对象不支持此方法或属性
然而
ThisWorkbook.Sheets("Sheet2").Range("A:A").select
在立即窗格中工作得很好,所以替换ThisWorkbook.Sheets("Sheet2").Column(1)
为ThisWorkbook.Sheets("Sheet2").Range("A:A")
方法的返回Range.Find
是一个范围,因此接受返回的变量应该定义为一个范围
Dim rng as Range
Option Explicit
如果您的模块顶部没有,则 VBA 假定所有变量都是变体类型,但变体类型不能与对象类型互换。
如果您将 VBA IDE 设置为始终通过“工具”>“选项”>“编辑器”选项卡Option Explicit
将“需要变量声明”添加到项目中的每个模块,您将不会遭受不正确的变量调用。
现在无法使用ObjectName = ...
. 它们必须使用Set并且Set ObjectName = ...
返回必须与正在设置的对象的类型相同。
如果你Dim rng as Range
那么右边的方法Set rng = ...
必须返回一个相同类型的对象,否则会发生错误。
您What:=Accessibility,
正在尝试查找可能不存在的名为 Accessibility 的变量的内容。"Accesibility"
如果您LookAt:=xlPart
.
总结一下:
定义你的对象Dim rng as Range
改变你的路线
rng = ThisWorkbook.Sheets("Sheet2").Column(1).Find(What:=Accessibility, _
LookIn:=x1Values, LookAt:=x1Whole, MatchCase:=True)
至:
With ThisWorkbook.Sheets("Sheet2").Range("A:A")
Set rng = .Find(what:="Accessibility, LookIn:=xlValues, LookAt:=xlPart)
End With
这应该给你留下一个rng.value
你可以使用的东西。