Сброс параметров диалогового окна «Найти и заменить» в Excel - PullRequest
2 голосов
/ 28 октября 2008

Как программно сбросить параметры диалогового окна Excel Find and Replace на значения по умолчанию («Найти что», «Заменить на», «Внутри», «Поиск», «Искать в», «Соответствовать регистру», «Соответствовать всему» содержимое ячейки ")?

Я использую Application.FindFormat.Clear и Application.ReplaceFormat.Clear для сброса поиска и замены форматов ячеек.

Интересно, что после использования expression.Replace(FindWhat, ReplaceWhat, After, MatchCase, WholeWords) строка FindWhat отображается в диалоговом окне Find and Replace, но не параметр ReplaceWhat.

Ответы [ 4 ]

3 голосов
/ 14 января 2010

Вы можете использовать этот макрос для сброса поиска и замены. К сожалению, вы должны вызывать их оба, поскольку есть один или два аргумента, уникальных для каждого, поэтому, если вы хотите сбросить все, вы застряли. «Сброс» отсутствует, поэтому единственный способ, который я нашел, - выполнить фиктивный поиск и заменить с использованием параметров по умолчанию.

Sub ResetFind()
    Dim r As Range

    On Error Resume Next  'just in case there is no active cell
    Set r = ActiveCell
    On Error Goto 0

    Cells.Find what:="", _
               After:=ActiveCell, _
               LookIn:=xlFormulas, _
               LookAt:=xlPart, _
               SearchOrder:=xlByRows, _
               SearchDirection:=xlNext, _
               MatchCase:=False, _
               SearchFormat:=False
    Cells.Replace what:="", Replacement:="", ReplaceFormat:=False

    If Not r Is Nothing Then r.Select
    Set r = Nothing
End Sub
1 голос
/ 29 октября 2008

Вы можете использовать следующую команду, чтобы открыть диалоговое окно «Заменить» с заполненными полями:

Application.Dialogs (xlDialogFormulaReplace). Покажите здесь аргументы-

список аргументов

find_text, replace_text, look_at, look_by, active_cell, match_case, match_byte


Пока что единственный способ «нажать» кнопки - это SendKey.


После долгих исследований и испытаний я теперь точно знаю, что вы хотите сделать, но не думаю, что это можно сделать (без SendKey). Похоже, что в Excel есть ошибка, которая не сбрасывает значение замены (из VBA), независимо от того, что вы пытаетесь установить и установить на него.

Я нашел этот «более быстрый» способ, которым кто-то писал в MSDN, так что вы можете попробовать.

Быстрее, чем заменить

0 голосов
/ 13 декабря 2014

Я проверил это, и это работает. Я позаимствовал запчасти в нескольких местах

Sub RR0()   'Replace Reset & Open dialog  (specs: clear settings, search columns, match case)

'Dim r As RANGE         'not seem to need
'Set r = ActiveCell     'not seem to need
On Error Resume Next    'just in case there is no active cell
On Error GoTo 0

Application.FindFormat.Clear          'yes
Application.ReplaceFormat.Clear       'yes

Cells.find what:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext
Cells.Replace what:="", Replacement:="", ReplaceFormat:=False, MatchCase:=True    'format not seem to do anything
'Cells.Replace what:="", Replacement:="", ReplaceFormat:=False    'orig, wo matchcase not work unless put here - in replace

'If Not r Is Nothing Then r.Select    'not seem to need
'Set r = Nothing

'settings choices:
'match entire cell:  LookAt:=xlWhole,  or:  LookAt:=xlPart,
'column or row:      SearchOrder:=xlByColumns,  or:  SearchOrder:=xlByRows,

Application.CommandBars("Edit").Controls("Replace...").Execute   'YES WORKS
'Application.CommandBars("Edit").Controls("Find...").Execute   'YES same, easier to manipulate
'Application.CommandBars.FindControl(ID:=1849).Execute        'YES full find dialog

'PROBLEM: how to expand options?
'SendKeys ("%{T}")   'alt-T works the first time, want options to stay open

Application.EnableEvents = True           'EVENTS

End Sub
0 голосов
/ 26 сентября 2014

Нет необходимости использовать sendkeys, вы можете легко ссылаться на значения, которые вам нужны для сброса значений в диалоговом окне.

Sub ResetFindReplace()
   'Resets the find/replace dialog box options
   Dim r As Range

   On Error Resume Next

   Set r = Cells.Find(What:="", _
   LookIn:=xlFormulas, _
   SearchOrder:=xlRows, _
   LookAt:=xlPart, _
   MatchCase:=False)

   On Error GoTo 0

   'Reset the defaults

   On Error Resume Next

   Set r = Cells.Find(What:="", _
   LookIn:=xlFormulas, _
   SearchOrder:=xlRows, _
   LookAt:=xlPart, _
   MatchCase:=False)

   On Error GoTo 0
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...