Как зациклить диалоговое окно поиска в VBA - PullRequest
0 голосов
/ 29 апреля 2018

Я прошу прощения, если мой вопрос может показаться немного базовым, мои навыки кодирования не существуют. Как указано выше, я сталкиваюсь с проблемой при попытке повторить диалоговое окно цикла при выполнении действия. Что я хочу сделать, так это создать макрос, в котором он открывает диалоговое окно поиска, позволяет мне ввести число, затем он найдет его, выделит всю строку и выделит желтым цветом и повторяет до тех пор, пока не будет нажата клавиша «ESC». Мои вопросы:

1) Когда я щелкаю по макросу, он открывает диалоговое окно поиска, где я ввожу свой номер и нажимаю ввод, он идет к нему, но не продолжается с остальными, пока я сначала не закрою диалоговое окно и снова не нажму макрос , Есть ли способ, чтобы он автоматически закрывался после того, как я ввел номер, чтобы он мог продолжить с остальным кодом, без необходимости нажимать «ESC», чтобы закрыть его, и снова нажать макрос?

2) Если это возможно, могу ли я сделать его цикличным, без необходимости нажимать макрос более одного раза, чтобы запустить его и как?

3) мне кажется, что я не могу найти команду, которая при нажатии клавиши «ESC» заканчивает цикл. Я обнаружил, что некоторые из них прерывают длительный процесс обновления, когда пользователи нажимают клавишу Escape, но то, что я делаю, не является долгим процессом обновления.

Код:

    Sub Macro2()
'
' Macro2 Macro
'
' Keyboard Shortcut: Ctrl+Shift+Z
'
    Application.CommandBars.FindControl(ID:=1849).Execute
    ActiveCell.Rows("1:1").EntireRow.Select
    ActiveCell.Activate
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0

    End With
    ActiveCell.Rows("1:1").Select
End Sub

1 Ответ

0 голосов
/ 29 апреля 2018

используйте Application.Dialogs(xlDialogFormulaFind).Show вместо и распоряжение, чтобы макрос дождался закрытия диалогового окна, прежде чем продолжить

просто помните, что вам нужно хотя бы один раз нажать кнопку диалога «Найти», чтобы получить вхождение, которое будет использовано ссылкой 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...