我想找到一个关键字,然后对其执行操作。
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
Run Code Online (Sandbox Code Playgroud)
我遇到问题的部分是NextRow。
NextRow = ws.Range("A:K").Find(What:="This City Is:").Row
Run Code Online (Sandbox Code Playgroud)
就是说
“未设置对象变量或带块变量”
我试图让Textbox4行等于文本“ This City Is:”所在的位置。因为有时如果我决定在某处插入一行,我仍然希望代码遵循该术语。
Run Code Online (Sandbox Code Playgroud)NextRow = ws.Range("A:K").Find(What:="This City Is:").Row
您假设这Range.Find
将找到所需的内容,但没有找到。
因此,.Row
成员调用违反Nothing
,因为在找不到所需内容时会Range.Find
返回Nothing
。针对任何成员调用Nothing
都会引发错误91。
在Range.Find
没有先验证返回值的情况下,切勿使用。在Range
参考中捕获返回值:
Dim result As Range
Set result = ws.Range("...").Find(...)
Run Code Online (Sandbox Code Playgroud)
然后确保它不是Nothing
:
If Not result Is Nothing Then
NextRow = result.Row
...
End If
Run Code Online (Sandbox Code Playgroud)
请注意,Rubberduck(我管理的免费,开源VBIDE外接程序项目)对这种情况(以及其他许多情况)发出警告:
归档时间: |
|
查看次数: |
66 次 |
最近记录: |