Запуск надстройки при открытии книги excel

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

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

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

  1. Откройте вкладку Разработчик и щелкните элемент Visual Basic.

    Группа "Код" на вкладке "Разработчик"

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

    Модуль ThisWorkbook в редакторе Visual Basic (VBE)

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

    Private Sub Workbook_Open()
    
    ' Put your code here
    
    End Sub

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

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

  5. Сохраните книгу как книгу Excel Macro-Enabled (XLSM)и закроем ее.

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

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

  1. В меню выберите пункт Параметры Excel >… >ленты & панели инструментов.

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

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

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

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

  1. Откройте вкладку Разработчик и щелкните элемент Visual Basic.

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

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

    Private Sub Workbook_Open()
    
    ' Put your code here
    
    End Sub

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

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

  5. Сохраните книгу как книгу Excel Macro-Enabled (XLSM)и закроем ее.

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

  • Книги Excel
  • Средства Windows

Сегодня мы поговорим о том, как добиться автоматического открытия вашего файла Excel (книги или надстройки) при запуске приложения Microsoft Excel

Способов добавить файл в автозагрузку Excel достаточно много, поэтому мы рассмотрим только самые основные:

  • открытие файлов из папки автозапуска
  • подключение файла как надстройки

Начнём с папки автозагрузки (точнее, с папок, поскольку их может быть несколько)

При установке Excel создаётся специальный каталог XLSTART, все файлы из которого автоматически открываются в Excel при его запуске

Путь к этой папке можно получить макросом из свойства Application.StartupPath: 

Sub ПапкаАвтозапускаExcel()
    ' читаем путь к папке из настроек Excel
    Folder$ = Application.StartupPath
    MsgBox Folder$, vbInformation, "Папка автозапуска Excel"
    ' открываем эту папку в Проводнике Windows
    CreateObject("wscript.Shell").Run """" & Folder$ & """"
End Sub

На моём компьютере (под управлением Windows XP), эта папка расположена по пути
C:Documents and Settings<имя пользователя>Application DataMicrosoftExcelXLSTART,
для других версий OC путь может отличаться

Достаточно в эту папку перетащить ваш файл (или файлы, причем неважно какие — книги Excel, текстовые файлы, CSV и т.п.) — и при запуске приложения все эти файлы будут открыты в Excel

Кстати, сами файлы перемещать в эту папку необязательно — достаточно поместить в папку автозапуска ЯРЛЫКИ на эти файлы
(например, ярлык можно создать путем перетаскавания мышом файла в папку, удерживая клавишу Alt)

Хочу обратить ваше внимание, что вы можете в настройках Excel указать ещё одну папку автозапуска, файлы из которой также будут открываться автоматическе при запуске Excel

Сделать это можно, если указать путь к вашей папке в параметре «Каталог автозагрузки«:
(в Excel 2003 меню Сервис — Параметры, вкладка Общие)

Итак, у нас есть как минимум 2 папки, все файлы из которых будут открываться вместе с Excel.

Какие же ещё способы предоставляет нам программа?

Подключение надстройки Excel

Эта возможность предоставляется только для книг Excel, сохранённых как надстройка (с расширением XLA)

Если у нас есть такая надстройка, и мы хотим, чтобы она запускалась каждый раз при открытии Excel, мы можем её подключить через меню Сервис — Надстройки (в Excel 2003):
(чтобы этот пункт меню был доступен, в Excel должна быть открыта хоть одна книга (любая))

Здесь мы нажимаем кнопку «Обзор…», выбираем наш файл (после выбора он появится в списке доступных надстроек), ставим напротив него галочку, — и надстройка автоматически загружается в Excel

После этих действий, при каждом запуске приложения Excel ваша надстройка будет доступна (открыта)

Как видно из вышеприведённого скриншота, у меня вместе с Excel постоянно загружаются 4 надстройки (пятую я временно отключил)


А что же делать, спросите вы, если требуется макросом включать и отключать автозапуск той или иной надстройки?

В этом вам поможет мой макрос AddinAutoRun, который добавляет (создаёт) или удаляет ЯРЛЫК на текущий файл в папку автозапуска Excel

Код макроса достаточно прокомментирован, так что понимание его алгоритма не должно вызвать затруднений:

