繁体   English   中英

.Range("...").Find 生成对象变量或未设置块变量

[英].Range("...").Find generates Object variable or With Block variable not set

我想找到一个关键字,然后对其执行操作。

Dim ws as Worksheet
Dim LastRow As Long
Dim NextRow as Long

Set ws = ActiveWorkbook.ActiveSheet

LastRow = ws.Range("A:A").Find(What:="", After:=Range("A10")).Row

NextRow = ws.Range("A:K").Find(What:="This City Is:").Row

ws.Cells(LastRow, 1) = Me.tbTextbox1.Value
ws.Cells(LastRow, 2) = Me.tbTextbox1.Value
ws.Cells(LastRow, 3) = Me.tbTextbox3.Value
ws.Cells(NextRow, 4) = "This City is: " + Me.tbTextbox4.Value

End Sub

我遇到问题的部分是 NextRow。

NextRow = ws.Range("A:K").Find(What:="This City Is:").Row

它在说

“对象变量或未设置块变量”

我试图让 Textbox4 行在文本“This City Is:”所在的地方相等。 因为有时如果我决定在某处插入一行,我仍然希望代码遵循这个术语。

NextRow = ws.Range("A:K").Find(What:="This City Is:").Row

你假设Range.Find会找到它要找的东西……但它没有。

所以.Row成员调用与Nothing Range.Find ,因为Range.Find在找不到要查找的内容时返回Nothing 任何针对Nothing成员调用都会引发错误 91。

切勿在未首先验证的情况下使用Range.Find的返回值。 Range引用中捕获返回值:

Dim result As Range
Set result = ws.Range("...").Find(...)

然后确保它不是Nothing

If Not result Is Nothing Then
    NextRow = result.Row
    ...
End If

请注意, Rubberduck (我管理的免费开源 VBIDE 插件项目)警告了这种(以及许多其他)情况:

“Range.Find”调用的结果未针对“Nothing”进行测试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM