Макросы в excel для определенных книг

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

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

  1. Откройте вкладку Файл и выберите пункт Параметры, а затем — категорию Настроить ленту.

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

  3. Нажмите кнопку ОК.

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

  1. Откройте вкладку Разработчик и нажмите кнопку Запись макроса.

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

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

  3. В списке Сохранить в выберите пункт Личная книга макросов.

  4. После этого макрос будет доступен при каждом открытии Excel.

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

  6. Нажмите кнопку ОК.

  7. Откройте вкладку Файл, выберите пункт Открыть и выберите файлы, с которыми работаете каждый день. Они могут находиться в разных местах. Чтобы выбрать несколько файлов в одной папке, щелкните каждый из них, удерживая нажатой клавишу SHIFT.

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

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

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

Нужна дополнительная помощь?

Skip to content

На чтение 2 мин. Просмотров 5.2k.

Что делает макрос: Этот макрос открывает диалоговое окно, в котором отображаются только excel-файлы, тем самым позволяет открыть конкретную книгу

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как работает этот код
  4. Как использовать

Как макрос работает

Данный макрос открывает диалоговое окно, как показано на рис, что позволяет пользователю просматривать и открывать файл Excel.

Как открыть конкретную книгу в Excel

Код макроса

Sub Macro7()
'Шаг 1: Определяем переменную.
Dim FName As Variant
'Шаг 2: Метод GetOpenFilename активизирует диалоговое окно.
FName = Application.GetOpenFilename( _
'a – определяем тип файла
FileFilter:="Excel Workbooks,*.xl*", _
'b – заголовок окна
Title:="Выбери файл, который надо открыть", _
'c – множественный выбор
MultiSelect:=False)
'Шаг 3: Если был выбран файл, открыть его!
If FName <> False Then
Workbooks.Open Filename:=FName
End If
End Sub

Как работает этот код

  1. Первое, что делаем — объявляем переменную типа Variant, будет содержать Имя файла, который пользователь выберет. FName — имя нашей переменной.
  2. На шаге 2 мы используем метод GetOpenFilename, чтобы вызвать диалоговое окно, которое позволяет просмотреть содержимое папки и выбрать нужный нам файл. Метод
    GetOpenFilename поддерживает несколько настраиваемых параметров:
    a. FileFilter параметр позволяет указать Тип файла, который мы ищем.
    b. Title позволяет изменить заголовок, который отображается в верхней части диалогового окна.
    c. MultiSelect — параметр множественный выбор позволяет ограничить выбор в один файл.
  3. Если пользователь выбирает файл из диалогового окна, переменная FName берёт Имя файла, который выбрали. Если переменная не пустая, мы используем метод Open из книг
    объекта, чтобы открыть файл.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код во вновь созданном модуле.
  5. По желанию, можно назначить макрос к кнопке, чтобы открыть файл.

1 / 1 / 0

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

Сообщений: 64

1

Excel

Выполнение макроса только в определённой книге

31.01.2019, 16:31. Показов 2932. Ответов 2


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

Здравствуйте, подскажите, пожалуйста, как сделать, чтобы макрос выполнялся только в определённой книге, потому что когда у меня отрыто 2 или больше книг, то при запуске макроса , код выполняется на активной книге? Есть проверка, например,
If Книга1 активна Then Cellls(1,1) = «ОК» ?



0



amd48

779 / 461 / 79

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

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

Записей в блоге: 4

31.01.2019, 16:55

2

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

Решение

VB.NET
1
If ActiveWorkbook.Name="Книга1" Then



1



1 / 1 / 0

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

Сообщений: 64

31.01.2019, 17:00

 [ТС]

3

amd48, спасибо большое, это то, что нужно)



0



Макрос только для определенной книги

neon_tmn

Дата: Воскресенье, 22.01.2017, 09:32 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Добрый день, возникла проблема или недопонимание.
Я в определенной книге Excel в VBA написал макрос, который добавляет в контекстное меню один пункт.
Модуль вызвал из раздела «Эта книга» в дереве слева.
Вот макрос:
[vba]

Код

‘Создание пункта для контекстного меню
Sub AddPopupMenu()
Dim cb As CommandBar: On Error Resume Next
For Each cb In Application.CommandBars
If cb.Type = msoBarTypePopup Then
cb.Reset ‘ сброс меню к настрокам по умолчанию
With cb.Controls.Add(msoControlButton, , , 1, True)
.Name = «ShowSvodInfo»
.Caption = «Перейти к расшифровке»: .FaceId = 487
.OnAction = «clickDecrypt»
End With
End If
Next cb
End Sub

Далее в этом же модуле при запуске экселя выполняю этот макрос:
‘Вызов макросов при открытии книги
Private Sub Workbook_Open()
Call AddPopupMenu
End Sub

[/vba]

Пункт добавляется и отрабатывает, все хорошо, НО, если открывать новые книги эксель, то этот пункт в контекстном меню ячейки добавлен и там и соответственно при нажатии на этот пункт возникает проблема.
Если я закрываю эту мою книгу с макросом для добавления пункта меню и затем в пустой книге нажимаю на добавленный пункт, то у меня октрывается книга, в которой макрос.
Как мне этого избежать?

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

