Excel vba auto open

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

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

Важно: Код 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, будет работать автоматически.

Return to VBA Code Examples

In this Article

  • Workbook_Open Event
  • Auto_Open
  • Create and Name New Worksheet Everytime Excel Opens
  • Set the Default Sheet When Workbook Opens
  • Load Form Every Time Workbook Opens
  • VBA Coding Made Easy

Do you need to run a macro when Excel starts? You have two options:

1. Create a Workbook_Open() sub within ‘ThisWorkbook’.

2. Place a Auto_Open() sub within any module.

Workbook_Open Event

Create a sub titled ‘Workbook_Open’ within ‘ThisWorkbook’

Workbook_open ()
    MsgBox "This code ran at Excel start!"
End Sub

Auto_Open

Using the second method: Simply create a subroutine called Auto_Open and place code in it, or call another sub from there. Automatically your code runs when Excel starts.

Private Sub Auto_Open()
    MsgBox "This code ran at Excel start!"
End Sub

Create and Name New Worksheet Everytime Excel Opens

The following code works opening a workbook. It automatically adds a new sheet and labels it with the date. It also checks to see that the sheet doesn’t already exist – to allow for the possibility of it being opened more than once a day.

This code makes use of the Workbook Open Event and must be placed in the workbook module under the “Open work Book” event. The function Sheet_Exist must be placed in a module and this checks whether or not the sheet exists:

Private Sub Workbook_Open()

Dim New_Sheet_Name As String

New_Sheet_Name = Format(Now(), "dd-mm-yy")

If Sheet_Exists(New_Sheet_Name) = False Then
    With Workbook
        Worksheets.Add().Name = New_Sheet_Name
    End With
End If

Save

End Sub
Function Sheet_Exists(WorkSheet_Name As String) As Boolean

Dim Work_sheet As Worksheet

Sheet_Exists = False

For Each Work_sheet In ThisWorkbook.Worksheets
      If Work_sheet.Name = WorkSheet_Name Then
        Sheet_Exists = True
    End If
   Next

End Function

To download the .XLSM file for this tutorial, click here

Set the Default Sheet When Workbook Opens

Do you want to make sure a sheet always shows first when a workbook opens? For instance when you open a workbook sheet3 is always the active sheet. Here’s how.

You can refer to a sheet from VBA by it’s program name (ie Sheet3) or by it’s tab name(ie JanData). It is best to use the program name, becuase if the tab name changes, your VBA code that refers to a tab name will no longer work. However if you use the program name a user can change the tab name multiple times and your macro still works.

To make sure a certain sheet is always activated when a workbook opens, just place sheet.activate code in the workbook_open sub. This is an example that activates sheet3 by using the program name everytime a workbook opens.

Private Sub Workbook_Open()
Sheet3.Activate
End Sub

And this does it by using the tab name:

Private Sub Workbook_Open()

Sheets("mytabname").Activate
End Sub

Sidenote: You must save and restart excel for this to work.
Sidenote: This only works if macros are enabled.
Sidenote: Put this code in the code window for the ThisWorkbook object in the VBE.

Load Form Every Time Workbook Opens

If you would like to load a form or run some VBA code when you open an excel workbook, place your code in the Thisworkbook code window and in the Workbook_Open sub.

From your spreadsheet:
1. Press ALT and F11 to open the VB editor
2. Double-click the word ThisWorkbook to open the code window
3. Type the following code in the ThisWorkbook code window

Private Sub Workbook_Open()
UserForm1.Show
End Sub

Sidenote: Replace Userform1 with your form name

4. Close Excel and re-open.

load-form-when-excel-starts

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

alt text

Learn More!

<<Return to VBA Examples

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

Вы также можете написать код VBA для той же цели с помощью события Open рабочей книги. Событие Open запускает код в подпроцедуре Workbook_Open () каждый раз, когда вы открываете книгу.

Запись макроса Auto_Open

Вы можете записать макрос Auto_Run следующим образом –

  • Нажмите вкладку VIEW на ленте.
  • Нажмите Макросы.
  • Нажмите Запись макроса. Откроется диалоговое окно «Запись макроса».
  • Введите Auto_Run в качестве имени макроса.
  • Введите описание и нажмите ОК.

Auto_Open

  • Начните запись макроса.
  • Остановить запись.
  • Сохранить рабочую книгу как макрокоманду.
  • Закройте рабочую книгу.
  • Откройте рабочую книгу. Макрос Auto_Run запустится автоматически.

