Lost your password?


Хитрости »
Основные понятия (27)
Сводные таблицы и анализ данных (10)
Графики и диаграммы (5)
Работа с VB проектом (12)
Power BI и Power Query (23)
Условное форматирование (5)
Списки и диапазоны (5)
Макросы(VBA процедуры) (68)
Разное (43)
Баги и глюки Excel (5)

Как запустить файл с включенными макросами?

В данной статье хочу описать вкратце способ, как можно запустить какой-то файл Excel с разрешенными макросами. Зачем это надо: бывают ситуации, когда Вы высылаете файл с макросами и хотите, чтобы его открывали только с разрешенными макросами, т.к. без них он бесполезен (как правило через макросы выполняются некие операции при работе с файлом). В принципе есть способы заставить пользователя работать с файлом только при включенных макросах. Самый простой (способ 1) - это заставить его именно разрешить их выполнение, прежде чем начать работу с файлом.

Вариант 1:
Самый простой и легко исполняемый способ. Создаете в нужной книге новый лист. Называете его "WARNING". На листе мы пишем инструкцию по действиям пользователя для включения макросов. Что-то типа:
Для работы с файлом требуется разрешить макросы!
Excel 2003: Сервис- Безопасность- Уровень макросов «Низкий»
Excel 2007: Меню- Параметры Excel- Центр управления безопасностью- Параметры центра управления безопасностью- Параметры макросов- Разрешить все макросы;
Excel 2010: Файл- Параметры- Центр управления безопасностью- Параметры центра управления безопасностью- Параметры макросов- Разрешить все макросы.

И скрываем все листы в книге, кроме листа "WARNING". Теперь в остается дело за малым: в модуль книги вставляете следующий код:

'Данная процедура скрывает перед закрытием книги все листы,
'кроме листа "WARNING"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.ScreenUpdating = False
    Dim wsSh As Worksheet
    Sheets("WARNING").Visible = -1
    For Each wsSh In ThisWorkbook.Sheets
        If wsSh.Name <> "WARNING" Then wsSh.Visible = 2
    Next wsSh
    ThisWorkbook.Save
End Sub
'Данная процедура показывает перед открытием книги все листы,
'кроме листа "WARNING"
Private Sub Workbook_Open()
    Dim wsSh As Worksheet
    For Each wsSh In ThisWorkbook.Sheets
        wsSh.Visible = -1
    Next wsSh
    ThisWorkbook.Sheets("WARNING").Visible = 2
End Sub

Из кода видно, что если макросы будут отключены, то код Workbook_Open не будет выполнен. Следовательно пользователь увидит только лист "WARNING", на котором у нас написаны инструкции по включению макросов, которые ему в любом случае придется выполнить, если есть желание работать с файлом.


Вариант 2:
Этот способ подразумевает создание отдельного файла, который будет запускать файл Excel. Я предоставлю на выбор либо скрипт VBS, либо созданный мной файл EXE. В чем прелесть. При использовании данного способа совершенно неважно запущен ли уже у пользователя Excel или нет, разрешены ли макросы. Скрипт или EXE сам все запустит и разрешит.
Что такое скрипт VBS? Это обычный текстовый файл, сохраненный с расширением VBS. Такой файл распознается операционной системой как исполняемый и код, расположенный в нем, запускается при двойном щелчке на файле.
Чтобы создать такой файл необходимо:

  1. создать обычный текстовый файл
  2. открыть его
  3. записать в него текст:
    test
    Sub test() 
        Dim objXL
        Dim Secur
        Set objXL = CreateObject("Excel.Application") 
        objXL.Visible = TRUE
        secur = objXL.AutomationSecurity
        objXL.AutomationSecurity = 1
        objXL.Workbooks.Open replace(Wscript.ScriptFullName,".vbs",".xls"),,,,"4321"
        objXL.AutomationSecurity = secur
    End Sub
  4. сохранить изменения
  5. поменять расширение текстового файла с .txt на .vbs.
    Если не отображается расширение:
    Панель управления-Свойства папки(для Win 7 - Параметры папок)- вкладка Вид- Снять галочку с "Скрывать расширение для зарегистрированных типов файлов"

