Excel .Range(“…”).Find生成对象变量或未设置块变量

Excel .Range(“…”).Find生成对象变量或未设置块变量,excel,vba,Excel,Vba,我想找到一个关键字,然后对它执行一个操作 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.Ce

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

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:”所在的位置相等。因为有时候如果我决定在某处插入一行,我仍然希望代码遵循这个术语

您假设
Range.Find
将找到它要查找的内容。。。但事实并非如此

因此
.Row
成员调用与
Nothing
相反,因为
Range.Find
在未找到所需内容时返回
Nothing
。任何针对
Nothing
的成员调用都将引发错误91

永远不要使用
范围的返回值。未经验证就查找
。捕获
范围中的返回值
参考:

Dim result As Range
Set result = ws.Range("...").Find(...)
然后确保它不是

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

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

您假设
Range.Find
将找到它要查找的内容。。。但事实并非如此

因此
.Row
成员调用与
Nothing
相反,因为
Range.Find
在未找到所需内容时返回
Nothing
。任何针对
Nothing
的成员调用都将引发错误91

永远不要使用
范围的返回值。未经验证就查找
。捕获
范围中的返回值
参考:

Dim result As Range
Set result = ws.Range("...").Find(...)
然后确保它不是

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

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


NextRow
应该声明为
Long
,而不是
String
@DarrellH true,但不太可能这里的问题
NextRow
应该声明为
Long
,而不是
String
@DarrellH true,但不太可能是这里的问题谢谢你,这帮了很多忙,这帮了很多忙