作为较大代码的一部分,我正在另一个电子表格(所有 defaults.xls)中的电子表格 (1.xlsx) 中查找值。我正在从 Word 文档运行宏,这就是我将两个电子表格作为对象导入的原因。但是,使用range.find函数这样做总是会返回类型不匹配错误。代码如下
Dim OXL As Object
Set OXL = GetObject(, "Excel.Application")
Set OWB = OXL.Workbooks.Open("All Defaults.xls")
Set OWB2 = OXL.Workbooks.Open("1.xlsx")
OWB.ActiveSheet.Range("E:E").Find(What:=OWB2.ActiveSheet.Range("A1").Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
我已经尝试过,而不是仅仅激活函数,而是将 find 函数的值分配给一个对象或一个变体,但我仍然遇到相同的不匹配错误。在 excel 宏中
运行相同的find函数不会出错。
编辑:我也尝试在代码中写入实际值而不是OWB2.ActiveSheet.Range("A1")但发生同样的错误
这里发生了几件事:
ActiveSheet
是 的属性Excel.Application
,不是Workbook
。所以用OXL.ActiveSheet
ActiveCell
,所以使用OXL.ActiveCell
After
必须是搜索范围内的单元格Find
. 所以使用那里的值。所以,改为
OXL.ActiveSheet.Range("E:E").Find(What:=OXL.ActiveSheet.Range("A1").Value, After:=OXL.Range("E1"), LookIn:=-4123, LookAt:=2, SearchOrder:=1, SearchDirection:=1, MatchCase:=False, SearchFormat:=False).Activate
毕竟,考虑
Find
会找到结果?允许失败的可能性Activate
对其进行操作GetObject(, "Excel.Application")
假设有一个 Excel 实例正在运行。如果没有呢?你的代码应该处理这种情况有点像
Sub Demo()
Dim oXL As Object ' Excel.Application
Dim oWB As Object ' Excel.Workbook
Dim oWB2 as Object ' Excel.Workbook
Dim oSH As Object ' Excel.Worksheet
Dim oSearchRange As Object ' Excel.Range
Dim oRng As Object ' Excel.Range
Set oXL = GetObject(, "Excel.Application")
Set oWB = oXL.Workbooks.Open("C:\Full\Path\To\All Defaults.xls")
Set oWB2 = oXL.Workbooks.Open("C:\Full\Path\To\1.xlsx")
Set oSH = oWB.Worksheets("SpecifySheet")
Set oSearchRange = oSH.Range("E:E")
Set oRng = oSearchRange.Find( _
What:=oSH.Range("A1").Value, _
After:=oSearchRange.Cells(1, 1), _
LookIn:=-4123, _
LookAt:=2, _
SearchOrder:=1, _
SearchDirection:=1, _
MatchCase:=False, _
SearchFormat:=False)
If Not oRng Is Nothing Then
oRng.Activate
End If
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句