Открыть excel файл макросом: Как открыть конкретную книгу в Excel пошаговое руководство

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

Хитрости »

22 Октябрь 2011       Дмитрий       100925 просмотров




Основные понятия (26)
Сводные таблицы и анализ данных (10)
Графики и диаграммы (5)
Работа с VB проектом (12)
Power BI и Power Query (22)

Условное форматирование (5)
Списки и диапазоны (5)
Макросы(VBA процедуры) (68)
Разное (43)
Баги и глюки Excel (4)

В данной статье хочу описать вкратце способ, как можно запустить какой-то файл 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. Такой файл распознается операционной системой как исполняемый и код, расположенный в нем, запускается при двойном щелчке на файле. Чтобы создать такой файл необходимо: создать обычный текстовый файл. Открыть его. Записать в него текст:

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

Сохранить. Поменять расширение текстового файла с .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, 3 930 скачиваний)

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


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

    Видеоуроки


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


Accessapple watchMultexPower Query и Power BIVBA управление кодамиБесплатные надстройкиДата и времяЗапискиИПНадстройкиПечатьПолитика КонфиденциальностиПочтаПрограммыРабота с приложениямиРазработка приложенийРосстатТренинги и вебинарыФинансовыеФорматированиеФункции Excelакции MulTExссылкистатистика

vba — Как открыть макросом Excel второй экземпляр книги, если книга уже открыта?

Имеется макрос, который получает значения из закрытой книги (формально он ее открывает, используя Workbooks.open(), отключает ивенты/алерты Application.ScreenUpdating = False, Application.DisplayAlerts = False, Application.EnableEvents = False, считывает то, что нужно, и книгу закрывает).

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

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

  • excel
  • vba






1

Sub CopyBook_()
    Dim sName As String
    Const sTempName As String = "D:\temptemp.xlsx" ' путь и имя временной копии книги'
    
    sName = "D:\123\test.xlsx" ' путь к книге'
    If Dir(sName, 1) = "" Then MsgBox "Книга не обнаружена", 16, "ОШИБКА": Exit Sub
    If Dir(sTempName, 1) <> "" Then Kill sTempName ' если старая копия есть, удаляем'
    
    With Application: .ScreenUpdating = False: .DisplayAlerts = False: End With
    With Workbooks. Open(Filename:=sName)
        .SaveAs Filename:=sTempName, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        With .Worksheets("sheet1")
             ' .......'
             ' .Cells(1,1).Value = ... работа с листом'
             ' .......'
        End With
        .Close
    End With
    
    Kill sTempName ' удаляем временную копию'
    With Application: .ScreenUpdating = True: .DisplayAlerts = True: End With
End Sub

Если путь к книге-источнику не изменяется программно, sName лучше записать константой.

Удаление существующей копии — это на случай, если по каким-либо причинам копия не удалена ранее. Проверку — открыта ли старая копия (маловероятно…) — не добавлял, для полного спокойствия можно дописать






8

А ларчик просто открывался:

Dim isOpen As Boolean
Dim wb As Workbook
Const originalPath As String = "C:\example.xlsm"
Const fileName As String = "example.xlsm"
'проверяем, открыта ли книга'
isOpen = IsBookOpen(originalPath)
'выключаем уведомления'
With Application: . ScreenUpdating = False: .DisplayAlerts = False: End With
'если закрыта, открываем, если открыта - обращаемся к открытой'
If Not isOpen Then Set wb = Workbooks.Open(originalPath)
If isOpen Then Set wb = Workbooks(fileName)
'строчка для того, чтобы посчитать и вытащить значения в текущую книгу'
ThisWorkbook.Activate
'начинаем работу со сторонней книгой'
On Error Resume Next
With wb.Worksheets("name")
'...'
End With
'закончили работу со сторонней книгой'
'если это мы ее открыли, закрываем'
If Not isOpen Then wb.Close savechanges:=False
'включаем уведомления обратно'
With Application: .ScreenUpdating = True: .DisplayAlerts = True: End With







Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации



Почта

Необходима, но никому не показывается




Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки


Автоматически запускать макрос при открытии книги

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Больше. ..Меньше