Скрипт запускает файл Excel, имя которого совпадает с именем скрипта и расположенного в той же папке. В примере к статье это файл "Test". Таким образом Вы можете давать любое имя файлу Excel и файлу скрипта, лишь бы они совпадали. Т.е. назвав скрипт "Run", Вы должны будете и файл Excel назвать так же - "Run". В приведенном коде так же есть возможность указать пароль для открытия файла(в тексте скрипта это пароль 4321, но установить можно любой через свойства файла). Как установить пароль я описывал в этой статье: Как удалить книгу из самой себя. Пароль как правило устанавливается для того, чтобы при попытке запустить файл Excel без скрипта был запрошен пароль. Т.е. без скрипта файлом не воспользоваться. Есть и ложка дегтя - после открытия файла пароль может удалить любой, кто его открыл.
Плюсы использования скрипта:

  • пользователь совершает минимум действий
  • макросы разрешены как ни крутись

Минусы:

  • необходимость создания отдельного файла и привязка к имени
  • возможность подсмотреть пароль к файлу, просто сменив расширение файла-скрипта на .txt
  • возможность сменить/снять пароль к файлу после его открытия скриптом(можно избежать, внеся некоторый код в файл. Например сохранять только с нужным паролем). В примере пароль к файлу: 4321

Файл EXE. Долго пояснять не буду. Основные моменты все те же, что и со скриптом, т.к. в принципе это одно и то же, за исключением того, что код файла EXE нельзя подсмотреть, просто сменив расширение. А это значит, что и пароль к файлу подсмотреть тоже не получится(без использования специальных навыков и программ). Создается такой файл в специальной программной среде: С++, VisualBasic, Delphi и т.п. Основной минус: нельзя поменять пароль к файлу, не скомпилировав новый файл EXE. Т.е. если планируете использовать не с одним файлом, то надо всем им давать один и то же пароль, либо вообще не устанавливать пароль на открытие.

В примере вы найдете файлы с примерами реализации всеми описанными способами:
Скачать пример:

  Run_Wit_Macro.zip (28,1 KiB, 4 049 скачиваний)

Также см.:
Почему не работает макрос?
Управление безопасностью макросов


Статья помогла? Поделись ссылкой с друзьями!
  Плейлист   Видеоуроки

Поиск по меткам

Access apple watch Multex Power Query и Power BI VBA управление кодами Бесплатные надстройки Дата и время Записки ИП Надстройки Печать Политика Конфиденциальности Почта Программы Работа с приложениями Разработка приложений Росстат Тренинги и вебинары Финансовые Форматирование Функции Excel акции MulTEx ссылки статистика
Обсуждение: 54 комментария
  1. masev:

    А сколько у Вас будет стоит эта работа?

  2. Пишите на личную почту - The-Prist@yandex.ru. Все будет зависеть от условий и пожеланий. Как показывет практика - аппетит растет во время еды.

  3. masev:

    Понял, спасибо!

  4. Ильмир:

    Как быть в случае если расширение файла не "xls"? пробовал поменять в файле, рабочая книга не запускается.

  5. Ильмир, для начала написать какой метод используете.
    Если метод с exe - то никак. Потому что там жестко прописано расширение. Все остальные методы правятся элементарно. Что Вы там и где именно меняете Вы тоже не пишите. Поэтому точнее подсказать не могу.

  6. Ильмир:

    @Дмитрий(Админ)

    Использую метод с xbs. Для открытия файла с расширением .xlsb
    Следовательно код выглядит вот так:

    test
    Sub test()
    Dim objXL
    Dim Secur
    Set objXL = CreateObject("Excel.Application")
    objXL.Visible = TRUE
    secur = objXL.AutomationSecurity
    objXL.AutomationSecurity = 1
    objXL.Workbooks.Open replace(Wscript.ScriptFullName,".vbs",".xlsb"),,,,"4321"
    objXL.AutomationSecurity = secur
    End Sub

    Но необходимый файл Test.xlsb не открывается.

  7. Предоположу в таком случае, что имя файла .xlsb и имя файла .vbs отличаются. А должны быть одинаковые.

  8. den11:

    Здравствуйте! У меня почему-то файл excel 2007 открывается в 2003 версии. Это можно как-то поменять?

  9. den11, Вы не указали способ(чтобы хоть понять чем помогать). Если через скрипт или exe, дело скорее всего в том, что у Вас установлены две версии офиса и по умолчанию 2003. Можно вывернуться, если в скрипте указать конкретную версию:

    Set objXL = CreateObject("Excel.Application.11")
  10. den11:

    Все правильно стоят обе версии. Вставляю 12 но не помогает, все равно открывает в 2003.

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Тренинги

Заказать
Юридическая информация

Использование материалов сайта

Политика Конфиденциальности

ИП Щербаков Дмитрий Валентинович
ОГРНИП: 318502700083307
ИНН: 504013350772

Наши партнеры

Перейти

Счетчики

Рейтинг@Mail.ru Яндекс.Метрика
© 2024 Excel для всех   Войти