Если вы хотите, чтобы Excel запускался без запуска макроса Auto_Open, удерживайте клавишу SHIFT при запуске Excel.

Ограничения Auto_Open Macro

Ниже приведены ограничения макроса Auto_Open:

  • Если рабочая книга, в которой вы сохранили макрос Auto_Open, содержит код для события Open книги, код события Open переопределит действия в макросе Auto_Open.

  • Макрос Auto_Open игнорируется, когда книга открывается при запуске кода, использующего метод Open.

  • Макрос Auto_Open запускается до открытия любых других книг. Следовательно, если вы записываете действия, которые вы хотите, чтобы Excel выполнял в книге Book1 по умолчанию или в книге, загруженной из папки XLStart, макрос Auto_Open завершится ошибкой при перезапуске Excel, поскольку макрос запускается до открытия книг по умолчанию и запуска книг. ,

Если рабочая книга, в которой вы сохранили макрос Auto_Open, содержит код для события Open книги, код события Open переопределит действия в макросе Auto_Open.

Макрос Auto_Open игнорируется, когда книга открывается при запуске кода, использующего метод Open.

Макрос Auto_Open запускается до открытия любых других книг. Следовательно, если вы записываете действия, которые вы хотите, чтобы Excel выполнял в книге Book1 по умолчанию или в книге, загруженной из папки XLStart, макрос Auto_Open завершится ошибкой при перезапуске Excel, поскольку макрос запускается до открытия книг по умолчанию и запуска книг. ,

Если вы столкнулись с каким-либо из этих ограничений, вместо записи макроса Auto_Open необходимо написать код для события Open, как описано в следующем разделе.

Код VBA для открытого события рабочей книги

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

Откройте книгу, в которой вы сохранили макрос, который вы написали для абсолютных ссылок – Report_ProjectXYZ. Когда этот макрос выполняется, новый лист будет добавлен в рабочую книгу, а структура отчета проекта появится на новом листе.

Вы можете написать код макроса, который будет выполнять эти действия при открытии книги. Это означает, что когда вы откроете рабочую книгу «Отчет по проекту», вам будет готов новый рабочий лист со структурой отчета для ввода деталей.

Следуйте приведенной ниже процедуре в редакторе VBA.

  • Дважды щелкните ThisWorkbook в Projects Explorer.

  • В окне кода выберите Workbook в левом раскрывающемся списке и Open в правом раскрывающемся списке. Sub Workbook_Open () появляется.

Дважды щелкните ThisWorkbook в Projects Explorer.

В окне кода выберите Workbook в левом раскрывающемся списке и Open в правом раскрывающемся списке. Sub Workbook_Open () появляется.

Workbook_Open

  • Нажмите Модули в проводнике проектов.

  • Дважды щелкните по имени модуля, содержащего код макроса.

  • Скопируйте код макроса из модуля и вставьте его в Sub WorkBook_Open ().

Нажмите Модули в проводнике проектов.

Дважды щелкните по имени модуля, содержащего код макроса.

Скопируйте код макроса из модуля и вставьте его в Sub WorkBook_Open ().

Sub Workbook_open

Сохраните книгу с поддержкой макросов. Откройте его снова. Макрос запускается и вставляется новый лист со структурой отчета.

Skip to content

Run a Macro Automatically on Opening Excel Workbook

Home » Excel VBA » Run a Macro Automatically on Opening Excel Workbook

  • run a macro automatically

Description:

Sometimes you may need to run a macro automatically on opening excel workbook. Following are the few cases where you are required to run a macro while opening your excel workbook.

Run a Macro Automatically on Opening Excel Workbook – Solution(s):

We can use Workbook_Open() method or Auto_Open() method to achieve this.

Run a Macro Automatically – Example Cases:

Following are the list of situations where we need to run a macro automatically on opening an excel workbook.

  • Show a welcome message to the user
  • Run some starting scripts on opening the workbook
  • Fill or populate the drop-down lists or other ActiveX Control while opening the workbook
  • Activate a particular sheet while opening the workbook
  • Show a user form while opening the workbook
  • Clear the specific worksheets or ranges while opening the workbook
  • Download and see it practically
Showing a welcome message to the user

