使用具有定义字符串的查找VBA函数

时间:2018-03-23 18:13:19

标签: excel vba excel-vba find

嘿,也许我没有在这里看到明显的东西,但是如何使用Find VBA函数和预定义的变量。我使用从用户表单分配的字符串的串联,并且只使用" total"在它面前,但我无法返回该行。

以下是我的代码

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设置为自动收报机。 AAPL,我可以在我的本地窗口查看Tickerstring实际上=" Total AAPL"

我希望.Row列能够在工作表上给出关于此字符串所在位置的行。

编辑:抛出的错误如下......

  

"运行时错误' 91':

     

对象变量或未设置块变量"

任何通行证, 感谢

1 个答案:

答案 0 :(得分:4)

您正在调用Range.Find。该方法返回Range对象引用 - 当它找不到它要查找的内容时,它返回Nothing,即 null引用

TickerRow = HBWS.Cells.Find(What:=TickerString).Row 'Throws an error

这段代码正在做什么(以及它上面的工作指令)是假设 Find返回有效的对象引用。

显然HBWS.Cells不包含"Total " & TTB(无论TTB是什么),因此您的代码有效地尝试针对Range.Row Range引用调用Nothing {1}} ...这是非法的,并在您遇到时引发运行时错误91.

您不应该假设Find将返回有效的引用。拆分它,并使用If ... Is Nothing检查验证返回的对象引用:

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时,应始终为可选参数提供值,因为它的实现“记住”以前调用的值,这很容易出错。