Страницы: 1
RSS
Могут ли макросы перетащиться через внешние ссылки?, как макросы вообще могут появится в формате "Книга Excel 97-2003"
 
Добрый день, Уважаемые!

С макросами встречался всего несколько раз - сделал дело и больше не виделся. Потому в этой теме слаб и прошу совета.

Вопрос: могут ли макросы появляться в документе через внешние ссылки или ещё каким-то "перетаскиванием", кроме явного создания через вкладку "разработчик".

Тут мне выносят мозг с кучей xls-документов где происходит ошибка в макросах и работать дальше не могут - либо эксель падает, либо открывается непонятное окно (редактор кода макросов). И вполне резонно спрашивают: "...Но ведь раньше такого не было!..." А я ничего не могу сказать, т.к. не знаю.

Сейчас работают в excel 2010. Но сохраняют в формате "Книга Excel 97-2003", т.к. "не все филиалы смогут открыть"

Как выяснилось, во всех этих документах есть макросы. Ошибка происходит в строке "Worksheets("Рекомендации").Select":
Код
Sub Auto_Open()
'begin
    Application.ScreenUpdating = False
    М_Листы.ЗащитаЛистов
    Application.ScreenUpdating = True
    Worksheets("Рекомендации").Select
    Cells(6, 3).Select
End Sub

Как я понял, нужен лист "Рекомендации" - но листа такого в документах нет. Вот всё и ломается. (да и вообще не ясно зачем эти две последние строчки - может, просто так)

Как удалить макросы: сохранить как книгу без макросов xlsx, а потом пересохранить книгу в формате "Книга Excel 97-2003" - я уже понял и сказал женщинам так и делать со всеми файлами.
Они утверждают (правда веры им нет, т.к. одна ссылается на другую, а другую я по телефону не вижу), что они всё так и сделали - пересохранили все документы.

Вопрос (тот же самый): могли ли в этих документах снова появится макросы, если с макросами женщины работать не умеют вообще?

То что макросы там появились не из какого-то вируса - это я понял по некоторым названиям в других модулях - они явно имеют отношение к специфике этих документов.
А сломалось всё, как мне кажется, после удаления листа "рекомендации", хоть женщины и говорят, что: "...такого листа никогда не было..." Или ещё как-то...

Ну а сейчас пытаюсь разобраться как сделать макрос для перебора всех xls файлов в конкретной директории и выпиливания из них макросов.
Нашёл тут перебор файлов и тут удаление макросов в книге. Надеюсь получится что-нибудь.
Изменено: kluvonog - 05.05.2016 17:45:31
 
макрос оч простенький, он
Код
Sub Auto_Open()'begin 'он не самостоятельный, нет события его вызывающего, то есть где-то еще есть макрос который его запусает (в листе или на листе в кнопке)
    on error resume next 'напишите эту строку, при этом функционал останется, если нужен конечно
    Application.ScreenUpdating = False
    М_Листы.ЗащитаЛистов 'здесь он запускает еще одну какую-то пользовательскую функцию, как не трудно догадаться - защищает листы
    Application.ScreenUpdating = True
    Worksheets("Рекомендации").Select 'ваш корень зла - просто хочет открыть этот лист, раз его нет, то ошибка
    Cells(6, 3).Select 'можете удалить это и строчку выше, либо весь макрос, ошибка пропадет, либо создать лист с таким названием, либо on error resume next (целых 4 варианта )
End Sub
Помогли? отпишись, а то мы же волнуемся )))
 
Цитата
guzen_pilot написал: он не самостоятельный, нет события его вызывающего,
Вы ошибаетесь.
Sub Auto_Open() , записанный в обычный модуль, срабатывает при открытии книги. (см.файл)
Изменено: Бахтиёр - 06.05.2016 09:47:21
 
