Здравствуйте уважаемые специалисты. Вновь обращаюсь к Вам за помощью. Надеюсь не обделите вниманием. В общем суть вопроса. Есть некий файл (рабочая книга) созданный в Excel 2003. В рабочей книге есть два листа "Конструктор" и "Результат" . На первом листе "Конструктор" над рабочим диапазонов расположены кнопки "Закрыть" и "Раскрыть" с привязкой к макросам, при нажатии которых соответственно диапазон либо скрывается либо отображается. На втором листе "Результат" есть одна кнопка "Перенос" тоже с макросом, при нажатии на которую копируется заданный диапазон на листе "Результат", затем становится активным лист "Конструктор", нажимается конопка "Раскрыть" (то бишь запускается вторичный макрос, привязанный к кнопке "Раскрыть", вставляются скопированные данные в заданный диапазон и на этом работа макроса "Перенос" останавливается. То есть в теле макроса "Перенос" лежит команда запуска вторичного макроса "Раскрыть". Понятно, что в реальности у меня может быть более длинная цепочка вторичных макросов. Для простоты примера я выложил более простую схему. В целом конструкция работает как надо, но столкнулся с одной неприятной "печалькой". Оказалось, что в теле первичного макроса в коде запуска вторичного макроса прописывается абсолютное имя рабочей книги и имя второчиного макроса. Это приводит к тому, что если я изменю название рабочей книги и не произведу коррекцию этого названия в теле макроса, то при попытке его запустить (первичный макрос), Excel выдаст ошибку
Run-Time Error '1004': Не удалось найти "такой то файл". Проверьте задание имени и местоположения файла.
Согласитесь, что это очень геморойно и жестко привязывает тебя к тому чтобы имя файла не менялось, в противном случае нужно делать корректировку во всех макросах где есть код содержащий имя книги.
Очевидно, что здесь уместнее ввести переменную и присвить её к имени книги. Тогда можно будет менять имя файла и не беспокоится что макрос перестанет запускаться. Думаю, что в модуль ЭтаКнига нужно засунуть объект ThisWorKBook. Однако ж ничего у меня не получилось. Пожалуйста посмотрите выложенный мною файл и подскажите какой макрос воткнуть в модуль ЭтаКнига и что подправить в первичном макросе "Перенос", что бы в коде запуска вторичного макроса была указана переменная вместо абсолютного имени рабочей книги.
Укажу код который я пытался использовать и который не сработал.
В модуле ЭтаКнига пытался задать перменную, что бы она задавалась при открытии книги
В стандартном модуле вместо абсолютного имени рабочей книги вставил переменную "B"
Но как уже говорил ничего не сработало, поэтому в выложенном файле я эти макросы не использовал. Более того для наглядности ошибки запуска вторичного макроса я изменил имя файла, не изменив при этом тело макроса. Достаточно переименовать файл (убрать из имени цифру 2) и всё будет работать. Думаю суть проблеммы понятна. Помогите пожалуйста люди добрые!
Run-Time Error '1004': Не удалось найти "такой то файл". Проверьте задание имени и местоположения файла.
Согласитесь, что это очень геморойно и жестко привязывает тебя к тому чтобы имя файла не менялось, в противном случае нужно делать корректировку во всех макросах где есть код содержащий имя книги.
Очевидно, что здесь уместнее ввести переменную и присвить её к имени книги. Тогда можно будет менять имя файла и не беспокоится что макрос перестанет запускаться. Думаю, что в модуль ЭтаКнига нужно засунуть объект ThisWorKBook. Однако ж ничего у меня не получилось. Пожалуйста посмотрите выложенный мною файл и подскажите какой макрос воткнуть в модуль ЭтаКнига и что подправить в первичном макросе "Перенос", что бы в коде запуска вторичного макроса была указана переменная вместо абсолютного имени рабочей книги.
Укажу код который я пытался использовать и который не сработал.
В модуле ЭтаКнига пытался задать перменную, что бы она задавалась при открытии книги
Код |
---|
Sub Wbook() ' Задание переменной Set B = ThisWorkbook End Sub |
Код |
---|
Sub Perenos() ' Perenos Макрос ' Макрос записан 05.03.2015 (user) Range("B3:C12").Select Selection.Copy Sheets("Констурктор").Select Application.Run "'B'!Raskryt" Range("B3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("B3").Select End Sub |