Страницы: 1
RSS
Замена слова в ссылках, находящихся на нескольких листах одной книги
 
Всем доброго времени суток!
Я продолжаю при помощи макрорекордера и гугла ваять макросы, но получается так себе. :sceptic:

Итак, есть у меня 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 - 26.11.2020 16:09:17
 
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 - 26.11.2020 15:26:56
Не бойтесь совершенства. Вам его не достичь.
 
Mershik. к сожалению вся моя переписка по работе контролируется и я схлопочу большие неприятности от СБ если приложу даже урезанный файл.

Спасибо. Да, диапазону соотвествует определённый месяц.
Если пользователь ввёл 1 - то на всех вкладках в столбце ВЕ в ссылках "январь" должен поменяться на "январь" (да это тупо).
Если пользователь ввёл 2 - то на всех вкладках в столбце ВF в ссылках "январь" должен поменяться на "февраль".
.........................................
Если пользователь ввёл 12 - то на всех вкладках в столбце ВP в ссылках "январь" должен поменяться на "декабрь".

Чувствую, что ваш код близок к истине. Но пока не могу до неё докопаться(
 
 
Ігор Гончаренко, блиин. Спасибо, что ткнули носом в глупую ошибку).
Но код пока всё равно не заработал.
 
Цитата
derekT написал:
и я схлопочу большие неприятности от СБ
пусть они напишут вам макрос и никаких неприятностей, ни одного байта на вынос из офиса
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал: пусть они напишут вам макрос
Не напишут.  :cry:

P.S.
Я был недостаточно внимателен к вашему ответу.
Прошу прощения. Все заработало.
Большое спасибо.
 
derekT, цитата - не бездумная копия.
Свои сообщения можно дополнять

См. сообщение №8, составленное из двух. Что-то стало непонятно?
Страницы: 1
Наверх