如何在VBA中循环查找对话框

如何在VBA中循环查找对话框,vba,excel,loops,Vba,Excel,Loops,如果我的问题看起来有点基本,我很抱歉,我的编码技能是不存在的。如上所述,我面临着一个挑战,即在执行操作时尝试让循环对话框重复。我想做的是创建一个宏,如果它打开“查找”对话框,让我输入一个数字,然后它将找到它并选择整行,将其高亮显示为黄色,然后重复,直到按下“ESC”键。我的问题是: 1) 当我单击宏时,它会打开“查找”对话框。当我输入号码并按enter键时,它会转到该对话框,但在我先关闭对话框并再次按宏之前,它不会继续执行其余操作。有没有办法让它在我输入数字后自动关闭,这样它就可以继续执行代码的

如果我的问题看起来有点基本,我很抱歉,我的编码技能是不存在的。如上所述,我面临着一个挑战,即在执行操作时尝试让循环对话框重复。我想做的是创建一个宏,如果它打开“查找”对话框,让我输入一个数字,然后它将找到它并选择整行,将其高亮显示为黄色,然后重复,直到按下“ESC”键。我的问题是:

1) 当我单击宏时,它会打开“查找”对话框。当我输入号码并按enter键时,它会转到该对话框,但在我先关闭对话框并再次按宏之前,它不会继续执行其余操作。有没有办法让它在我输入数字后自动关闭,这样它就可以继续执行代码的其余部分,而不必按“ESC”关闭它并再次按宏

2) 如果可能的话,我可以让它循环而不必多次按下宏来启动它吗?如何启动

3) 在我的一生中,我似乎找不到一个命令,当按下“ESC”键时,将结束循环。我发现当用户按Escape键时,有一些会中断长时间的更新过程,但我所做的不是长时间的更新过程

代码:


使用
Application.Dialogs(xlDialogFormulaFind).Show
代替和haveorder,让宏等待对话框关闭后再继续

请记住,您必须至少单击一次“查找”对话框按钮,以获取以下宏中的
ActiveCell
引用将使用的引用:

Sub Macro2()
'
' Macro2 Macro
'
' Keyboard Shortcut: Ctrl+Shift+Z
'
    Dim firstAddress As String
    Dim f As Range, cellsToColor As Range

    Application.Dialogs(xlDialogFormulaFind).Show
    With ActiveSheet.UsedRange
        Set f = .Find(what:=ActiveCell.Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not f Is Nothing Then
            firstAddress = f.Address
            Do
                If cellsToColor Is Nothing Then
                    Set cellsToColor = f
                Else
                    Set cellsToColor = Union(f, cellsToColor)
                End If
                Set f = .FindNext(f)
            Loop While f.Address <> firstAddress

            With cellsToColor.Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .Color = 65535
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
        End If
    End With
End Sub
Sub-Macro2()
'
'宏2宏
'
'键盘快捷键:Ctrl+Shift+Z
'
将第一个地址设置为字符串
调暗f为范围,单元格颜色为范围
对话框(xlDialogFormulaFind).Show
使用ActiveSheet.UsedRange
Set f=.Find(what:=ActiveCell.Value,LookIn:=xlValues,lookat:=xlWhole)
如果不是的话,那么f什么都不是
firstAddress=f.地址
做
如果cellsToColor不算什么
设置cellsToColor=f
其他的
设置cellsToColor=Union(f,cellsToColor)
如果结束
集合f=.FindNext(f)
在f.AddressFirstAddress时循环
带cellsToColor。内饰
.Pattern=xlSolid
.PatternColorIndex=xlAutomatic
.Color=65535
.TintAndShade=0
.PatternTintAndShade=0
以
如果结束
以
端接头

对您的问题的一个有用的编辑是显示您正在使用的代码……对不起,doneI建议使用您创建的自定义用户表单,而不是使用内置的“查找”对话框。它只需要一个标签、一个文本输入框和两个命令按钮(vbOk和vbCancel)。这样,您就不需要捕捉ESC键,只需等待用户单击“取消”即可。这样做了,但输入后对话框仍无法关闭的问题仍然存在,更不用说,如果我想更改数字,我仍必须手动单击对话框,而如果我不关闭对话框,则不会产生效果,非常感谢你,虽然我真的很感谢你花时间和精力做这件事,我祝你一切顺利。我照皮特告诉我的做了,不需要使用“esc”键就可以编写出我想要的代码。我不明白。如果单击“查找下一步”按钮,然后关闭(或Esc)对话框,它必须正常工作
Sub Macro2()
'
' Macro2 Macro
'
' Keyboard Shortcut: Ctrl+Shift+Z
'
    Dim firstAddress As String
    Dim f As Range, cellsToColor As Range

    Application.Dialogs(xlDialogFormulaFind).Show
    With ActiveSheet.UsedRange
        Set f = .Find(what:=ActiveCell.Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not f Is Nothing Then
            firstAddress = f.Address
            Do
                If cellsToColor Is Nothing Then
                    Set cellsToColor = f
                Else
                    Set cellsToColor = Union(f, cellsToColor)
                End If
                Set f = .FindNext(f)
            Loop While f.Address <> firstAddress

            With cellsToColor.Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .Color = 65535
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
        End If
    End With
End Sub