Сообщение отредактировал neon_tmnВоскресенье, 22.01.2017, 09:52

 

Ответить

anvg

Дата: Воскресенье, 22.01.2017, 09:50 |
Сообщение № 2

Группа: Друзья

Ранг: Ветеран

Сообщений: 581


Репутация:

271

±

Замечаний:
0% ±


2016, 365

Доброе время суток.
Тогда вам нужно усложнить конструкцию кода. В модуле книги написать обработчики событий Activate и Deactivate.
В первом — создание пункта в контекстном меню (с проверкой если ещё не существует).
Во втором удаление, так как переключились в другую книгу. Возможно, задействовать другие события Open, Close. Чётко не скажу, срабатывает ли Atcivate при открытии книги, и Deactivate при закрытии.
Успехов.
P. S. Код оформите, пожалуйста, соответствующими тэгами (# в панели кнопок сообщения).

 

Ответить

neon_tmn

Дата: Воскресенье, 22.01.2017, 09:54 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

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

Идею я понял и сам так пробовал, но долго отрабатывает поиск соответствующего пункта. я ищу так:
[vba]

Код

    Dim УдаляемыйПункт As CommandBarControl
    Dim Меню As CommandBar
    For Each Меню In Application.CommandBars ‘ для каждого меню
        If Меню.Type = msoBarTypePopup Then
            For Each УдаляемыйПункт In Меню.Controls ‘ каждый элемент меню
               If InStr(1, УдаляемыйПункт.TooltipText, «Перейти к расшифровке») Then
                УдаляемыйПункт.Visible = ShowItemMenu
                Exit For
               End If
            Next УдаляемыйПункт
        End If
    Next Меню

[/vba]

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

 

Ответить

neon_tmn

Дата: Воскресенье, 22.01.2017, 09:59 |
Сообщение № 4

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Как бы сделать, чтобы Sub Workbook_Open() срабатывал только в той книге, в которой он написан в модуле Книги. А не во всех открываемых заново книгах.

 

Ответить

anvg

Дата: Воскресенье, 22.01.2017, 10:08 |
Сообщение № 5

Группа: Друзья

Ранг: Ветеран

Сообщений: 581


Репутация:

271

±

Замечаний:
0% ±


2016, 365

Просто добавьте переменную на уровне модуля
[vba]

Код

Private MyPopUpItem As CommandBarControl

[/vba]
Соответственно
[vba]

Код

Sub AddPopupMenu()
    Set MyPopUpItem = cb.Controls.Add(msoControlButton, , , 1, True)
    With MyPopUpItem
    ‘…

Private Sub Workbook_Activate()
    MyPopUpItem.Visible = True
End Sub

Private Sub Workbook_Deactivate()
    MyPopUpItem.Visible = False
End Sub

[/vba]

 

Ответить

neon_tmn

Дата: Воскресенье, 22.01.2017, 10:15 |
Сообщение № 6

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

В том же модуле «Эта книга» написал макрос при смене листа:
[vba]

Код

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
      MsgBox «Name of Sheet:» & Sh.Name
End Sub

[/vba]

Он работает только в пределать текущей книги. Если я открою другую книгу, то там это событие работать не будет. В Private Sub Workbook_Open() у меня выполняется собитие вызывающее макрос для создания этого пункта меню.
При открытии других книг этот макрос уже не выполняется. Просто, я так понимаю, что создание пункта меню влияет на все приложение в целом.

 

Ответить

neon_tmn

Дата: Воскресенье, 22.01.2017, 10:30 |
Сообщение № 7

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Просто добавьте переменную на уровне модуля

Идею Вашу понял, хорошая идея.
В модуле создал переменную, как вы описали.
Затем в модуле книги соответственно прописал все остальное.
Теперь при активации книги у меня появляется ошибка «run-time error ‘424’ object required» на строке
[vba]

Код

MyPopUpItem.Visible = False

[/vba]

 

Ответить

RAN

Дата: Воскресенье, 22.01.2017, 10:33 |
Сообщение № 8

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

В общий модуль
[vba]

Код

Sub AddToMenu()    ‘   добавляем элемент меню в контекстное меню Ячейка
    Dim cb As CommandBar
    Dim i&
    Call DeleteFromMenu: Set cb = CommandBars(«Cell»)
    For i = 1 To 1000: DoEvents: Next
        With cb.Controls.Add(Type:=msoControlButton, Before:=1)
        .Caption = «А»
            .OnAction = «p»
            .FaceId = 29
        End With  
    cb.Controls(2).BeginGroup = True
End Sub
Sub DeleteFromMenu()
    On Error Resume Next
    CommandBars(«Cell»).Controls(«А»).Delete
    Err.Clear
    On Error GoTo 0
End Sub

[/vba]
В модуль книги
[vba]

Код

Private Sub Workbook_Activate()
AddToMenu
End Sub

Private Sub Workbook_Deactivate()
DeleteFromMenu
End Sub

[/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

neon_tmn

Дата: Воскресенье, 22.01.2017, 10:43 |
Сообщение № 9

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Private Sub Workbook_Activate()
AddToMenu
End Sub

Private Sub Workbook_Deactivate()
DeleteFromMenu
End Sub

То есть каждый раз создавать или удалять этот пункт меню. в принципе не скажу, что по времени это сильно затратно, но все таки хотелось бы просто скрывать или показывать. Это возможно?
Если скрывать/показывать нельзя, то сделать добавление и удаление.

 

Ответить

anvg

Дата: Воскресенье, 22.01.2017, 12:04 |
Сообщение № 10

Группа: Друзья

Ранг: Ветеран

Сообщений: 581


Репутация:

271

±

Замечаний:
0% ±


2016, 365

Вариант. Только в 2016 ведёт странно. Если первым открыть этот файл, то механизм не работает (пункт не скрывается). Если же файл открывается вторым, то поведение, как описывалось. Нет времени разбирать почему.

 

Ответить

neon_tmn

Дата: Понедельник, 23.01.2017, 08:30 |
Сообщение № 11

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

anvg, RAN, спасибо вам за помощь, вы мне помогли. Буду разбираться дальше.

 

Ответить

In Excel, you can make it so all of your macros can be easily accessed by any Excel workbook.

To do this we need to create what is called a «personal macro workbook» and then save it.  All of the macros that we want to use in Excel will be stored within this personal macro workbook and will then be accessible by any Excel file.

Steps to Make any Macro Available in All Excel Files

  1. Open an Excel file and then go to record a dummy macro, recording this dummy macro is what will create the «personal macro workbook» that we need in order to store the macros.
  2. To record a macro go to the Developer tab, if that is visible, or simply look to the bottom left of the Excel window.  From there, click the Record Macro button:
    0090ff8f1346bb6e5fd58a4f23a2e878.jpg
  3. On the screen that appears, make sure to select Personal Macro Workbook from the Store macro in: drop down box and then hit the OK button. Nothing else matters here because we just need to record a simple macro, anything really.
    aa5c83eef649501987c1791017105057.png
  4. Select any cell in the worksheet and then just click the Stop Recording macro button, which is in the exact same location as the Record Macro button in step 2.
    4f55b8f6ab9215a22b4f2630cbcf1a80.png
  5. Now hit Alt + F11 on the keyboard so we can go to the VBA/Macro editor window.  You will now see the PERSONAL.XLSB file appear in the top left pane of the window.
    122bce41fec5716168a2e10c8736d184.png
  6. All you have to do now is to add Modules and Macros to this file like you would to any normal Excel file. Double-click Module 1 and we see the macro that we just recorded:
    80a7034fa3c5d613c06bc0f72c54f20c.png

As you can see, this new PERSONAL.XLSB file behaves just like a regular file in the VBA window.  This is where you will store any macros that you want to be able to access from all Excel files.

Notes

The personal macro workbook file does NOT travel with your Excel files when you send them; this PERSONAL.XLSB file only remains on your computer for you to use.  So, if you send a workbook to another person, they will not be able to access the same macros that you have unless you also put those macros in the workbook you sent.

You must follow the above steps to create the personal macro workbook but, once you have created it, you can access it from any workbook on your computer by simply going to the VBA/Macro editor window (Alt + F11).  As such, once it is created, adding macros to this new file is the same as adding it to any other Excel file — open any workbook, go to the VBA window, add a module to the PERSONAL.XLSB file and then add a macro.

The sample file for this tutorial is empty because, remember, you cannot send the personal macro workbook file with Excel files.


Excel VBA Course

Excel VBA Course — From Beginner to Expert

200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides

Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)

View Course

Similar Content on TeachExcel

Vlookup Function That Searches The Entire Workbook in Excel — UDF

Macro: With this VLOOKUPWORKBOOK function, you will have to power to more quickly and easily ana…

Copy and Paste Data using Macro VBA in Excel

Tutorial: How to copy and paste data using a Macro in Excel. I’ll show you multiple ways to do this,…

Get the Name of a Worksheet in Macros VBA in Excel

Tutorial: How to get the name of a worksheet in Excel using VBA and Macros and also how to store tha…

Highlight, Sort, and Group the Top and Bottom Performers in a List in Excel

Tutorial:
How to highlight the rows of the top and bottom performers in a list of data.
This allows…

Sort Data that Doesn’t Have Headers in Ascending Order in Excel

Macro: Sort data that doesn’t have headers in ascending order in Excel with this macro. This is a…

Loop through a Range of Cells in a UDF in Excel

Tutorial:
How to loop through a range of cells in a UDF, User Defined Function, in Excel. This is …

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

Excel VBA Course

Excel VBA Course — From Beginner to Expert

200+ Video Lessons

50+ Hours of Video

200+ Excel Guides

Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)

View Course

Понравилась статья? Поделить с друзьями:
  • Макросы в excel 2019 для чайников с примерами
  • Макросы в excel для копирования листа
  • Макросы в excel 2013 что это
  • Макросы в excel для заполнения ячеек
  • Макросы в excel 2010 что такое