When you open a workbook, you may want to pass some instructions to the user. Or you can show a welcome message with specific text or user name. The following code will show you how to Run a Macro Automatically.

Code:
Private Sub Workbook_Open()

Msgbox "Welcome to ANALYSIS TABS"

End Sub
Output:

run a macro automatically

Instructions:
  1. Open an excel workbook
  2. Press Alt+F11 to open VBA Editor
  3. Double click on ThisWorkbook from Project Explorer
  4. Copy the above code and Paste in the code window
  5. Save the file as macro enabled workbook
  6. Open the workbook to test it, it will Run a Macro Automatically. You should see a message box as shown above
Using Auto open method to run a macro automatically:

You can INSERT a new module and place the following code in the newly created module

Code:
Sub Auto_Open()

Msgbox "Welcome to ANALYSIS TABS"

End Sub
Instructions:
  1. Open an excel workbook
  2. Press Alt+F11 to open VBA Editor
  3. Insert a New Module from Insert Menu
  4. Copy the above code and Paste in the code window
  5. Save the file as macro enabled workbook
  6. Open the workbook to test it, it will Run a Macro Automatically. You should see a message box as shown above
Running some starting scripts on opening the workbook

The following example runs a script to count the number of worksheets in workbook and list out them in the sheet1.

Code:
Sub Auto_Open()

Dim sh
Dim iCntr
iCntr = 1

For Each sh In ThisWorkbook.Sheets
Sheet1.Cells(iCntr, 1) = sh.Name
iCntr = iCntr + 1
Next

End Sub
Instructions:
  1. Open an excel workbook
  2. Press Alt+F11 to open VBA Editor
  3. Insert a New Module from Insert Menu
  4. Copy the above code and Paste in the code window
  5. Save the file as macro enabled workbook
  6. Open the workbook to test it, it will Run a Macro Automatically. You should see the list of sheet names in the Sheet1
You may use following code to Populate a Combo Box or a List Box in worksheet

The following example shows how to populate regions(East,West,North,South) in a ComboBox and a List Box

Code:
Sub Auto_Open()

Sheet1.ComboBox1.AddItem "East"
Sheet1.ComboBox1.AddItem "West"
Sheet1.ComboBox1.AddItem "North"
Sheet1.ComboBox1.AddItem "South"

With Sheets("Sheet1").ListBox1
.AddItem "East"
.AddItem "West"
.AddItem "North"
.AddItem "South"
End With

End Sub
Instructions:
  1. Open an excel workbook
  2. Insert a Combobox (activex control from developer ribbon) in the Sheet1. And Name the Combo Box (right click on it and change the name in the properties) as ComboBox1
  3. Insert a Listbox (activex control from developer ribbon) in the Sheet1. And Name the List Box (right click on it and change the name in the properties) as Listbox1
  4. Press Alt+F11 to open VBA Editor
  5. Double click on ThisWorkbook from Project Explorer
  6. Copy the above code and Paste in the code window
  7. Save the file as macro enabled workbook
  8. Open the workbook to test it, it will Run a Macro Automatically. You should see the Combo Box and List Box in the Sheet1 are filled with items
You may use following code to Activate a Sheet or Show an UserForm

The following example shows to activate a sheet (named “Home”) and show an userform (UserForm1). This code will activate the “Home” worksheet and then display the UserForm1

Code:
Sub Auto_Open()

'Activate a Sheet
Sheets("Home").Activate

'Show an UserForm
UserForm1.Show

End Sub
Instructions:
  1. Open an excel workbook
  2. Press Alt+F11 to open VBA Editor
  3. Insert a userform from Insert menu (UserForm1)
  4. Double click on ThisWorkbook from Project Explorer
  5. Copy the above code and Paste in the code window
  6. Save the file as macro enabled workbook
  7. Open the workbook to test it, it will Run a Macro Automatically. You should see the Userform which you have created
You may want to clear the specific worksheets or ranges while opening the workbook

The following example clears the all worksheets in the workbook on workbook open.

Code:
Sub Auto_Open()

Dim sh

For Each sh In ThisWorkbook.Sheets
sh .Cells.Clear
Next

End Sub
Instructions:
  1. Open an excel workbook
  2. Enter some sample data in each workbook
  3. Press Alt+F11 to open VBA Editor
  4. Double click on ThisWorkbook from Project Explorer
  5. Copy the above code and Paste in the code window
  6. Save the file as macro enabled workbook
  7. Open the workbook to test it, it will Run a Macro Automatically. You should see all the worksheets are cleared
