Excel 搜索宏未返回所有结果
你好,谢谢你抽出时间 我有一个通过搜索电子表格数据填充的列表框。 列表框仅在最上面一行填充我的预期收益。 列表框第2列第2行的其余数据不填充 我试过在行号、列偏移量和添加更多.listcounts中使用不同的偏移量。我已尝试将最后一个最新的listcount结束数字更改为0,错误发生后,listbox已正确填充,但只填充了未知数量的行 我可能错了,但我想这与循环有关 有没有更好的方法来完成这类任务?Excel 搜索宏未返回所有结果,excel,vba,Excel,Vba,你好,谢谢你抽出时间 我有一个通过搜索电子表格数据填充的列表框。 列表框仅在最上面一行填充我的预期收益。 列表框第2列第2行的其余数据不填充 我试过在行号、列偏移量和添加更多.listcounts中使用不同的偏移量。我已尝试将最后一个最新的listcount结束数字更改为0,错误发生后,listbox已正确填充,但只填充了未知数量的行 我可能错了,但我想这与循环有关 有没有更好的方法来完成这类任务? 这里没有循环。你的。。。循环缺少While或Until语句。请参阅:有关如何使用Do。。。循环
这里没有循环。你的。。。循环缺少While或Until语句。请参阅:有关如何使用Do。。。循环语句。应该是这样的:
Private Sub CommandButton1_Click()
Dim rng As Range
Dim ws As Worksheet
Dim i As Integer
Set ws = ActiveSheet
Set rng = ws.Range("A:E")
Set fnd = rng.Find(TextBox1)
If fnd Is Nothing Then MsgBox txtSearch & " not found": Exit Sub
Set first = fnd
With ListBox1
.Clear
.AddItem fnd.Offset(, -4)
.List(.ListCount - 1, 1) = fnd.Offset(, 0)
Do
Set fnd = rng.FindNext(fnd)
If fnd.Address = first.Address Then Exit Do
.AddItem fnd.Offset(, -4)
.List(.ListCount - 1, 1) = fnd.Offset(, 1)
Loop Until 'your logic here'
End With
End Sub
试试这个宏
Option Explicit
Private Sub CommandButton1_Click()
Dim rng As Range
Dim ws As Worksheet
Dim adrs1$, Actual_adrs$
ListBox1.Clear
Set ws = ActiveSheet
Set rng = ws.Range("A:E")
Set fnd = rng.Find(TextBox1.Value)
If fnd Is Nothing Then MsgBox TextBox1.Value & " not found": Exit Sub
Actual_adrs = fnd.Address: adrs1 = Actual_adrs
Do
With ListBox1
.AddItem fnd.Offset(, -4)
.List(.ListCount - 1, 1) = fnd.Offset(, 0)
End With
Set fnd = rng.FindNext(fnd)
Actual_adrs = fnd.Address
If Actual_adrs = adrs1 Then Exit Do
Loop
End Sub
正如注释所提到的,您的循环逻辑是不正确的。我想这应该对你有用。我改变了间距,但它基本上是同一个宏,在循环开始时只有一个
Do-While
Private Sub CommandButton1_Click()
Dim rng As Range, ws As Worksheet, i As Integer, first As Range
Set ws = ActiveSheet
Set rng = ws.Range("A:E")
Set fnd = rng.Find(TextBox1)
If fnd Is Nothing Then
MsgBox txtSearch & " not found"
Exit Sub
End If
Set first = fnd
With ListBox1
.Clear
.AddItem fnd.Offset(, -4)
.List(.ListCount - 1, 1) = fnd.Offset(, 0)
'second find needs to be out of the loop
Set fnd = rng.FindNext(fnd)
Do While fnd.Address <> first.Address
.AddItem fnd.Offset(, -4)
.List(.ListCount - 1, 1) = fnd.Offset(, 1)
Set fnd = rng.FindNext(fnd)
Loop
End With
End Sub
Private子命令按钮1\u单击()
Dim rng作为范围,ws作为工作表,i作为整数,第一个作为范围
设置ws=ActiveSheet
设置rng=ws.Range(“A:E”)
设置fnd=rng.Find(TextBox1)
如果fnd什么都不是,那么
MsgBox txtSearch&“未找到”
出口接头
如果结束
先设置=fnd
使用ListBox1
清楚的
.AddItem fnd.偏移量(,-4)
.List(.ListCount-1,1)=fnd.Offset(,0)
“第二次发现需要在循环之外
设置fnd=rng.FindNext(fnd)
请先填写地址,然后再填写地址
.AddItem fnd.偏移量(,-4)
.List(.ListCount-1,1)=fnd.Offset(,1)
设置fnd=rng.FindNext(fnd)
环
以
端接头
我认为这里没有循环。语法为Do While或Do Until.Hi all。非常感谢您的回复。我将返回并向代码介绍您的建议。谢谢你抽出时间。我觉得我已经从提供的所有答案中学到了东西。我希望将来能回答这样的问题。
Private Sub CommandButton1_Click()
Dim rng As Range, ws As Worksheet, i As Integer, first As Range
Set ws = ActiveSheet
Set rng = ws.Range("A:E")
Set fnd = rng.Find(TextBox1)
If fnd Is Nothing Then
MsgBox txtSearch & " not found"
Exit Sub
End If
Set first = fnd
With ListBox1
.Clear
.AddItem fnd.Offset(, -4)
.List(.ListCount - 1, 1) = fnd.Offset(, 0)
'second find needs to be out of the loop
Set fnd = rng.FindNext(fnd)
Do While fnd.Address <> first.Address
.AddItem fnd.Offset(, -4)
.List(.ListCount - 1, 1) = fnd.Offset(, 1)
Set fnd = rng.FindNext(fnd)
Loop
End With
End Sub