.Range().Find() 在使用 String 对象时抛出 'Object required' 错误
.Range().Find() throwing 'Object required' error when using String object
这是我第一次编写 VBScript 代码。我正在尝试遍历一列以搜索给定的字符串和 return 地址。
变量 'i' 和 'j' 是循环的一部分,它工作正常,因此我将其省略。
toSearch = objToExcel.ActiveSheet.PivotTables("MyPivot").RowFields(i).PivotItems(j).Name
If toSearch <> "(blank)" Then
Set foundRow = objToExcel.ActiveSheet.Range("A2:A20").Find(toSearch)
MsgBox foundRow.Row
End If
我收到第 objToExcel.ActiveSheet.Range("A2:A20").Find(toSearch)
行的错误,指出 'Object Required: objToExcel.ActiveSheet.Range(...).Find(...)'
。
当我用 Find("Alex")
之类的硬编码字符串替换 toSearch
字符串对象时,循环工作正常,我得到了字符串的行号。
此外,在循环中,toSearch
对象能够正确地从列中获取所有字符串。当我在 Find()
中使用相同的对象时,出现错误。
知道我哪里出错了吗?
你不能只遍历范围来找到值吗?喜欢:
For each cell in Range("A2:A20").cells
if cell.value = toSearch then
MsgBox cell.Row
exit for
end if
next
之前您需要将单元格调暗为范围
仍然想知道为什么您的解决方法有效...
请检查您是否将 foundRow 声明为 Dim ... as Long
、Dim ... as Range
、Dim ... as Variant
(不推荐)或只是 Dim ...
(从不推荐)。在后两种情况下,Excel 为您做出决定,也许该决定之前对某些代码行起作用,但在这里不起作用。
Range
和Long
都可以,但有一些区别:
Dim foundRow as Range
...
Set foundRow = objToExcel.ActiveSheet.Range("A2:A20").Find(toSearch)
If Not foundRow Is Nothing Then
MsgBox foundRow.Row
Endif
或
Dim foundRow as Long
...
foundRow = objToExcel.ActiveSheet.Range("A2:A20").Find(toSearch).Row
MsgBox foundRow
第一个解决方案更好,因为您还可以处理未找到的问题。
如果由于某种原因没有找到(Range.Find 甚至在隐藏或分组单元格中找不到),第二个解决方案中的直接赋值会引发错误。
这是我第一次编写 VBScript 代码。我正在尝试遍历一列以搜索给定的字符串和 return 地址。 变量 'i' 和 'j' 是循环的一部分,它工作正常,因此我将其省略。
toSearch = objToExcel.ActiveSheet.PivotTables("MyPivot").RowFields(i).PivotItems(j).Name
If toSearch <> "(blank)" Then
Set foundRow = objToExcel.ActiveSheet.Range("A2:A20").Find(toSearch)
MsgBox foundRow.Row
End If
我收到第 objToExcel.ActiveSheet.Range("A2:A20").Find(toSearch)
行的错误,指出 'Object Required: objToExcel.ActiveSheet.Range(...).Find(...)'
。
当我用 Find("Alex")
之类的硬编码字符串替换 toSearch
字符串对象时,循环工作正常,我得到了字符串的行号。
此外,在循环中,toSearch
对象能够正确地从列中获取所有字符串。当我在 Find()
中使用相同的对象时,出现错误。
知道我哪里出错了吗?
你不能只遍历范围来找到值吗?喜欢:
For each cell in Range("A2:A20").cells
if cell.value = toSearch then
MsgBox cell.Row
exit for
end if
next
之前您需要将单元格调暗为范围
仍然想知道为什么您的解决方法有效...
请检查您是否将 foundRow 声明为 Dim ... as Long
、Dim ... as Range
、Dim ... as Variant
(不推荐)或只是 Dim ...
(从不推荐)。在后两种情况下,Excel 为您做出决定,也许该决定之前对某些代码行起作用,但在这里不起作用。
Range
和Long
都可以,但有一些区别:
Dim foundRow as Range
...
Set foundRow = objToExcel.ActiveSheet.Range("A2:A20").Find(toSearch)
If Not foundRow Is Nothing Then
MsgBox foundRow.Row
Endif
或
Dim foundRow as Long
...
foundRow = objToExcel.ActiveSheet.Range("A2:A20").Find(toSearch).Row
MsgBox foundRow
第一个解决方案更好,因为您还可以处理未找到的问题。
如果由于某种原因没有找到(Range.Find 甚至在隐藏或分组单元格中找不到),第二个解决方案中的直接赋值会引发错误。