You can download the example file and see how it’s working.

Please note: We may comment have commented some code as we can write only one auto_open() or Workbook_open() procedure.

ANALYSISTABS – Run a Macro Automatically

Effortlessly Manage Your Projects and Resources
120+ Professional Project Management Templates!

A Powerful & Multi-purpose Templates for project management. Now seamlessly manage your projects, tasks, meetings, presentations, teams, customers, stakeholders and time. This page describes all the amazing new features and options that come with our premium templates.

Save Up to 85% LIMITED TIME OFFER
Excel VBA Project Management Templates
All-in-One Pack
120+ Project Management Templates
Essential Pack
50+ Project Management Templates

Excel Pack
50+ Excel PM Templates

PowerPoint Pack
50+ Excel PM Templates

MS Word Pack
25+ Word PM Templates

Ultimate Project Management Template

Ultimate Resource Management Template

Project Portfolio Management Templates

Related Posts

VBA Reference

Effortlessly
Manage Your Projects

120+ Project Management Templates

Seamlessly manage your projects with our powerful & multi-purpose templates for project management.

120+ PM Templates Includes:

15 Comments

  1. Haobo
    December 30, 2013 at 4:32 AM — Reply

    Thank you for the examples. Just wonder that after Dim syntax, should you declare the data type?
    Sub Auto_Open()

    Dim sh as worksheet

    For Each sh In ThisWorkbook.Sheets
    sh .Cells.Clear
    Next

    End Sub

  2. PNRao
    December 30, 2013 at 10:08 PM — Reply

    Hi Haobo,

    Thanks for your comments.
    Yes, it is good practice to declare the data type of the variable always.However, Excel can automatically define internally based on the data assigned to that particular variable in the program.

    Thanks-PNRao!

  3. Fauzan
    May 15, 2014 at 12:11 PM — Reply

    Actually I want to create a macro but didnt have the information of VBA to create that.

    Could some one plz help me!!!!!!!!!!!

    I want that if any mail comes to me with a subject of completed so i want a reminder should remind me within 5 mins and it should go on for a day as I am continuosly receiving this type of emails

  4. Gabor Horvath
    October 7, 2014 at 6:49 PM — Reply

    Excellent help, thanks. Gabor

  5. lokesh reddy
    July 22, 2015 at 7:40 AM — Reply

    Hi,

    I think we need explanation about coding in depth. example :dim sh, dim icntr

  6. Prabhu
    October 5, 2015 at 10:52 AM — Reply

    Hi I have a macro file,it wil automatically run wen the excel open up but sometime the code is not working the macro is not automatically run,plsss somebody help

    anyone know what is the issue in this

  7. RAHUL
    April 18, 2016 at 5:26 PM — Reply

    Hello, I want that with out opening the workbook the macros will run by taking the system date and it will send the mail .
    Can anybody help me on this ??

  8. Venkat
    May 24, 2016 at 7:46 PM — Reply

    Dear Mr.P.N Rao ..

    Hello !
    1. Can a macro be enabled automatically with a code inside sub auto_open() to avoid the prompt by macro security level settings prompting the user to press enable macro to run the auto_open() macro ??..Thanks in advance…

  9. gurunath
    March 10, 2017 at 10:20 AM — Reply

    Hi,
    I want to create one macro, in one Excel file more than 30 sheets are there. when ever i opens excel file it should open home sheet and also while opening o dont want to show all other sheets list.

    any one help me on this.

  10. Phani Ch
    March 31, 2017 at 9:35 AM — Reply

    I have written a macro for my department. Now my requirement is when we generate the excel from the application, Macro should automatically run by cross checking the Worksheet Name.
    Eg:- “DailyDetails”. If the generated sheet has a name like “DailyDetails_31/3/2017” it should run automatically without any shortcuts and if the generated sheet name is not as per criteria it should not run the macro.

  11. Alaine
    September 7, 2018 at 3:10 PM — Reply

    Hi, i would want to ask, how can i automatically run macros on a hyperlink form upon opening an excel file?

    I’m thinking of setting a specific date in outlook where it would open an excel file then run the macro automatically, but i don’t know how to call a specific hyperlink macro.

    hope you can help me.

  12. Aniket Shinde
    May 13, 2019 at 1:26 PM — Reply

    I Have a Data of Total Employees, Need to create VBA code on Employee Code. When I click on “Generate” need to show Total details of That seprate Employee.

    Please help with Code

  13. algae
    June 5, 2019 at 12:24 PM — Reply

    My workbook has a macro name “Main”. How do I run it whenever the workbook is opened?

  14. PNRao
    July 4, 2019 at 5:56 PM — Reply

    Paste the below code in the workbook code module:


    Private Sub Workbook_Open()
    Call Main
    End Sub

  15. Devmode
    May 11, 2020 at 11:35 PM — Reply

    How would I make it auto-run a macro ONLY when I open documents from a particular folder on my desktop?