Sub AddinAutoRun(Optional ByVal Disable As Boolean)
    ' макрос добавляет ярлык в папку автозагрузки Excel,
    ' файлы из которой автоматически запускаются вместе с приложением
    ' После этого действия надстройка будет запускаться автоматически

    ' Если макрос запущен с параметром Disable=TRUE,
    ' то данный файл удаляется из автозапуска
    On Error Resume Next
    If ThisWorkbook.Path Like Environ("temp") & "*" Then
        ' если файл запущен из архива (без предварительного извлечения), или из папки TEMP

        AddinsFolder$ = Replace(Application.UserLibraryPath & "", "\", "")
        ' если папка AddIns недоступна, будем сохранять файл в папке C:WINDOWSTemp
        If Dir(AddinsFolder$, vbDirectory) = "" Then AddinsFolder$ = Environ("temp") & ""
        Application.DisplayAlerts = False
        ThisWorkbook.SaveAs AddinsFolder$ & ThisWorkbook.Name    ' сохраняем файл по постоянному пути
        Application.DisplayAlerts = True
    End If
 
    ' PROJECT_NAME$ = "MyAddin"    ' если в вашем файле нет константы PROJECT_NAME$
    ShortcutName$ = PROJECT_NAME$ & ".lnk"    ' формируем имя файла ярлыка, например, "MyAddin.lnk"
    ShortcutFullName$ = Replace(Application.StartupPath & "" & ShortcutName$, "\", "")
 
    On Error Resume Next
    If Disable Then    ' Если макрос запущен с параметром Disable=TRUE, удаляем ярлык из автозагрузки
        Kill ShortcutFullName$
    Else    ' иначе добавляем ярлык в автозагрузку Excel
        Set AddinShortcut = CreateObject("WScript.Shell").CreateShortcut(ShortcutFullName$)
        AddinShortcut.TargetPath = ThisWorkbook.FullName
        AddinShortcut.Save
    End If
 
    ' на всякий случай (чтобы исключить двойной запуск файла),
    ' проверяем наличие файла в списке подключенных надстроек,
    ' и, если находим его в этом списке, - отключаем надстройку
    Dim AI As AddIn
    For Each AI In Application.AddIns    ' перебираем все надстройки
        If AI.Name = ThisWorkbook.Name Then AI.Installed = False
    Next AI
End Sub

Пример использования макроса: (код из модуля книги)

Private Sub Workbook_Open()
    ' при запуске файла добавляем ярлык на него в папку автозагрузки Excel
    AddinAutoRun
End Sub
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' при закрытии файла интересуемся, нужен ли автозапуск программы,
    ' и если не нужен, то отключаем автозапуск, удаляя ярлык
    
    msg = "При следующем запуске Excel эта программа будет запущена автоматически." & _
          vbNewLine & "Оставить программу в автозапуске?"
    ' если пользователь выберет ответ НЕТ, ярлык из папки автозапуска будет удалён
    If MsgBox(msg, vbQuestion + vbYesNo) = vbNo Then AddinAutoRun False
End Sub
  • 56436 просмотров

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    To run a macro automatically when the workbook opens one must enable the developer’s tools in Microsoft excel.

    Steps to enable the developer’s tool:

    Step 1: Go to File > Options > Customize Ribbon

    Step 2: Then checkmark the Developer’s tool option in the customize ribbon option.

    Now you can record Macro, run Macro and do everything that a developer can do.

    Steps to run macro automatically when the workbook opens:

    Step 1: Go to the developer’s menu and then go to the visual basic.

    Step 2: Go to ThisWorkbook Tab.

    Step 3: Write down Private Sub Workbook_open() and hit enter. You will then see the below screen.

    You can write your code or basically whatever you want between this and it will automatically run every time the workbook is opened.

    Let us make a Welcome Message Box:

    Step 4: Save the workbook as Excel Macro-Enabled Workbook.

    Note: If you don’t save it as an Excel macro-enabled workbook then it will not save the macros and it will simply save as a normal excel file.

    Output:

    Now, whenever you open this workbook you will see this message box pops up automatically.

    Like Article

    Save Article

    0 / 0 / 0

    Регистрация: 24.11.2012

    Сообщений: 16

    1

    Автоматический запуск макроса при открытии любой книги, которая соответствует конкретным условиям

    26.11.2012, 13:46. Показов 9062. Ответов 5


    Студворк — интернет-сервис помощи студентам

    Добрый день, уважаемые форумчане! Нужна ваша помощь
    Ситуация следующая.
    Мне на почту каждый день приходит екселевский файл, который необходимо обработать. Название файла имеет формат «treasury outstandings» + дата (например «treasury outstandings 23 Nov» или «treasury outstandings 24 Nov»
    Возможно ли сделать так, чтобы макрос автоматически запускался при открытии любой книги, название которой содержит «treasury outstandings»?



    0



    mc-black

    2784 / 716 / 106

    Регистрация: 04.02.2011

    Сообщений: 1,443

    26.11.2012, 13:56

    2

    Лучший ответ Сообщение было отмечено как решение

    Решение

    Создайте новую книгу, вставьте код, приведенный ниже, в модуль книи и сохраните книгу как .xla / .xlam (зависит от версии Office):

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    Option Explicit
     
    Dim WithEvents xlApp As Excel.Application
     
    Private Sub xlApp_WorkbookOpen(ByVal Wb As Workbook)
        If Wb.Name Like "treasury outstandings*.xls*" Then
            Call MyMacro(Wb)
        End If
    End Sub
     
    Private Sub MyMacro(wbk As Workbook)
        MsgBox wbk.Name
    End Sub

    Полученную надстройку положить в каталок с надстройками и включите надстройку



    3



    Maksymromaniuk

    0 / 0 / 0

    Регистрация: 24.11.2012

    Сообщений: 16

    27.11.2012, 12:06

     [ТС]

    3

    Спасибо!
    Работает.

    Правда добавил после

    Visual Basic
    1
    
    Dim WithEvents App As Application
    Visual Basic
    1
    2
    3
    
          Private Sub Workbook_Open()
           Set App = Application
           End Sub

    Но не суть, раньше не работал с надстройками. Клевая вещь Спасибо еще раз)



    0



    2784 / 716 / 106

    Регистрация: 04.02.2011

    Сообщений: 1,443

    27.11.2012, 13:21

    4

    Всё верно. Один из плюсов — макрос в надстроке выполнится всегда, даже когда отключишь макросы в Excel.



    0



    0 / 0 / 0

    Регистрация: 18.05.2016

    Сообщений: 118

    23.06.2016, 11:37

    5

    У меня ситуация такая же, только мне надо открывать файл с любым именем, когда я вставил ваш код в Vba, то у меня красным выделила строку dim xl_app…. Как мне решить эту проблему?



    0



    Веди

    22 / 13 / 1

    Регистрация: 04.07.2012

    Сообщений: 477

    29.11.2016, 18:51

    6

    сделал файл надстройки .xla, подключил его, всё он нормально подключается и в книге написал код:

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    
    Private Sub Workbook_Open()
        MsgBox "Привет!"
     
        Cells.Select                 '
        Selection.ColumnWidth = 10   'макрос
        Selection.RowHeight = 15     '
    End Sub

    подтверждаю сообщение ОК, а дальше ошибка, ругается на «method cells of object _global failed»
    . для примера мне надо изменить размеры ячеек листа. как правильно составить макрос?



    0



     

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

     

    ikki

    Пользователь

    Сообщений: 9709
    Регистрация: 22.12.2012

    файл с макросом — в папку XLSTART  
    сам макрос — в процедуру Workbook_Open на лист макросов Эта книга

    фрилансер Excel, VBA — контакты в профиле
    «Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

     

    Не получается так.    
    Книга, которую создают такие приложения, не записана на диск еще. Потому код из Personal.xls не выполняется когда создается такой сеанс EXCEL…

     

    ikki

    Пользователь

    Сообщений: 9709
    Регистрация: 22.12.2012

    гм?..  
    честно говоря, не пробовал, нужды пока нет.  
    но, чисто теоретически, Экс должен открывать все файлы из папки XLStart при любом запуске.  

      пс. про Personal.xls я вообще не говорил. это то же самое?

    фрилансер Excel, VBA — контакты в профиле
    «Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

     

    Может кто-нибудь знает как обработать «УПАВШИЕ» в EXCEL данные из другого приложения с помощью макросов?

     

    Alex_ST

    Пользователь

    Сообщений: 2746
    Регистрация: 22.12.2012

    На лицо ужасный, добрый внутри

    Вы что, хотите сказать, что при открытии Ёкселя, когда автоматом создаётся ещё не сохраненная нигде пустая Книга1, у вас не открывается, лежащий в папке XLSTART файл Personal.xls и не отрабатываются его события?  
    Что-то с трудом верится…  
    Ну, если даже почему-то вдруг и не срабатывает обработчик события Workbook_Open, расположенный в модуле книги файла Personal.xls, то попробуйте использовать вместо него обработчик события Auto_Open в стандартном модуле.

    С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!)
    <#0>

     

    ИМЕННО ТАК, ПОПРОБУЙТЕ САМИ.  
    Макрос с именем «auto_open» будет выполняться при каждом открытии книги, содержащей макрос, вручную.

     

    ran

    Пользователь

    Сообщений: 7091
    Регистрация: 21.12.2012

    Тоже засомневался и проверил.  
    Если при закрытом Экселе передать из файнридера файл в эксел, создается новая книга, и в редакторе VB — только один проект. Персонал.xls у меня нет, но надстройки не подключаются.

     

    может быть, я чего-то не понимаю, охота разобраться, т.к., хоть до сих пор не использовал такую возможность, но сейчас, благодаря этому форуму, кажется, нашёл реальное применение в своей работе.  
    так вот. как я понимаю, Personal.xls — это обычный файл Excel. Но если он называется именно так (в любой версии) и расположен в папке XLStart, то он служит т.н. «личной книгой макросов» — т.е. открывается автоматически при запуске Excel и макросы, находящиеся в нём, будут доступны в любой книге.  
    если же в вашем варианте такой файл не открывается, тогда, наверное, есть разница между запуском Excel’я и созданием нового объекта Excel’я в другом приложении? т.е. тогда Excel как бы «не запускается».  
    перечитал… сумбурно немножко… но по-другому что-то не получается выразиться :)

     

    Serge

    Пользователь

    Сообщений: 11308
    Регистрация: 01.01.1970

    При выгрузке из 1С не происходит события открытия (запуска) Экса.  
    Вы об этом?

     

    Alex_ST

    Пользователь

    Сообщений: 2746
    Регистрация: 22.12.2012

    На лицо ужасный, добрый внутри

    Не поленился, проверил.  
    Понаставил у себя в Personal.xls MsgBox’ов в Workbook_Open и в Auto_Open …  
    Сохранил скрин экрана с таблицей Ёкселя в ДжиПег. Распознал в файнридере и велел ему передать распознанный проект в Ёксель.  
    Нифига не появились MsgBox’ы … Посмотрел в VBE — только этот проект и открыт и больше ничего — ни Персонала, ни одной надстройки…  
    Даже при уже открытом Ёкселе и объявленном в декларациях модуля книги Personal.xls объекте Application для отлавливания событий в других книгах Private WithEvents App As Application событие App_NewWorkbook при передаче на анализ в Ёксель из файнридера НЕ ВОЗНИКАЕТ!  
    Тут надо ждать гуру. Может, что посоветуют…

    С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!)
    <#0>

     

    слэн

    Пользователь

    Сообщений: 5192
    Регистрация: 16.01.2013

    попробуйте грузить в ворд — там шаблон всегда грузится, а в нем можно макрос запускать

     

    Alex_ST

    Пользователь

    Сообщений: 2746
    Регистрация: 22.12.2012

    На лицо ужасный, добрый внутри

    {quote}{login=The_Prist}{date=28.03.2011 10:05}{thema=}{post}…Сторонние приложения запускают Excel типа в безопасном режиме(вроде как с зажатой клавишей Shift). Так что все макросы и надстройки игнорируются {/post}{/quote}  
    Дмитрий, спасибо за информацию.  
    На чём бы узелок завязать чтобы вспомнить когда понадобится…?  
    (борода уже вся в узелках :)

    С уважением, Алексей (ИМХО: Excel-2003 — THE BEST!!!)
    <#0>

     

    {quote}{login=Mijver}{date=27.03.2011 01:54}{thema=Запуск макроса при любом старте EXCEL}{post}Как запустить макрос при любом старте EXCEL, включая случаи передачи данных из приложений, например, из FineReader распознанный текст. Книга с этими данными не сохранена еще на диске.{/post}{/quote}  

      КАК Я ПОНЯЛ — НАДО РУКАМИ СОХРАНЯТЬ ФАЙЛ «УПАВШИЙ» ИЗ ПРИЛОЖЕНИЯ, ПОТОМ ЗАСТАВИТЬ ЕГО ИСКАТЬ, ЧТОБЫ ЗАПУСТИЛСЯ МАКРОС… ИЛИ В ПРИЛОЖЕНИИ КОВЫРЯТЬСЯ, ЕСЛИ ОНО ПОЗВОЛИТ…

     

    Hugo

    Пользователь

    Сообщений: 23252
    Регистрация: 22.12.2012

    А может vbs запустить?  

      Set objExcel = GetObject(, «Excel.Application»)  
    set ws=objExcel.sheets(1)  
    msgbox ws.cells(1,1).value

     

    ran

    Пользователь

    Сообщений: 7091
    Регистрация: 21.12.2012

    Из файнридера не грузится.

     

    Mijver: «КАК Я ПОНЯЛ — НАДО РУКАМИ СОХРАНЯТЬ ФАЙЛ «УПАВШИЙ» ИЗ ПРИЛОЖЕНИЯ». И не иначе — вы указываете Абби куда передать распознанное, вызывается соответствующее приложение и в него помещаются данные, как вы с ними согласились — запомнили. Нет, назад в Абби, правите в Абби, и снова передача… Во всяком случае даже по «короткой» дорожке (зависит от версии)- автоматом распознать и передать в XL — требуется сохранять под указанным именем. Или что-то не договаривают…  
    -96602-

     

    СПАСИБО ЗА ОБСУЖДЕНИЕ.    
    Я ХОТЕЛ «НЕ ТЕРЯТЬ ИНИЦИАТИВУ» —    
    ТАК ЭТО НАЗЫВАЕТСЯ В СИСТЕМАХ РЕАЛЬНОГО ВРЕМЕНИ:    
    ЕСЛИ ЧЕЛОВЕК НАЖАЛ КНОПКУ, ТО ХОТЕЛОСЬ ИЗ ЭТОГО НАЖАТИЯ ВЫЖАТЬ МАКСИМУМ.    
    НО ВИНДОУС ТАК УСТРОЕН — ЧТОБЫ ЧЕЛОВЕК СИДЕЛ ОКОЛО НЕГО И НАЖИМАЛ КНОПКИ КАКИЕ НАДО И НЕ НАДО… ЛИШЬ БЫ ПОБОЛЬШЕ

     

    Не думал, что это может кого-то раздражать. Извините, если что не так. Я думал здесь не буквы читают а мысли.

     

    Юрий М

    Модератор

    Сообщений: 60581
    Регистрация: 14.09.2012

    Контакты см. в профиле

    {quote}{login=Mijver}{date=28.03.2011 11:09}{thema=Re: }{post}Я думал здесь не буквы читают а мысли.{/post}{/quote}  
    Вы ошиблись — здесь помогают по Excel.

     

    ikki

    Пользователь

    Сообщений: 9709
    Регистрация: 22.12.2012

    вот, встретил у Уокенбаха:  

      переключатель командной строки /automation  
    Excel запускается без подключения надстроек и шаблонов, а также загрузки файлов из папки Xlstart или любой другой папки автозагрузки. Этот переключатель используется для «чистой начальной загрузки» Excel.

    фрилансер Excel, VBA — контакты в профиле
    «Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

     

    ZVI

    Пользователь

    Сообщений: 4328
    Регистрация: 23.12.2012

    Из других приложениий Excel, как правило, запускается в режиме автоматизации через CreateObject(«Excel.Application»). При этом создается отдельный объект (класса) Excel без загрузки надстроек, кроме COM-надстроек. То есть, если создать свою COM-надстройку и подключить её к Excel, то такая надстройка, в принципе, позволит контролировать Excel.

     

    dimaqw

    Пользователь

    Сообщений: 1
    Регистрация: 01.01.1970

    #23

    28.05.2012 12:50:31

    думаю оно. во всяком случая очень нужная вещь:   

    http://www.excel-vba.ru/chto-umeet-excel/kak-otsledit-sobytienaprimer-vydelenie-yacheek-v-lyuboj-knige/

    Понравилась статья? Поделить с друзьями:
  • Запуск макросов отключен excel что это такое
  • Запуск макроса при запуске word
  • Запуск макроса по времени vba excel
  • Запуск макроса в макросе vba excel
  • Запуск макроса в excel при изменении в ячейке