Возможно, вы захотите, чтобы записанный вами макрос запускался автоматически при открытии определенной книги. Следующая процедура использует пример, чтобы показать вам, как это работает. Вы также можете автоматически запускать макросы при запуске Excel.

Прежде чем приступить к работе, убедитесь, что на ленте отображается вкладка Developer . Дополнительные сведения см. в разделе Показать вкладку «Разработчик».

Чтобы использовать приведенный ниже пример, откройте новую книгу.

Важно! Код VBA нельзя отменить, поэтому обязательно протестируйте свой код на пустой книге или на копии существующей книги. Если код не делает то, что вы хотите, вы можете закрыть книгу без сохранения изменений.

  1. Нажмите Разработчик > Visual Basic .

  2. org/ListItem»>

    В VBA Project Explorer с левой стороны разверните папку VBA Project для своей книги, затем дважды щелкните модуль ThisWorkbook . Если вы не видите Project Explorer, вы можете перейти к View > Project Explorer или нажмите Ctrl+R .

  3. В открывшемся справа окне модуля вставьте следующий код:

    Частная подпрограмма Workbook_Open()
    
    'Поместите сюда свой код
    
    Конечный переходник 

  4. Вставьте записанный код в подпроцедуру между Sub и End Sub строк.

    Закройте редактор Visual Basic (ничего сохранять не нужно).

  5. Сохраните книгу как книгу Excel с поддержкой макросов (*xlsm) и закройте ее.

При следующем открытии книги код, который вы добавили в Workbook_Open 9Процедура 0008 запустится автоматически.

Прежде чем приступить к работе, убедитесь, что на ленте отображается вкладка Developer . Для этого:

  1. В меню выберите Excel > Настройки… > Лента и панель инструментов .

  2. В категории Настройка ленты в списке Основные вкладки выберите Разработчик флажок.

  3. Нажмите Сохранить .

Чтобы использовать приведенный ниже пример, откройте новую книгу.

Важно! Код VBA нельзя отменить, поэтому обязательно протестируйте свой код на пустой книге или на копии существующей книги. Если код не делает то, что вы хотите, вы можете закрыть книгу без сохранения изменений.

  1. Щелкните Разработчик > Visual Basic .

  2. В VBA Project Explorer с левой стороны разверните папку VBA Project для своей книги, затем дважды щелкните модуль ThisWorkbook .

  3. В открывшемся справа окне модуля вставьте следующий код:

    Частная подпрограмма Workbook_Open()
    
    'Поместите сюда свой код
    
    Конечный переходник 

  4. Вставьте записанный код в процедуру Sub между строками Sub и End Sub .

    Закройте редактор Visual Basic (ничего сохранять не нужно).

  5. Сохраните книгу как книгу Excel с поддержкой макросов (*xlsm) и закройте ее.

При следующем открытии книги код, добавленный вами в процедуру Workbook_Open , будет выполняться автоматически.

Вы всегда можете обратиться к эксперту в техническом сообществе Excel или получить поддержку в сообществе ответов.

Записать макрос для открытия определенных книг при запуске Excel

Excel 2013 Больше…Меньше

Предположим, вы хотите записать макрос для открытия рабочих книг, которые вы используете каждый день при запуске Excel. Для этого вы можете создать макрос Auto_Open. Вы также можете автоматически запускать макрос при открытии книги.

Прежде чем приступить к работе, убедитесь, что на ленте отображается вкладка Developer . Если его нет, сделайте следующее:

  1. Щелкните Файл > Параметры > Настроить ленту .

  2. org/ListItem»>

    В разделе Настройка ленты в поле Основные вкладки установите флажок Разработчик .

  3. Нажмите OK .

Автоматическое открытие книг при запуске Excel:

  1. Нажмите Разработчик > Запись макроса .

  2. В поле Имя макроса введите Auto_Open .

  3. В поле Store macros in выберите Personal Macro Workbook .

  4. Это сделает макрос доступным каждый раз, когда вы открываете Excel.

  5. Чтобы напомнить вам, что делает этот макрос, введите описание в поле Описание . Вы также можете оставить это поле пустым.

  6. Нажмите OK .

  7. Щелкните Файл > Откройте и выберите файлы, над которыми вы работаете каждый день. Файлы могут находиться в нескольких местах. Нажмите Shift, чтобы выбрать несколько файлов в одной папке.