Effectively Manage Your
Projects and  Resources

With Our Professional and Premium Project Management Templates!

ANALYSISTABS.COM provides free and premium project management tools, templates and dashboards for effectively managing the projects and analyzing the data.

We’re a crew of professionals expertise in Excel VBA, Business Analysis, Project Management. We’re Sharing our map to Project success with innovative tools, templates, tutorials and tips.

Project Management
Excel VBA

Download Free Excel 2007, 2010, 2013 Add-in for Creating Innovative Dashboards, Tools for Data Mining, Analysis, Visualization. Learn VBA for MS Excel, Word, PowerPoint, Access, Outlook to develop applications for retail, insurance, banking, finance, telecom, healthcare domains.

Analysistabs Logo

Page load link

Go to Top

Содержание

  1. 24-й час. Выполнение процедур
  2. Автоматическое выполнение процедур
  3. Процедуры, выполняемые при наступлении событий
  4. Создание надстроек Excel
  5. Резюме
  6. Вопросы и ответы
  7. Практикум
  8. Тесты
  9. Упражнение
  10. How to disable Workbook_Open and Auto_Open in Excel
  11. Opening a workbook manually
  12. Holding the Shift Key when opening
  13. Disabling all macros
  14. Opening a workbook from VBA
  15. Disabling Events
  16. Macro Security Settings in VBA

24-й час. Выполнение процедур

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

В этом часе будут рассмотрены следующие вопросы.

  • Использование процедур Auto_Open и Auto_Close.
  • Процедуры, выполняемые при наступлении определенных событий.
  • Создание надстроек Excel.

Автоматическое выполнение процедур

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

Процедуру Auto_Open можно использовать для решения следующих задач:

  • инициализация значений переменных;
  • добавление пользовательских меню и панелей инструментов;
  • ввод (инициализация) данных в рабочий лист;
  • отображение начального окна (окна приглашения) приложения;
  • изменение установок приложения (таких как отображение сетки рабочего листа или формат вывода нулевых значений);
  • вставка рабочих листов;
  • выполнение форматирования;
  • удаление ненужных данных из рабочего листа.

Процедура, выполняемая при закрытии рабочей книги, называется Auto_Close. Вот типичные задачи, выполняемые этой процедурой:

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

Можно использовать обе или только одну из этих процедур.

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

Если рабочая книга открывается из процедуры VBA, то процедуры Auto не выполняются. В этом случае для выполнения этих процедур используется метод RunAutoMacros.

Приведем примеры процедур Auto_Open и Auto_Close. Откройте новую рабочую книгу, вставьте модуль и в этом модуле создайте процедуру Auto_Open, код которой показан в листинге 24.1.

Листинг 24.1. Пример процедуры Auto Open

1: Sub Auto_Open()

2: Range(«A1»).Value = «Текущая дата:»

4: Range(«B1»).FormulaR1C1 = «=NOW()»

7: With ActiveWindow

8: .DisplayHorizontalScrollBar = False

9: .DisplayVerticalScrollBar = False

11: With Application

12: .DisplayFormulaBar = False

13: .DisplayStatusBar = False

Эта процедура вводит в рабочий лист текущую дату и время и удаляет из окна Excel полосы прокрутки, строку формул и строку состояния. Если надо восстановить внешний вид окна Excel после закрытия этой рабочей книги, создайте еще процедуру Auto_Close, код которой приведен в листинге 24.2.

Листинг 24.2. Пример процедуры Auto Close

1: Sub Auto_Close()

3: With ActiveWindow

4: .DisplayHorizontalScrollBar = True

5: .DisplayVerticalScrollBar = True

7: With Application

8: .DisplayFormulaBar = True

9: .DisplayStatusBar = True

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

