我一直得到运行时错误91:对象变量或未设置块变量。
我需要返回我在另一个工作簿中搜索的字符串的行号,并将其放置在我查找的名称的6列之外。名称在字符串中有轻微变化,这就是为什么我更喜欢使用Cells.Find
而不是vlookup。
我尝试设置我在公共范围内搜索的范围无济于事。这两个工作簿都是打开的,但似乎Cells.Find
方法只有在我搜索范围的工作簿处于活动状态时才有效。
仅供参考,listrange
是活动工作簿上的名称范围。 clientlist
是我正在搜索的其他工作簿中的命名范围(打开但未激活),clientlist2
是该命名范围的声明版本。
以下是代码段:
Public clientlist2 As Range
Sub sortout()
Dim wkb As Workbook
Dim clientwks As Worksheet
Dim listrange As Range
Set wkb = Workbooks("workbook.xlsm")
Set clientwks = wkb.Sheets("Sheet1")
Set clientlist2 = clientwks.Range("clientlist")
Set listrange = Range("A6", Range("A6").End(xlDown))
For Each a In listrange
a.Offset(0, 6).value = clientlist2.Cells.Find(a).Row
Next a
End Sub
答案 0 :(得分:0)
我建议您分两步执行for语句中的操作以避免错误,并使其更容易进行故障排除。
如果我要找一个单元格,然后从中复制一些东西(或某些属性),我首先尝试将其设置为变量,然后在尝试执行任何操作之前检查我从中得到了什么结果更多与它。
在你的情况下;
Dim foundValue As Range
For Each a In listrange
Set foundValue = clientlist2.Cells.Find(a)
If Not foundValue Is Nothing Then
a.Offset(0, 6).Value = foundValue.Row
End If
Next a
这也使您更容易进行故障排除,因为您可以通过使用以下方法检查不同变量在每个步骤中的值。 Debug.Print
或消息框。
另一个好主意是在模块顶部添加Option Explicit
。这使您有必要定义(调暗)所有变量,防止代码中间出现意外拼写错误。
答案 1 :(得分:-2)
我认为当工作簿处于非活动状态时会出现问题,因此请在查找方法之前将其激活。
工作簿( “BOOK4.XLS”)。激活