关于VBA for Excel中range.Find()方法出现的问题

如下代码:DimBranchNameAsRangeDimTargetRowAsLongTargetRow=BranchName.Find(Worksheets(2).Ce... 如下代码:
Dim BranchName As Range
Dim TargetRow As Long
TargetRow = BranchName.Find(Worksheets(2).Cells(i, 1).Value).Row
运行时会提示“对象变量或 With 块变量没有设置(错误 91)”

但是很奇怪的是,同样的语句,在这样一个循环中却可以正常运行
For j = 3 To 34
If Worksheets(1).Cells(j, 1) = Worksheets(2).Cells(i, 1) Then
TargetRow = Worksheets(1).Range("A3:A34").Find(Worksheets(2) _ .Cells(i, 1).Value).Row
Endif
Next

希望高手能帮我解答一下
我因为一直在改写程序按F8测试,所以复制的时候搞错了,第一段代码我是赋值过的,第二段代码其实前面这段"worksheet(1).range("A3:A34")"应当被替换为“BranchName”
代码里的i也是没有问题的,在外面有一层for循环结构用到了i

事实是不管用对象名还是直接引用区域都会提示错误,而第二段代码中多余的for和if结构任意删去一个就会提示错误

还有一个很奇怪的现象,当我在for结构外添加一个for i =1 to x结构,这时用debug.print输出targetrow的值,下面窗口里只显示i循环个数的值,而按照整个结构,应该显示x*32个targetrow的值,很奇怪,完全不能理解

我觉得这个问题可能和find()方法的机制有关系,无奈之下我用了两个for循环代替了find(),也就是这个代替用的第二个for循环(For j = 3 To 34)和改写后添加的IF结构产生了这种奇妙的现象……
展开
 我来答
帐号已注销
2011-01-03 · TA获得超过8613个赞
知道大有可为答主
回答量:3242
采纳率:66%
帮助的人:2861万
展开全部
当 find 结果为 空 时,也就是没有找到所要查找的内容时,你这句就会报错“对象变量或 With 块变量没有设置(错误 91)”

使用find时,一般要加个结果判断的过程,如:
Option Explicit

Private Sub CommandButton1_Click()
Dim BranchName As Range, TargetRow As Long
Dim iFind As Range, i
i = 1
Set BranchName = Worksheets(1).Range("A3:A34")
Set iFind = BranchName.Find(Worksheets(2).Cells(i, 1).Value)
If Not iFind Is Nothing Then TargetRow = iFind.Row
End Sub
抄饮镶yV
2011-01-03 · TA获得超过327个赞
知道小有建树答主
回答量:210
采纳率:0%
帮助的人:291万
展开全部
原因是没有给BranchName对象指定引用区域。这个就没问题。

Dim BranchName As Range
Dim TargetRow As Long
Set BranchName = Range("a3:a34")
TargetRow = BranchName.Find(Worksheets(2).Cells(1, 1).Value).Row
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-01-03
展开全部
Dim BranchName As Range
Dim TargetRow As Long
Set BranchName = Range("a3:a34")
TargetRow = BranchName.Find(Worksheets(2).Cells(1, 1).Value).Row
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式