Рис. 24.1. Процедуры, выполняемые при открытии рабочих книг, полезны для настройки среды Excel

Процедуры, выполняемые при наступлении событий

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

  • OnAction — выполняется, если указанный объект становится активным, например на нем щелкнули кнопкой мыши.
  • OnCalculate — выполняется после пересчета рабочего листа.
  • OnData — выполняется, когда получены данные из приложения, отличного от Excel.
  • OnDoubleСlick — выполняется, если на указанном объекте дважды щелкнули кнопкой мыши.
  • OnEntry — выполняется, когда пользователь нажал клавишу (или переместил табличный курсор в другую ячейку) после ввода данных в ячейку.
  • OnKey — выполняется, если нажата указанная комбинация клавиш.
  • OnRepeat — выполняется, если возвращена отмененная команда.
  • OnSheetActivate — выполняется, когда делается активным (текущим) указанный рабочий лист.
  • OnSheetDeactivate — выполняется, если пользователь переходит из указанного рабочего листа в любой другой.
  • OnTime — выполняется в указанное время, если в это время загружена программа Excel и открыта книга, содержащая процедуру OnTime.
  • OnUndo — выполняется при отмене ранее выполненной команды.
  • OnWindow — выполняется, когда пользователь переключается в указанное окно либо когда активизируется или открывается окно приложения Excel.

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

Обычно Оn-свойства объектов устанавливаются в процедуре Auto_Open рабочей книги. Например, можно предусмотреть сохранение рабочей книги при наступлении события OnData либо проверить корректность введенных данных после события OnEntry. Продемонстрируем на небольшом примере, как «‘работают» события.

  1. Откройте новую рабочую книгу, которая должна иметь не менее двух рабочих листов.
  2. Создайте процедуру Auto_Open со следующим кодом:
  1. Создайте новую процедуру с именем попытка со строкой кода

MsgBox «Вы вернулись в Лист1!»

  1. Сохраните рабочую книгу под именем Событие и закройте ее.
  2. Откройте рабочую книгу Событие и перейдите в рабочий лист Лист2.
  3. Теперь перейдите в Лист1 — отобразится окно сообщения.
  4. Щелкните на кнопке ОК для закрытия окна сообщения.

Для следующего примера в процедуру Auto_Open введите строку кода

Теперь создайте процедуру ПроверкаА1, код которой приведен в листинге 24.3.

Листинг 24.3. Процедура ПроверкаА1

1: Sub ПроверкаА1()

2: If Range(«A1»).Value

3: MsgBox «Значение должно быть не меньше 5»

Перейдите в Лист1 и выберите ячейку А1. Введите число 4 и нажмите . Появится окно с сообщением, что число должно быть не меньше 5. Щелкните на кнопке ОК для закрытия окна сообщения.

Создание надстроек Excel

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

  • функции, созданные пользователем;
  • пользовательские диалоговые окна;
  • пользовательские меню;
  • пользовательские панели инструментов.

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

  1. Откройте новую рабочую книгу и создайте функцию Комиссионные.
  2. Введите код этой функции

Function Комиссионные(х As Variant)

Комиссионные = х * 0.3

  1. Сохраните рабочую книгу под именем МояФункция.
  2. Выполните команду Файл > Сохранить как. В диалоговом окне Сохранение документа в раскрывающемся списке Тип файла выберите Надстройка Microsoft Excel. Автоматически откроется папка Addins. Щелкните на кнопке Сохранить для создания новой надстройки.
  3. Закройте все открытые рабочие книги.
  4. Откройте новую рабочую книгу.
  5. Выполните команду Сервис > Надстройки, откроется диалоговое окно Надстройки.
  6. Щелкните на кнопке Обзор. В открывшемся диалоговом окне Обзор, отображающем содержимое папки Addins, выберите файл МояФункция и щелкните на кнопке ОК. Щелкните на кнопке ОК в диалоговом окне Надстройки.
  7. Если вы сейчас откроете меню Окно, то увидите, что открыта только одна(текущая) рабочая книга.
  8. В ячейку А1 введите число 100. В ячейку В1 введите формулу =комиссионные(А1) и нажмите клавишу . Комиссионные будут вычислены.

Надеюсь, этот маленький пример ясно показал основную идею создания и использования надстроек.

Резюме

