你.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你可以使用的东西。