关于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结构产生了这种奇妙的现象…… 展开
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结构产生了这种奇妙的现象…… 展开
展开全部
当 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
使用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
展开全部
原因是没有给BranchName对象指定引用区域。这个就没问题。
Dim BranchName As Range
Dim TargetRow As Long
Set BranchName = Range("a3:a34")
TargetRow = BranchName.Find(Worksheets(2).Cells(1, 1).Value).Row
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
Dim TargetRow As Long
Set BranchName = Range("a3:a34")
TargetRow = BranchName.Find(Worksheets(2).Cells(1, 1).Value).Row
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询