Excel 2010 VBA: как сохранить/кэшировать параметры поиска при использовании Range.Find()?

Я делал это раньше, но это было много лет назад. Возьмите этот код:

Set Find = r.Find(Text, LookIn:=xlFormulas, lookat:=xlWhole)

Это работает в макросе, который у меня есть. Проблема в том, что когда я выполняю обычный поиск с помощью CTRL+F, параметры, используемые здесь в моем коде макроса, сохраняются. Обычно мне нравится искать в содержимом ячейки, а не во всей ячейке, как это делает приведенный выше код. Немного неудобно расширять параметры поиска и снимать флажок «Соответствовать всему содержимому ячейки» каждый раз, когда я открываю окно поиска.

Что я делал, так это сохранял текущие настройки поиска в переменную, запускал .Find(), затем устанавливал параметры обратно на то, что они были, но я не могу понять это.


person oscilatingcretin    schedule 29.06.2011    source источник


Ответы (2)


В конце вашего кода, когда вы сделали то, что вам нужно, просто установите его обратно:

Set Find = r.Find(Text, LookIn:=xlValues, lookat:=xlPart)
person Lance Roberts    schedule 29.06.2011

Из статьи msdn:

Примечания Параметры LookIn, LookAt, SearchOrder и MatchByte сохраняются каждый раз, когда вы используете этот метод. Если вы не укажете значения для этих аргументов при следующем вызове метода, будут использоваться сохраненные значения. Установка этих аргументов изменяет настройки в диалоговом окне «Найти», а изменение настроек в диалоговом окне «Найти» изменяет сохраненные значения, которые используются, если аргументы не указаны. Чтобы избежать проблем, устанавливайте эти аргументы явно при каждом использовании этого метода.

Я никогда не слышал о каком-либо методе получения и восстановления настроек диалога поиска.

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

person Alain    schedule 29.06.2011