Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 搜索宏未返回所有结果_Excel_Vba - Fatal编程技术网

Excel 搜索宏未返回所有结果

Excel 搜索宏未返回所有结果,excel,vba,Excel,Vba,你好,谢谢你抽出时间 我有一个通过搜索电子表格数据填充的列表框。 列表框仅在最上面一行填充我的预期收益。 列表框第2列第2行的其余数据不填充 我试过在行号、列偏移量和添加更多.listcounts中使用不同的偏移量。我已尝试将最后一个最新的listcount结束数字更改为0,错误发生后,listbox已正确填充,但只填充了未知数量的行 我可能错了,但我想这与循环有关 有没有更好的方法来完成这类任务? 这里没有循环。你的。。。循环缺少While或Until语句。请参阅:有关如何使用Do。。。循环

你好,谢谢你抽出时间

我有一个通过搜索电子表格数据填充的列表框。 列表框仅在最上面一行填充我的预期收益。 列表框第2列第2行的其余数据不填充

我试过在行号、列偏移量和添加更多.listcounts中使用不同的偏移量。我已尝试将最后一个最新的listcount结束数字更改为0,错误发生后,listbox已正确填充,但只填充了未知数量的行

我可能错了,但我想这与循环有关

有没有更好的方法来完成这类任务?


这里没有循环。你的。。。循环缺少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