Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用具有已定义字符串的查找VBA函数_Vba_Excel_Find - Fatal编程技术网

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

使用具有已定义字符串的查找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

嘿,也许我在这里没有看到明显的东西,但是如何使用带有预定义变量的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设置为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)