excel vba中find找数据,为什么只找一次啊

程序段如下:SetfindCell=Sheet1.Columns(coldw).Find(str2)IfNotfindCellIsNothingThenfirstAddr... 程序段如下:
Set findCell = Sheet1.Columns(coldw).Find(str2)
If Not findCell Is Nothing Then

firstAddress = findCell.Address

Do
dayInRow = findCell.Row
For i = 1 To day
mydate = DateSerial(year, month, i)
Sheet15.Cells(i + 1, 1) = mydate
j = 1
For lst = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lst) = True Then
str1 = ListBox1.List(lst)
Name1 = Left(str1, InStr(str1, "&") - 1)
col = Right(str1, Len(str1) - Len(Name1) - 1)
If CDate(Sheet1.Cells(dayInRow, col)) < mydate Then
Sheet15.Cells(i + 1, j + 1) = Sheet15.Cells(i + 1, j + 1) + 1
End If
j = j + 1
End If

Next
Next
Loop While Not findCell Is Nothing And firstAddress <> findCell.Address
'Loop Until findCell.Address = firstAddress
End If
运行的时候只走一次就退出来了,求哪位高手帮忙解决一下
展开
 我来答
jnllh
2011-09-26
知道答主
回答量:36
采纳率:0%
帮助的人:29.1万
展开全部
是你的逻辑设计的原因,你的find()方法在循环体之外。你看一下你的结构:
Set findCell = Sheet1.Columns(coldw).Find(str2)
if then
do
for
for
.........
next
next
loop
endif
把它设置到循环体之内去就不会只找一次了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
languanzeng
2011-09-25 · TA获得超过2285个赞
知道小有建树答主
回答量:1645
采纳率:0%
帮助的人:1811万
展开全部
你是想在某列查找str2吧,必须加上Findnext属性,即查找下一个:
举例:
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
此例在a1:a500查找数值为2的单元格,并将单元格的值重新赋值为5
更多追问追答
追问
Columns对象没有FindNext方法啊
追答
我看不明白你的代码是做什么的,不如你把问题说清楚,让人家帮你写段代码,会更容易些。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
软萌小奶猫
2011-09-26 · TA获得超过157个赞
知道小有建树答主
回答量:105
采纳率:0%
帮助的人:60.9万
展开全部
Columns和Ranges都可以用findnext
Set findCell = Sheet1.Columns(coldw).Find(str2)
If Not findCell Is Nothing Then

firstAddress = findCell.Address

Do
dayInRow = findCell.Row
For i = 1 To day
mydate = DateSerial(year, month, i)
Sheet15.Cells(i + 1, 1) = mydate
j = 1
For lst = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lst) = True Then
str1 = ListBox1.List(lst)
Name1 = Left(str1, InStr(str1, "&") - 1)
col = Right(str1, Len(str1) - Len(Name1) - 1)
If CDate(Sheet1.Cells(dayInRow, col)) < mydate Then
Sheet15.Cells(i + 1, j + 1) = Sheet15.Cells(i + 1, j + 1) + 1
End If
j = j + 1
End If

Next
Next
set findCell = Sheet1.Columns(coldw).FindNext(findCell)
Loop While Not findCell Is Nothing And firstAddress <> findCell.Address
End If
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式