使用具有已定义字符串的查找VBA函数
嘿,也许我在这里没有看到明显的东西,但是如何使用带有预定义变量的Find VBA函数呢。我使用的是从用户表单分配的字符串的串联,前面是“total”,但我无法返回该行 下面是我的代码使用具有已定义字符串的查找VBA函数,vba,excel,find,Vba,Excel,Find,嘿,也许我在这里没有看到明显的东西,但是如何使用带有预定义变量的Find VBA函数呢。我使用的是从用户表单分配的字符串的串联,前面是“total”,但我无法返回该行 下面是我的代码 Dim HBWS As Worksheet Dim TickerString As String TickerString = "Total " & TTB Set HBWS = Sheets("Hoenheimm Worksheet") BorrowColumn = HBWS.Cells.Find(W
Dim HBWS As Worksheet
Dim TickerString As String
TickerString = "Total " & TTB
Set HBWS = Sheets("Hoenheimm Worksheet")
BorrowColumn = HBWS.Cells.Find(What:="Borrow").Column 'Works just fine
TickerRow = HBWS.Cells.Find(What:=TickerString).Row 'Throws an error
请注意,TTB设置为ticker ex.AAPL,我可以在本地窗口中检查Tickerstring是否实际上等于“Total AAPL”
我希望.Row列给出工作表中该字符串所在的行
编辑:抛出的错误如下所示
“运行时错误'91':
对象变量或未设置块变量“
任何通过,
谢谢您正在调用
范围。查找
。该方法返回一个范围
对象引用-当它没有找到它要查找的内容时,它将返回无
,即空引用
这段代码所做的(以及它上面的工作指令)是假设Find
返回一个有效的对象引用
显然,HBWS.Cells
不包含“Total”&TTB
(无论TTB
是什么),因此您的代码实际上是在试图针对范围
引用调用范围.Row
。。。这是非法的,并在您遇到问题时引发运行时错误91
您永远不应该假设Find
将返回有效的引用。将其拆分,并使用验证返回的对象引用,如果。。。无任何内容
检查:
Set tickerResult = HBWS.Cells.Find(What:=TickerString)
If Not tickerResult Is Nothing Then
tickerRow = tickerResult.Row
Else
'tickerString was not found.
'watch for leading/trailing/extra spaces if the string does *look* legit.
End If
调用
Range.Find
时,您应该始终为可选参数提供一个值,因为它的实现“记住”了以前调用的值,这很容易出现错误。您正在调用Range.Find
。该方法返回一个范围
对象引用-当它没有找到它要查找的内容时,它将返回无
,即空引用
这段代码所做的(以及它上面的工作指令)是假设Find
返回一个有效的对象引用
显然,HBWS.Cells
不包含“Total”&TTB
(无论TTB
是什么),因此您的代码实际上是在试图针对范围
引用调用范围.Row
。。。这是非法的,并在您遇到问题时引发运行时错误91
您永远不应该假设Find
将返回有效的引用。将其拆分,并使用验证返回的对象引用,如果。。。无任何内容
检查:
Set tickerResult = HBWS.Cells.Find(What:=TickerString)
If Not tickerResult Is Nothing Then
tickerRow = tickerResult.Row
Else
'tickerString was not found.
'watch for leading/trailing/extra spaces if the string does *look* legit.
End If
调用
Range.Find
时,您应该始终为可选参数提供一个值,因为它的实现“记住”了以前调用的值,这很容易出现错误。然后在工作表上找不到TickerString
。甚至不要走得太远。我刚刚编辑了我的帖子来详细说明错误。如果.Find
失败,它将返回Nothing
,因此访问.Row
将抛出错误91。通过查看range(“A1”).Value=TickerString
是否为真(将A1替换为单元格的地址,并使用真实的对应值)进行测试,然后在工作表上找不到TickerString
。甚至不要走得太远。我刚刚编辑了我的帖子来详细说明错误。如果.Find
失败,它将返回Nothing
,因此访问.Row
将抛出错误91。通过查看range(“A1”).Value=TickerString
是否为真来进行测试(将A1替换为单元格的地址,并使用真实的对应值),因此,我想问,为什么名称会更改?非常有用且非常详细的答案。我还将执行您添加的检查,我不知道这是最佳实践,但很明显是有意义的。@ScottCraner。。。然后,我在本月早些时候参加了MVP全球峰会,斯科特·汉斯曼(Scott Hanselman)说服我,“统一”我的所有在线个人资料是个好主意——因此我现在在LinkedIn、Facebook、Windows Live、GitHub上都有相同的照片,现在在SE上也有了相同的照片;-)(只有我的Twitter档案仍然是Rubberduck)所以,我想问,为什么名字会改变?非常有用而且非常详细的答案。我还将执行您添加的检查,我不知道这是最佳实践,但很明显是有意义的。@ScottCraner。。。然后,我在本月早些时候参加了MVP全球峰会,斯科特·汉斯曼(Scott Hanselman)说服我,“统一”我的所有在线个人资料是个好主意——因此我现在在LinkedIn、Facebook、Windows Live、GitHub上都有相同的照片,现在在SE上也有了相同的照片;-)(只有我的推特档案仍然是Rubberduck)