Всем доброго времени суток! Я продолжаю при помощи макрорекордера и гугла ваять макросы, но получается так себе.
Итак, есть у меня Excel - книга с 15-20 листами, на которых находятся одинаковые по структуре таблицы. Так же штук 5 скрытых листов (их изменять не нужно) и обязательно один лист, в названии которого содержится слово "ОТСТОЙ" (этот лист тоже трогать не надо). Таких книг около 20 штук. Изначально в ячейках листов, в двенадцати определённых столбцах (порядок столбцов на всех листах один и тот же) находятся длиннющие ссылки на другой файл в имени которого содержится слово "январь". Каждый месяц на диске появляется новый файл с данными (в его названии будет стоять "февраль", "март"....) и соответственно нужно проводить замену ссылок: менять "январь" на "февраль", "январь" на "март" и т.д.
Макрос я почти написал, только вот ведь незадача он не срабатывает (. Код макроса прилагаю отдельным файлом. Основная идея:
1. Пользователем вводится порядковый номер месяца 1а. Создаётся массив из 12 названий месяцев. 2. По этому порядковому номеру из массива выбирается соответствующее название месяца. 3. Создаётся массив-адресов столбцов (эти адреса одинаковые на всех листах, кроме скрытых). 3а. Если пользователь ввёл 1, то из массива stolbi() выбирается первый элемент (это диапазон "BE:BE"). Если ввёл цифру 2, то из массива stolbi() выбирается второй элемент (это диапазон "BF:BF") и т.д. Соответственно ссылки нужно изменить на всех листах (кроме скрытых и ОТСТОЙ) в выбранном диапазоне. 4. Запускаю цикл, который пробегается по всем листам активной книги и если они не являются скрытыми и не содержат в своём названии "ОТСТОЙ", то в соответствующих столбцах(из пункта 3а) в ячейках содержащих ссылки, в самих ссылках изменяются названия месяцев.
На пункте 4 всё запарывается. Почему-то не срабатывает цикл и макрос проводит замену только на том листе, с которого был запущен. Более того,если я его запущу с листа с названием "blablabla- ОТСТОЙ", то он и там пытается замену делать! Подскажите пожалуйста, как нужно правильно написать код, чтобы макрос заработал так как задумывалось?
P.S. В силу независящих от меня обстоятельств саму книгу Эксель приложить не могу. Прошу понять и простить.
derekT, вы как хотите что бы люди вам помогали? в правилах есть пункт о файле примере и желаемом результате... пы.сы. иногда разобрать чужой макрос сложнее чем написать новый
For Each sh In ActiveWorkbook.Worksheets If sh.Visible And InStr(sh.Name, "ОТСТОЙ") = 0 Then Sh.Columns(stolbi(a)).Replace What:="январь", Replacement:=k 'MsgBox sh.Name End If Next sh
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
чуть изменил работает вроде) понял что диапазону видимо соответствует определенный месяц...
Код
stolbi = Array("BE:BE", "BF:BF", "BG:BG", "BH:BH", "BI:BI", "BJ:BJ", "BK:BK", "BL:BL", "BM:BM", "BN:BN", "BO:BO", "BP:BP")
For Each sh In ActiveWorkbook.Worksheets
For i = LBound(stolbi) To UBound(stolbi)
If sh.Visible And InStr(sh.Name, "ОТСТОЙ") = 0 Then
sh.Range(stolbi(i)).Replace What:="январь", Replacement:=k
'MsgBox sh.Name
End If
Next i
Next sh
Mershik. к сожалению вся моя переписка по работе контролируется и я схлопочу большие неприятности от СБ если приложу даже урезанный файл.
Спасибо. Да, диапазону соотвествует определённый месяц. Если пользователь ввёл 1 - то на всех вкладках в столбце ВЕ в ссылках "январь" должен поменяться на "январь" (да это тупо). Если пользователь ввёл 2 - то на всех вкладках в столбце ВF в ссылках "январь" должен поменяться на "февраль". ......................................... Если пользователь ввёл 12 - то на всех вкладках в столбце ВP в ссылках "январь" должен поменяться на "декабрь".
Чувствую, что ваш код близок к истине. Но пока не могу до неё докопаться(