В этом часе вы получили тот уровень знаний о VBA, который необходим для автоматизации выполнения процедур. Вы узнали, что процедура Auto_Open автоматически выполняется при открытии рабочей книги, a Auto_Close — при закрытии. Вы также познакомились с процедурами, выполняемыми при наступлении определенных событий. Наконец, вы узнали, что такое надстройки Excel, как их создавать и использовать.

Вопросы и ответы

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

Ответ. Нет, в данном случае имя процедуры «работает» как спусковой крючок для автоматического выполнения процедуры.

Вопрос. Как сделать, чтобы процедура, сохраненная в книге-надстройке, была доступна всегда?

Ответ. Сохраните ее в личной книге макросов.

Практикум

С помощью тестов и упражнений вы проверите, насколько хорошо усвоили изложенный материал. Ответы на вопросы смотрите в Приложении.

Тесты

  1. Если необходимо выполнение определенной процедуры при импортировании данных с помощью MS Query, какое событие необходимо использовать?
  2. Истинно или ложно следующее утверждение: в рабочей книге может быть несколько процедур Auto_Open?
  3. Назовите не менее двух свойств событий, которые можно назначить для выполнения процедур проверки корректности вводимых данных.
  4. Истинно или ложно следующее утверждение: вы должны при использовании надстройки каждый раз загружать ее вручную?
  5. Предположим, что при закрытии рабочей книги необходимо сохранить внешний файл Word. Как это сделать?
  6. Сформулируйте задачи, которые могут выполнять надстройки.

Упражнение

Откройте новую рабочую книгу и создайте процедуру Auto_Open, которая должна выполнять следующие операции:

  • ввести текст Дата:, Имя:, Организация: в ячейки A1, A2 и A3 соответственно;
  • с помощью функции Now в ячейку В1 отобразить системное время компьютера;
  • использовать свойство UserName объекта Application для вставки имени пользователя в ячейку В2;
  • использовать свойство OrganizationName объекта Application для вставки названия организации в ячейку B3;
  • подогнать размеры столбцов А и В так, чтобы они полностью отображали введенные данные.

Источник

How to disable Workbook_Open and Auto_Open in Excel

Workbook_Open and Auto_Open are two predefined events for Excel VBA. Both events allow you to run a macro right after the workbook is loaded. You may want to open the workbook without triggering anything in some cases — either to skip a certain code block for security reasons, or for programming purposes. This article will show you how to disable Workbook_Open and Auto_Open in Excel.

  • Workbook_Open should be in ThisWorkbookAuto_Open can be in any module.
  • Excel triggers Workbook_Open before Auto_Open.

Let’s now take a closer look into how to disable Workbook_Open and Auto_Open:

Opening a workbook manually

You can use the following two approaches if you need to open a workbook manually.

Holding the Shift Key when opening

We’ll start with an easy approach to disable Workbook_Open and Auto_Open. If you hold down the Shift key when opening the file, the macros will not run. Beware that you should be in Excel’s Open window to make this work. This method doesn’t work when you open a file directly from your desktop or from the Windows Explorer. So,

  1. Start with opening Excel (only Excel, not the workbook)
  2. Activate the Open section — if you’re not on that page already
  3. Hold Shift Key
  4. Click on the file
  5. Release the Shift Key after the workbook is opened

Disabling all macros

An obvious way is to disable all macros using Excel Options. However, this method is the slowest approach so you may not want to turn on and off macros all the time.

Follow the steps below for disabling macros:

  1. Click the File >Options.
  2. Click Trust Center, and then click Trust Center Settings.
  3. In the Trust Center, click Macro Settings.
  4. Select either Disable all macros without notification or Disable all macros with notification
  5. Click OK to apply the setting.

Opening a workbook from VBA

What if you need to open an Excel workbook with your VBA code? Disabling macros from Excel Options still works. Here is what you can do to disable Workbook_Open and Auto_Open when opening a workbook from a macro.

Disabling Events

Events are built in actions VBA which are executed automatically. Workbook_Open and Auto_Open are examples for two such events. As a result, disabling events can help you skip the Workbook_Open and Auto_Open events.

You can enable or disable events by assigning a Boolean value to the Application.EnableEvents.

Macro Security Settings in VBA

The final approach is similar to the Disabling all macros method. However, this time we will show you how you can change the setting in a macro. You can change the Application.AutomationSecurity property’s value to mimic the setting in Excel Options.