Цитата
kluvonog написал:
сохранить как книгу без макросов xlsx, а потом пересохранить книгу в формате "Книга Excel 97-2003"
смотрите пост №5
Изменено: Бахтиёр - 05.05.2016 19:31:08
 
Цитата
Бахтиёр написал: после этого не должны были остаться макросы
смотря каков был порядок этого сохранения. Если такой:
-открыли файл с макросом
-сохранили в .xlsx
-сохранили в .xls
То 100% макросы не были удалены, ибо пересохранение в .xlsx с удалением макросов сработает только после закрытия файла. Т.е. правильный порядок такой:
-открыли файл с макросом
-сохранили в .xlsx
-закрыли этот файл
-открыли заново этот .xlsx
-сохранили в .xls
Теперь никакие макросы в файле не будут сохранены.
Изменено: The_Prist - 06.05.2016 08:42:58
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
guzen_pilot написал: он не самостоятельный, нет события его вызывающего
Да, Бахтиёр здесь прав. В ранних версиях не было событийных процедур в модулях книг и применялись процедуры автоматизации, которые имели зарезервированные имена: Auto_Open, Auto_Close, Auto_Activate, Auto_Deactivate. Размещались как и все остальные в стандартных модулях и срабатывали при наступлении события. В современных версиях так же работают, но имеют отличие: например, если открыть книгу с процедурой Auto_Open макросом(Workbooks.Open), то процедура не сработает. Данные процедуры не рекомендуются к использованию, т.к. давно были заменены на аналоги в ЭтаКнига(ThisWorkbook) и их работа связана исключительно с поддержкой обратной совместимости.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал: удаление макросов сработает только после закрытия файла.
Блин, написал своё сообщение, подумал, засомневался, только хотел потестить именно этот момент (пересохранение с xlsx на xls без закрытия книги)
Не успел - уже уличили во лжи  :)

Дмитрий, спасибо.
Изменено: Бахтиёр - 06.05.2016 08:43:14
 
простите, не застал и не встречал, я не со зла ))))  
Помогли? отпишись, а то мы же волнуемся )))
 
Уважаемые, спасибо за советы!

Что происходит в макросе я понял - почитал в интернете.
Как удалить макрос или его часть, или пересохранить книгу я тоже уже знаю - я писал об этом и пробовал - у меня лично проблем с файлами не было.

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

Господа guzen_pilot, Бахтиёр, The_Prist, большое Спасибо за помощь!
Макрос удаления ещё не начал писать, тут умудрились вирус-шифровальщик зацепить - так что ближайшее время займусь им.
Изменено: kluvonog - 06.05.2016 08:43:30
 
Цитата
kluvonog написал:
Вопрос: могут ли макросы появляться в документе через внешние ссылки или ещё каким-то "перетаскиванием", кроме явного создания через вкладку "разработчик".
могут, допустим:
Код
   With ActiveWorkbook.VBProject.VBComponents(Worksheets("Лист1").CodeName).CodeModule
        .InsertLines 1, "Sub Worksheet_Activate()"
        .InsertLines 2, "сделать_что_нибудь"
        .InsertLines 3, "End Sub" ' 1,2 и 3 - это строки в которые нужно записать код, в "" сам код
   end with
этот код впишет в активной книге в "Лист1"  код который при активации этого самого листа запустит макрос с названием "сделать_что_нибудь", который в большинстве случаев должен быть записан в модулях этой книги. Записать такой код можно откуда угодно, главное правильно обратиться к "цели", а еще желательно и проверить существует ли сам лист, а если другая книга, то открыта или закрыта в текущий момент......
Цитата
kluvonog написал:
А сломалось всё, как мне кажется, после удаления листа "рекомендации"
совершенно верно, хотя лист тоже программно можно удалить, но скорее всего, просто "диверсант" не сознается )))
Изменено: guzen_pilot - 06.05.2016 09:31:45
Помогли? отпишись, а то мы же волнуемся )))
Страницы: 1
Наверх