И снова доброго времени суток, Планетяне! Я всё "массивы, массивы", а тут вот какая штука приключилась: в общем есть такой всем известный инструмент как "Найти и Заменить", состоящий из 2х соответствующих вкладок. Лично у меня косяк случился с "Заменой", но, думаю, что с поиском всё абсолютно также будет. Что же с ним не так?
А дело вот в чём:
если записывать макрорекордером замену для выделенного диапазона, то он выдаст что-то вроде этого
в общем, он передаёт все настройки замены в этом коде и это даёт некоторые свои нюансы.
1. при каждом использовании Replace в макросе, эти самые "настройки" инструмента сохраняются. То есть, по окончании работы макроса (или аварийного прерывания его на каком-либо этапе) все настройки инструмента становятся такими, какие последними были применены в макросе
2. внутри макроса, если указывать не все настройки Replace, а только, например, Replace "Вася", "Дима", то все неуказанные явно параметры применяются, согласно последних настроек. То есть, руками вы, допустим, заменяли формат ячейки, а потом запустили какой-нибудь макрос с Replace и неполным объявлением настроек. А он не срабатывает, потому что, помимо прочего, ещё и формат ищет, а вы уже и забыли.
3. решением этой проблемы у меня стало явное объявление ВСЕХ настроек Replace в начале любого макроса с его участием
А вопрос, собственно в том, как в начале кодов с Replace "запоминать" настройки инструмента, определённые до запуска макроса и потом, в конце работы макроса, возвращать их? Может у кого найдутся ещё советы, нюансы и "подводные камни", которые нужно учитывать…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Как написано в документации, настройки метода Replace неразрывно связаны с настройками объекта Find dialog box из коллекции Dialogs, получить который можно так: Aplication.Dialogs(xlDialogFormulaReplace). Или для поиска xlDialogFormulaFind. Полный список элементов коллекции тут: https://msdn.microsoft.com/en-us/library/bb240973(v=office.12).aspx Соответственно, Вам нужно свойства желаемого диалога сохранить в переменные типа Variant, выполнить метод с нужными настройками и восстановить значения изменившихся при выполнении метода параметров диалога. Я слабо понимаю, зачем так сделано, чтобы настройки объекта меняли параметры метода, а параметры метода меняли настройки объекта, но - факт.
Irregular Expression, большое вам спасибо за наводку - сам поиском не добрался! Отпишусь по результатам тестов в эту тему, но, думаю, что не раньше следующей недели, т.к. срочная командировка в другой регион…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Irregular Expression написал: Соответственно, Вам нужно свойства желаемого диалога сохранить в переменные типа Variant
А они есть для Aplication.Dialogs(xlDialogFormulaReplace)? Метод возвращает стандартный объект класса Dialog, а там нет ничего, кроме Show. Какого-то другого интерфейса, с которым может сочетаться Dialog не наблюдается.