The property can take three values:

  • msoAutomationSecurityByUI. Uses the security setting specified in the Security dialog box.
  • msoAutomationSecurityForceDisable. Disables all macros in all files opened programmatically without showing any security alerts.
  • msoAutomationSecurityLow. Enables all macros. This is the default value when the application is started.

You want to use msoAutomationSecurityForceDisable to disable.

Источник

 

как можно организовать что бы постоянно не заходить в панель разработчик visual basic

 

в автозагрузку Excel поставьте надстройку с одним макросом.  
макрос будет состоять из одной строки — команды открытия VBE

 

а какая должна быть команда открытия VBE

 

слэн

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

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

в персонал.xls записать код:  

  Sub Auto_open()  
application.sendkeys «%{F11}»  
end sub

 

Application.SendKeys «%{F11}»  

  Проверил — из auto_open в надстройке работает.

 
 

Alex_ST

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

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

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

А объясните дураку, почему именно в Auto_open в стандартном модуле, а не в Workbook_Open в модуле книги?  
И вообще, когда лучше применять    
Auto_Open вместо Workbook_Open и    
Auto_Close()вместо Workbook_BeforeClose

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

 

{quote}{login=слэн}{date=27.10.2010 01:45}{thema=}{post}в персонал.xls записать код:  

  Sub Auto_open()  
application.sendkeys «%{F11}»  
end sub{/post}{/quote}  

  а у меня personal.xls почемуто отсутсвует если создать самому то работает каряво

 

слэн

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

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

включите макрорекордер и .. выключите его(указав, что писать надо в личную книгу макросов)

 

слэн

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

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

{quote}{login=Alex_ST}{date=27.10.2010 02:06}{thema=}{post}А объясните дураку, почему именно в Auto_open в стандартном модуле, а не в Workbook_Open в модуле книги?  
И вообще, когда лучше применять    
Auto_Open вместо Workbook_Open и    
Auto_Close()вместо Workbook_BeforeClose{/post}{/quote}  

    сначала ответьте — open какой книги?

 

{quote}{login=Alex_ST}{date=27.10.2010 02:06}{thema=}{post}А объясните, почему именно в Auto_open в стандартном модуле, а не в Workbook_Open в модуле книги?  
И вообще, когда лучше применять    
Auto_Open вместо Workbook_Open и    
Auto_Close()вместо Workbook_BeforeClose{/post}{/quote}  
Цитирую сам себя (

http://www.planetaexcel.ru/forum.php?thread_id=2433&page_forum=2&allnum_forum=38

)  
> Auto_Open срабатывает, даже если запрещены события (Workbook_Open в модуле книги в этом случае не работает).  
Однако, если события разрешены, то Workbook_Open срабатывает раньше Auto_Open.  

  И, как мы с тобой, Алексей, выяснили, Workbook_BeforeClose не срабатывает при Application.Quit, а Auto_Close — срабатывает.

 

Alex_ST

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

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

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

{quote}{login=слэн}{date=27.10.2010 02:14}{thema=Re: }{post} сначала ответьте — open какой книги?{/post}{/quote}  
что значит какой книги? Мы ведь вроде про Personal говорили?  
С тем, что в Personal.xls не всегда возникает событие Workbook_BeforeClose при закрытии Ёкселя я уже сталкивался. И пришлось процедуру убиения создаваемого в Personal меню выносить в Auto_Close…  
А вот с тем, чтобы не отрабатывали макросы создания менюшек по событию Workbook_Open файла Personal.xls — нет.  
Или правильнее было написать «пока нет»? Может, стоит всё, что делается по событию Workbook_Open файла Personal.xls тоже лучше вынести в Auto_Close ?  

  А вообще, какая последовательность событий при открытии/закрытии файла? Надо бы проверить… Но уж очень лень ручками прописывать имя каждого события, например, в Debug.Print…  
Подскажите, можно ли в Debug.Print как-то автоматом вывести имя процедуры, во время которого этот Debug.Print произошёл?

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

 

Alex_ST

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

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

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

#13

27.10.2010 14:32:11

Казанский, спасибо.  
Пока я «топтал батоны», вводя вопросы в очередной пост, ты уже на часть из них ответил.  

  капча: 31113

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

Like this post? Please share to your friends:
  • Excel vba auto close
  • Excel vba ascii кодов
  • Excel vba array with strings
  • Excel vba array with range
  • Excel vba array split