Macro excel this workbook

When you create/record a macro in a workbook in Excel, it can only be used in that workbook.

But what if you have a list of useful Excel macros that you want to use in all the workbooks?  In such a case, it’s a good idea to save these in your Personal Macro Workbook.

Doing this would allow you to access the macro code from any workbook on your system.

This will save time as you don’t have to recreate the same macros again and again for every workbook. Instead, you can just create it once, store it in the personal macro workbook, and access it from any workbook.

If you’re interested in learning VBA the easy way, check out my Online Excel VBA Training.

What is a Personal Macro Workbook?

A Personal Macro Workbook is a hidden workbook in your system that opens whenever you open the Excel application.

Related: How to Automatically Open Specific Excel Files on Startup

It’s a place where you can store macro codes and then access these macros from any workbook. It’s a great place to store those macros that you want to use often.

To give you an example, suppose you regularly get data from your colleagues, and you’re required to clean the data and format it. Since you need to follow the same steps every time, you can create a macro to do this and save it in the Personal Macro Workbook.

Now, whenever you get the Excel file, you just need to run the macro (which is stored in the personal workbook and can be accessed from any workbook), and you’re done.

Where Can I Find the Personal Macro Workbook?

By default, the personal macro workbook doesn’t exist. You need to first create it.

Here are the steps to create a Personal Macro Workbook in Excel:

Note: If you can’t see the developer tab in the ribbon, here are the steps to enable it.

Doing this would create a new workbook with the name PERSONAL.XLSB and store the macro in this workbook.

Since we did absolutely nothing, the macro has no code in it. This was done to create the Personal Macro Workbook.

Now that the Personal Macro Workbook is created, you need to Close all the open workbooks. Doing this would show a prompt as shown below:

Click on Save to create the Personal Macro Workbook

Select Save.

When this is done, Excel will create and store the PERSONAL.XLSB file in the start folder, where it would automatically open in the backend whenever you open Excel.

How to Copy Macros in the Personal Macro Workbook?

Once the PERSONAL.XLSB file is created and saved, you can copy macros that you wish to reuse again.

Here are the steps to copy macros in the Personal Macro Workbook:

The above steps would save the macros you want to reuse in the Personal Macro Workbook.

Also read: How to Remove Macros From an Excel Workbook

How to Use Macros Stored in Personal Macro Workbook?

Suppose you have a list of macros saved in the Personal Macro workbook and you want to use it on a new Excel file you get.

Here are the steps to do this:

  • Go to the Developer tab.
  • Click on Macros.
  • In the Macro dialog box, select the macro that you want to run.
  • Click on Run.

Note that the macro dialog box shows you the list of all the macros that are available for use in the open workbook. This would include the macros stored in the workbook as well as the ones stored in the Personal Macro Workbook.

You can also run a macro by assigning a keyboard shortcut to the macro or insert a shape/button and assign the macro to it.

You can also use the Personal Macro Workbook to store custom functions (user-defined functions) created in VBA.

You May Also Like the Following Excel Tutorials:

  • Working with Cells and Ranges in Excel VBA.
  • Working with Worksheets in Excel VBA.
  • Working with Workbooks in Excel VBA.
  • Creating a User Defined Function in Excel using VBA.
  • Excel VBA Events – An Easy (and Complete) Guide.
  • Using Loops in Excel VBA.
  • If Then Else Statement in Excel VBA.
  • How to Create and Use an Excel Add-in.

Home / VBA / VBA ThisWorkbook (Current Excel File)

In VBA, you can use the ThisWorkbook property to refer to the workbook where you are writing the code. When you use it, you get access to all the properties and methods of the current workbook. In simple words, you can execute all the tasks in the current workbook without using the name.

Let’s say you want to count the sheets from the current workbook. The code you need to write would be like the following.

Sub vba_thisworkbook()
MsgBox ThisWorkbook.Sheets.Count
End Sub
vba-thisworkbook

When you run this code shows you a message box with the count of the sheets that you have in the current workbook.

message-box-with-the-count-of-sheets

As I said, when you use the ThisWorkbook it gives you access to the properties and method for the current workbook. You can see all of these when you enter a (.) dot to see the complete list.

access-to-the-properties

Helpful Links: Run a Macro – Macro Recorder – Visual Basic Editor – Personal Macro Workbook

Using ThisWorkbook with a Variable

Next, I’ll show you a real-life code example to declare a variable to use the ThisWorkbook property. Let’s say you want to perform multiple activities in the current workbook.

Sub vba_thisworkbook()
Dim myWB As Workbook
Set myWB = ThisWorkbook
With myWB
    .Activate
    .Sheets(1).Activate
    .Range("A1") = Now
    .Save
    .Close
End With
End Sub

In the first part of this code, you have a variable and then assign “ThisWorkbook” property to it. And then in the second part, you have the WITH STATEMENT to perform multiple activities with the current variable.

ActiveWorkBook Vs. ThisWorkbook

Let me explain it with a simple analogy, so, be with me for the next 2 minutes.

You have two workbooks open at the same time (Book1 and Book2). You are writing code in book1 but book2 is active at this point. So when you run that code which refers to the ActiveWorkbook it will perform that activity in Book2.

But when you use the ThisWorkbook VBA always refers to the workbook where code is being written.

Here’s the thing: It’s always preferable to use the ThisWorkbook because it eliminates the chances of any error.

More on VBA Workbooks

VBA Save Workbook | VBA Close Workbook | VBA Delete Workbook | VBA Rename Workbook | VBA Activate Workbook | VBA Combine Workbook | VBA Protect Workbook (Unprotect) | VBA Check IF a Workbook is Open | VBA Open Workbook | VBA Check IF an Excel Workbook Exists in a Folder| VBA Create New Workbook (Excel File)

  • VBA Workbook

A lot of Excel users get confused when they are recording an Excel Macro and they get prompted where they want to store their Excel Macro in?

Where To Store Your VBA Macro In? This Workbook or Personal Macro Workbook

Store Macro In

You have 3 options:

* Personal Macro Workbook

* New Workbook

* This Workbook

During the initial setup of recording a macro a prompt will present itself asking where the macro should be stored.  This option ultimately determines not only where the macro will be saved, but also where you can access the macro and where it can be used.

This Workbook

The “THIS WORKBOOK” option will create a module within the active workbook where Excel will save the macro (VBA Code). By storing the macro in the active workbook, the macro can be used within the that workbook or if that workbook is open.

Since the macro is contained with the workbook it was created within, if the workbook is sent to another Excel user or placed on a network drive, the macro will be there as well and other users can use that macro when that workbook is open on their system.

Files that contain a macro or VBA code must be saved as a .XLSM (MACRO ENABLED WORKBOOK) or .XLSB file.

Some Common Uses:

  • Macros that are specific to a workbooks data
  • Macros that make data connections and refreshes of data contained with the workbook
  • Macros that clean up data specific to the workbook

Personal Macro Workbook

The PERSONAL MACRO WORKBOOK is a hidden workbook located on a machine that contains Microsoft Excel.

The workbook is always open, but, hidden from view by default.

If a macro is stored in the PERSONAL MACRO WORKBOOK, this macro can be used within any workbook on the computer that contains that personal macro workbook.

Macros stored in a personal macro workbook are not typically shared through normal exchange of Excel files. To share a macro contained within the personal workbook, one would need to explicitly share their personal macro workbook, export the module that contains the macro or copy the code to another file and send that new file.

Some Common Uses:

  • One-time setup macros that can be used on multiple workbooks
  • Macros that are more specific to an individual job that isn’t shared among others
  • Repetitive tasks necessary across multiple Excel files

New Workbook

A NEW WORKBOOK creates a brand new workbook at time of recording. This new workbook will contain the macro and all of the VBA code.

In order to use these macros you must open the new workbook that Excel created.

Not as common as the other two!

About The Author

John Michaloudis

John Michaloudis

John Michaloudis is the Founder & Chief Inspirational Officer of MyExcelOnline!

In this Article

  • Creating a Personal Macro Workbook
  • Saving the Personal Macro Workbook
  • Running a macro from the Personal Macro Workbook
  • Viewing the Personal Macro Workbook in the VBE Editor
  • Unhiding the Personal Macro Workbook
  • Advantages of the Personal Macro Workbook.
  • Deleting the Personal Macro workbook

This article will demonstrate how to create a Personal Macro Workbook in VBA.

Normally, when we write a macro in the VBE Editor, it is stored within a module that is part of the workbook file and can only be used by that specific workbook. The Personal Macro workbook enables us to store a GLOBAL macro, a macro that is available for us to use across any open workbook in Excel.  This workbook is opened and automatically hidden each time you open Excel.

Creating a Personal Macro Workbook

We can create a personal macro workbook in Excel by recording a macro, and storing it within the Personal Macro workbook – Excel will then create the Personal Macro workbook automatically.

To record a macro, in the Ribbon, select View > Macros > Record Macro.

PMW Ribbon View

OR

In the Ribbon, select Developer > Code > Record Macro.

PMW Ribbon Developer

NOTE: to use the Developer tab in the Ribbon, it has to be made visible as it is by default hidden. To learn how to enable the Developer tab in the ribbon, click here.

You can change the name of the macro if you wish – remember that space are not allowed, you need to start with an alphabetical character and only alphanumerical characters are allowed (eg A-z, 0-1).  By default the Macro name will be Macro1.

In the Store macro in: drop down box, select Personal Macro workbook.

PMW Ribbon StoreMacro

You can record anything you like – for the purposes of this example we are going to click on Bold and Italic in the Home tab in the Ribbon to make the active cell in Excel Bold and Italic.

PMW Ribbon BoldItalic

To stop recording, click on the stop recording button in the bottom right hand corner of the screen.

PMW Ribbon Stop Recording

Saving the Personal Macro Workbook

When you have recorded or written macros in the Personal Macro workbook, and you exit Excel, Excel will ask you if you wish to save the Personal Macro workbook.

PMW Save PMW

If you do not save, any macros that you have written or recorded will be lost.  Click Save to save all the macros stored in the Personal Macro workbook.

Running a macro from the Personal Macro Workbook

Once you have stored a macro in the Personal Macro workbook, you can run the macro from within any Excel file.

In the Ribbon, select View > Macros > View Macros.

PMW Ribbon View ShowMacros

OR

In the Ribbon, select Developer > Code > Macros.

PMW Ribbon Developer ViewMacros

Select the macro you wish to run, and then click Run.

PMW Macro Run

NOTE: There is also an Edit option available in the Macro dialog box above.  However, you cannot Edit a macro in the Personal Macro workbook from this screen unless you unhide the Personal Macro Workbook first.

Viewing the Personal Macro Workbook in the VBE Editor

Now that you have recorded a macro that is stored within the Personal Macro workbook, this workbook will have been created for you and is hidden.  To view the macro and the Personal Macro workbook, we need to switch to the Visual Basic Editor (VBE).

In the Ribbon, select Developer > Code > Visual Basic.

PMW Developer VBE

OR

Press Alt+F11 on the keyboard

This will switch you into the Visual Basic Editor.

PMW VBE

In the Project Explorer on the left hand side, you will see that a Project has been created called PERSONAL.XLSB, and within that project, a module (Module 1) has automatically been created for you. Within that module, a sub-procedure called Macro1 has been created by the macro recorder.

Unhiding the Personal Macro Workbook

If you wanted to edit the macro directly from the View or Developer tabs in Excel, you would first need to unhide the Personal Macro workbook.

In the Ribbon, select View > Windows > Unhide.

PMW Window Unhide

Select the Personal Macro workbook and then select OK.

PMW Show Window

You will notice in the Excel menu bar, that you are now in the file – PERSONAL.XLSB.   This is a single blank worksheet that contains any macros that you have stored in it.

In the Ribbon, select View > Macros > View Macros.

PMW Ribbon View ShowMacros

OR

In the Ribbon, select Developer > Code > Macros.

PMW Ribbon Developer ViewMacros

Select the macro you wish to run, and then click Edit.

PMW Edit Macro

This will switch you to the VBE Editor.

NOTE: it is not recommended to unhide the Personal Macro workbook – it is rather recommended to use the VBE Editor directly from the Developer tab, or by pressing Alt+F11 to Edit your macro.

If you unhide your Personal Macro workbook, remember to hide it again before you exit Excel otherwise it will be visible next time you open Excel.

PMW Hide

Advantages of the Personal Macro Workbook.

  • Any recorded macros are available to be used in all Excel files.
  • Custom VBA code and functions can be written and shared between Excel files.

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!

automacro

Learn More

Deleting the Personal Macro workbook

If for some reason you wish to remove the Personal Macro workbook from Excel, you would need to close Excel and then physically delete the PERSONAL.XLSB file from the XLSTART folder.

  1. Close Excel.
  2. Open the Windows Explorer and browse to C:UsersUser NameAppDataRoamingMicrosoftExcelXLSTART
  3. Click on the view tab, and make sure that the hidden items check box is selected.
  4. Right-click on PERSONAL.XLSB and then click Delete.

PMW Delete PMW

На чтение 19 мин. Просмотров 14.2k.

VBA Workbook

John Naisbitt

Мы тонем в информации, но жаждем знаний

Эта статья содержит полное руководство по использованию рабочей книги VBA.

Если вы хотите использовать VBA для открытия рабочей книги, тогда откройте «Открыть рабочую книгу»

Если вы хотите использовать VBA для создания новой рабочей книги, перейдите к разделу «Создание новой рабочей книги».

Для всех
других задач VBA Workbook, ознакомьтесь с кратким руководством ниже.

Содержание

  1. Краткое руководство по книге VBA
  2. Начало работы с книгой VBA
  3. Доступ к рабочей книге VBA по индексу
  4. Поиск всех открытых рабочих книг
  5. Открыть рабочую книгу
  6. Проверить открыта ли книга
  7. Закрыть книгу
  8. Сохранить книгу
  9. Копировать книгу
  10. Использование диалогового окна «Файл» для открытия рабочей книги
  11. Использование ThisWorkbook
  12. Использование ActiveWorkbook
  13. Примеры доступа к книге
  14. Объявление переменной VBA Workbook
  15. Создать новую книгу
  16. With и Workbook
  17. Резюме
  18.  Заключение

Краткое руководство по книге VBA

В следующей таблице приведено краткое руководство по
основным задачам книги VBA.

Задача Исполнение
Доступ к открытой книге с
использованием имени
Workbooks(«Пример.xlsx»)
Доступ к открытой рабочей
книге (открывшейся первой)
Workbooks(1)
Доступ к открытой рабочей
книге (открывшейся последней)
Workbooks(Workbooks.Count)
Доступ к активной книге ActiveWorkbook
Доступ к книге, содержащей
код VBA
ThisWorkbook
Объявите переменную книги Dim wk As Workbook
Назначьте переменную книги Set wk = Workbooks(«Пример.xlsx»)
Set wk = ThisWorkbook
Set wk = Workbooks(1)
Активировать книгу wk.Activate
Закрыть книгу без сохранения wk.Close SaveChanges:=False
Закройте книгу и сохраните wk.Close SaveChanges:=True
Создать новую рабочую книгу Set wk = Workbooks.Add
Открыть рабочую книгу Set wk =Workbooks.Open («C:ДокументыПример.xlsx»)
Открыть книгу только для
чтения
Set wk = Workbooks.Open («C:ДокументыПример.xlsx», ReadOnly:=True)
Проверьте существование книги If Dir(«C:ДокументыКнига1.xlsx») = «» Then
MsgBox «File does not exist.»
EndIf
Проверьте открыта ли книга Смотрите раздел «Проверить
открыта ли книга»
Перечислите все открытые
рабочие книги
For Each wk In Application.Workbooks
    Debug.Print wk.FullName
Next wk
Открыть книгу с помощью
диалогового окна «Файл»
Смотрите раздел «Использование диалогового окна «Файл»
Сохранить книгу wk.Save
Сохранить копию книги wk.SaveCopyAs «C:Копия.xlsm»
Скопируйте книгу, если она
закрыта
FileCopy «C:file1.xlsx»,»C:Копия.xlsx»
Сохранить как Рабочая книга wk.SaveAs «Резервная копия.xlsx»

Начало работы с книгой VBA

Мы можем получить доступ к любой открытой книге, используя код Workbooks («Пример.xlsm»). Просто замените Пример.xlsm именем книги, которую вы хотите использовать.

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

Sub ZapisVYacheikuA1()

'Записывает 100 в ячейку A1 листа "Лист1" в МойVBA.xlsm
Workbooks("МойVBA.xlsm").Worksheets("Лист1").Range("A1") = 100

End Sub

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

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

Sub ZapisiVYacheiku()

' Записывает 100 в ячейку A1 листа "Лист1" в МойVBA.xlsm
Workbooks("МойVBA.xlsm").Worksheets("Лист1").Range("A1") = 100

' Записывает «Иван» в ячейку B1 листа «Лист1» в МойVBA.xlsm
Workbooks("МойVBA.xlsm").Worksheets("Лист1").Range("B1") = "Иван"

' Записывает 100 в ячейку A1 таблицы «Счета» в МойVBA.xlsm
Workbooks("МойVBA.xlsm").Worksheets("Счета").Range("A1") = 100

' Записывает дату в ячейку D3 рабочего листа "Лист2" в Книга.xlsx
Workbooks("Книга.xlsx").Worksheets("Лист2").Range("D3") = "112019"

End Sub

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

Взгляните на часть книги

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

 Устранение неполадок в коллекции книг

Когда вы используете коллекцию Workbooks для доступа к книге, вы можете получить сообщение об ошибке:

Run-time Error 9: Subscript out of Range.

Это означает, что VBA не может найти книгу, которую вы
передали в качестве параметра.

Это может произойти по следующим причинам:

  1. Рабочая книга в настоящее время закрыта.
  2. Вы написали имя неправильно.
  3. Вы создали новую рабочую книгу (например, «Книга1») и попытались получить к ней доступ, используя Workbooks («Книга1.xlsx»). Это имя не Книга1.xlsx, пока оно не будет сохранено в первый раз.
  4. (Только для Excel 2007/2010) Если вы используете два экземпляра Excel, то Workbooks () относится только к рабочим книгам, открытым в текущем экземпляре Excel.
  5. Вы передали число в качестве индекса, и оно больше, чем количество открытых книг, например Вы использовали
    Workbooks (3), и только две рабочие книги открыты.

Если вы не можете устранить ошибку, воспользуйтесь любой из функций в разделе Поиск всех открытых рабочих книг. Они будут печатать имена всех открытых рабочих книг в «Immediate Window » (Ctrl + G).

Примеры использования рабочей книги VBA

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

Примечание. Чтобы попробовать этот пример, создайте две открытые книги с именами Тест1.xlsx и Тест2.xlsx.

Sub SvoistvaRabocheiKnigi()

    ' Печатает количество открытых рабочих книг
    Debug.Print Workbooks.Count

    ' Печатает полное название книги
    Debug.Print Workbooks("Тест1.xlsx").FullName

    ' Отображает полное имя книги в диалоговом окне сообщения.
    MsgBox Workbooks("Тест1.xlsx").FullName

    ' Печатает количество листов в Тест2.xlsx
    Debug.Print Workbooks("Тест2.xlsx").Worksheets.Count

    ' Печатает имя активного в данный момент листа Тест2.xlsx
    Debug.Print Workbooks("Тест2.xlsx").ActiveSheet.Name

    ' Закрывает книгу под названием Тест1.xlsx
    Workbooks("Tест1.xlsx").Close

    ' Закрывает книгу Тест2.xlsx и сохраняет изменения
    Workbooks("Tест2.xlsx").Close SaveChanges:=True

End Sub

Примечание: в примерах кода я часто использую Debug.Print. Эта функция печатает значения в Immediate Window. Для просмотра этого окна выберите View-> Immediate Window из меню (сочетание клавиш Ctrl + G)

ImmediateWindow

ImmediateSampeText

Доступ к рабочей книге VBA по индексу

Вы также можете использовать индексный номер с книгами ().
Индекс относится к порядку, в котором книга была открыта или создана.

Workbooks (1) относится к книге, которая была открыта первой. Workbooks (2) относится к рабочей книге, которая была открыта второй и так далее.

' Первая рабочая книга, которая была открыта
Debug.Print Workbooks(1).Name

' Третья рабочая тетрадь, которая была открыта
Debug.Print Workbooks(3).Name

' Последняя рабочая книга, которая была открыта
Debug.Print Workbooks(Workbooks.Count).Name

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

Использование индекса не очень полезно, если вам не нужно знать порядок. По этой причине вам следует избегать его использования. Вместо этого вы должны использовать имя рабочей книги вместе с Workbooks ().

Поиск всех открытых рабочих книг

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

Вы можете сделать это, используя цикл For Each.

Sub PechatImeniFailaEach()

    ' Распечатывает полное имя файла всех открытых рабочих книг
    Dim wrk As Workbook
    For Each wrk In Workbooks
        Debug.Print wrk.FullName
    Next wrk

End Sub

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

Sub PechatImeniFailaFor()

    ' Распечатывает полное имя файла всех открытых рабочих книг
    Dim i As Long
    For i = 1 To Workbooks.Count
        Debug.Print Workbooks(i).FullName
    Next i

End Sub

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

Примечание. Оба примера читаются в порядке с первого открытого до последнего открытого. Если вы хотите читать в обратном порядке (с последнего на первое), вы можете сделать это

Sub PechatImeniFailaForKon()

    ' Распечатывает полное имя файла всех открытых рабочих книг
    ' в обратном порядке.
    Dim i As Long
    For i = Workbooks.Count To 1 Step -1
        Debug.Print Workbooks(i).FullName
    Next i

End Sub

Открыть рабочую книгу

До сих пор мы имели дело с рабочими книгами, которые уже открыты. Конечно, необходимость вручную открывать рабочую книгу перед запуском макроса не позволяет автоматизировать задачи. Задание «Открыть рабочую книгу» должно выполняться VBA.

Следующий код VBA открывает книгу «Книга1.xlsm» в папке «C: Документы»

Sub OtkritKnigu()

    ' Откройте книгу и распечатайте количество листов в ней
    Workbooks.Open ("C:ДокументыКнига1.xlsm")

    Debug.Print Workbooks("Книга1.xlsm").Worksheets.Count

    ' Закройте книгу без сохранения
    Workbooks("Книга1.xlsm").Close saveChanges:=False

End Sub

Рекомендуется проверить, действительно ли существует книга,
прежде чем открывать ее. Это предотвратит ваши ошибки. Функция Dir позволяет
вам легко это сделать.

Sub OtkritKniguDir()

    If Dir("C:ДокументыКнига1.xlsm") = "" Then
        ' Файл не существует - сообщение пользователю
        MsgBox "Could not open the workbook. Please check it exists"
    Else
        ' открыть книгу и сделать что-нибудь с ней
        Workbooks.Open("C:ДокументыКнига1.xlsm").Open
    End If

End Sub

Проверить открыта ли книга

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

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

Function GetWorkbook(ByVal sFullFilename As String) As Workbook
    
    Dim sFilename As String
    sFilename = Dir(sFullFilename)
    
    On Error Resume Next
    Dim wk As Workbook
    Set wk = Workbooks(sFilename)
    
    If wk Is Nothing Then
        Set wk = Workbooks.Open(sFullFilename)
    End If
    
    On Error Goto 0
    Set GetWorkbook = wk
    
End Function

Вы можете использовать эту функцию так:

Sub PrimerOtkritiyaKnigi()

    Dim sFilename As String
    sFilename = "C:ДокументыКнига2.xlsx"

    Dim wk As Workbook
    Set wk = GetWorkbook(sFilename)
    
End Sub

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

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

' Функция для проверки, если книга уже открыта
Function IsWorkBookOpen(strBookName As String) As Boolean
    
    Dim oBk As Workbook
    
    On Error Resume Next
    Set oBk = Workbooks(strBookName)
    On Error GoTo 0
    
    If Not oBk Is Nothing Then
        IsWorkBookOpen = True
    End If
    
End Function

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

Sub PrimerIsp()

    Dim sFilename As String
    sFilename = "C:tempwritedata.xlsx"

    If IsWorkBookOpen(Dir(sFilename)) = True Then
        MsgBox "File is already open. Please close file and run macro again."
        Exit Sub
    End If
    
    ' Написать в книгу здесь
    
End Sub

Если вам нужно проверить, открыта ли книга в другом экземпляре Excel, вы можете использовать атрибут ReadOnly книги. Будет установлено значение true, если оно открыто в другом экземпляре.

Закрыть книгу

Закрыть книгу в Excel VBA очень просто. Вы просто вызываете метод Close рабочей книги.

Обычно, когда вы закрываете книгу в VBA, вы не хотите видеть
сообщения из Excel, спрашивающие, хотите ли вы сохранить файл.

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

' Не сохранять изменения
wk.Close SaveChanges:= False

' Сохранить изменения
wk.Close SaveChanges:= True

Очевидно, что вы не можете сохранить изменения в книге,
которая в данный момент открыта только для чтения.

Сохранить книгу

Мы только что видели, что вы можете сохранить книгу, когда закроете ее. Если вы хотите сохранить его на любом другом этапе, вы можете просто использовать метод Save.

Вы также можете использовать метод SaveAs

wk.SaveAs "C:Резервная копияСчета.xlsx"

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

Вы также можете использовать VBA для сохранения книги в виде копии с помощью SaveCopyAs.

Копировать книгу

Если рабочая книга открыта, вы можете использовать два метода в приведенном выше разделе для создания копии, т.е. SaveAs и SaveCopyAs.

Если вы хотите скопировать книгу, не открывая ее, вы можете использовать FileCopy, как показано в следующем примере:

Sub KopirovatKnigu()
    FileCopy "C:ДокументыДокументы.xlsm", "C:ДокументыПример копии.xlsm"
End Sub

Использование диалогового окна «Файл» для открытия рабочей книги

В предыдущем разделе показано, как открыть книгу с заданным именем. Иногда вам может понадобиться, чтобы пользователь выбрал рабочую книгу. Вы можете легко использовать Windows File Dialog.

FileDialog VBA Workbook

FileDialog настраивается, и вы можете использовать его так:

  1. Выберите файл.
  2. Выберите папку.
  3. Откройте файл.
  4. «Сохранить как» файл.

Если вы просто хотите, чтобы пользователь выбрал файл, вы можете использовать функцию GetOpenFilename.

Следующая функция открывает книгу с помощью диалога файлов.
Функция возвращает полное имя файла, если файл был выбран. Если пользователь
отменяет, он отображает сообщение и возвращает пустую строку.

Public Function UserSelectWorkbook() As String

    On Error Goto ErrorHandler

    Dim sWorkbookName As String

    Dim FD As FileDialog
    Set FD = Application.FileDialog(msoFileDialogFilePicker)

    ' Откройте диалоговое окно файла
    With FD
        ' Установить заголовок диалога
        .Title = "Please Select File"

        ' Добавить фильтр
        .Filters.Add "Excel Files", "*.xls;*.xlsx;*.xlsm"

        ' Разрешить выбор только одного файла
        .AllowMultiSelect = False

        ' Диалог дисплея
        .Show

        If .SelectedItems.Count > 0 Then
            UserSelectWorkbook = .SelectedItems(1)
        Else
            MsgBox "Selecting a file has been cancelled. "
            UserSelectWorkbook = ""
        End If
    End With

    ' Убирать
    Set FD = Nothing
Done:
    Exit Function
ErrorHandler:
    MsgBox "Error: " + Err.Description
End Function

Когда вы вызываете эту функцию, вы должны проверить, отменяет ли пользователь диалог.

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

Public Sub TestViborPolz()

    Dim userBook As Workbook, sFilename As String

    ' Вызовите функцию UserSelectworkbook
    sFilename = UserSelectWorkbook()

    ' Если имя файла возвращается пустым, пользователь отменил
    If sFilename <> "" Then
        ' Откройте книгу и сделайте что-нибудь с ней
        Set userBook = Workbooks.Open(sFilename)
    End If

End Sub

Вы можете настроить диалог, изменив Title, Filters и AllowMultiSelect в функции UserSelectWorkbook.

Использование ThisWorkbook

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

Если наш код находится в книге, называемой МойVBA.xlsm, то ThisWorkbook и Workbooks («МойVBA.xlsm») ссылаются на одну и ту же книгу.

Использование ThisWorkbook более полезно, чем использование Workbooks (). С ThisWorkbook нам не нужно беспокоиться об имени файла. Это дает нам два преимущества:

  1. Изменение имени файла не повлияет на код
  2. Копирование кода в другую рабочую книгу не
    требует изменения кода

Это может показаться очень маленьким преимуществом. Реальность такова, что имена будут меняться все время. Использование ThisWorkbook означает, что ваш код будет работать нормально.

В следующем примере показаны две строки кода. Один с помощью ThisWorkbook, другой с помощью Workbooks (). Тот, который использует Workbooks, больше не будет работать, если имя МойVBA.xlsm изменится.

Sub IzmenenieImeni()

    ' Обе строки делают одно и то же.
    Debug.Print ThisWorkbook.FullName
    Debug.Print Workbooks("МойVBA.xlsm").FullName

End Sub

Использование ActiveWorkbook

ActiveWorkbook относится к книге, которая в данный момент активна. Это тот, который пользователь последний раз щелкнул.

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

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

Надеюсь, я дал понять, что вам следует избегать использования ActiveWorkbook, если в этом нет необходимости. Если вы должны быть очень осторожны.

Примеры доступа к книге

Мы рассмотрели все способы доступа к книге. Следующий код показывает примеры этих способов.

Sub PrimerDostupaKKnige()

    ' Это рабочая книга, которая уже открыта и называется МойVBA.xlsm.
    Debug.Print Workbooks("МойVBA.xlsm").FullName

    ' Рабочая книга, содержащая этот код
    Debug.Print ThisWorkbook.FullName

    ' Открытая рабочая книга, которая была открыта первой
    Debug.Print Workbooks(1).FullName

    ' Открытая рабочая книга, которая была открыта последней
    Debug.Print Workbooks(Workbooks.Count).FullName

    ' Рабочая книга, которая в настоящее время активна
    Debug.Print ActiveWorkbook.FullName

    ' Рабочая книга не указана - будет использована активная
    Debug.Print Worksheets("Лист1").Name

    ' Закрытая рабочая книга с именем Книга1.xlsm в папке 
      'C:Документы
    Workbooks.Open ("C:ДокументыКнига1.xlsm")
    Debug.Print Workbooks("Книга1.xlsm").FullName
    Workbooks("Книга1.xlsm").Close

End Sub

Объявление переменной VBA Workbook

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

Sub OtkrKnigaPerem()

    Dim wrk As Workbook
    Set wrk = Workbooks.Open("C:ДокументыКнига1.xlsm")

    ' Распечатать количество листов в каждой книге
    Debug.Print wrk.Worksheets.Count
    Debug.Print wrk.Name

    wrk.Close

End Sub

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

Ниже показан тот же код без переменной рабочей книги.

Sub OtkrKnigaNetPerem()

   Workbooks.Open ("C:ДокументыКнига1.xlsm")

   Debug.Print Workbooks("Книга2.xlsm").Worksheets.Count
   Debug.Print Workbooks("Книга2.xlsm").Name

    Workbooks("Книга2.xlsm").Close

End Sub

В этих примерах разница несущественная. Однако, когда у вас много кода, использование переменной полезно, в частности, для рабочего листа и диапазонов, где имена имеют тенденцию быть длинными, например thisWorkbook.Worksheets («Лист1»). Range («A1»).

Вы можете назвать переменную книги как wrkRead или wrkWrite. Затем вы можете сразу увидеть,
для чего используется эта книга.

Создать новую книгу

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

 Когда
вы создаете новую книгу, вы, как правило, хотите сохранить ее. Следующий код
показывает вам, как это сделать.

Sub SozdatKnigu()

    Dim wrk As Workbook
    Set wrk = Workbooks.Add

    ' Сохранить как xlsx. Это по умолчанию.
    wrk.SaveAs "C:TempПример.xlsx"

    ' Сохранить как макрокоманду
    wrk.SaveAs "C:TempПример.xlsm", xlOpenXMLWorkbookMacroEnabled

End Sub

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

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

Sub SozdatKniguMnStr()

    ' Сохраните значение SheetsInNewWorkbook, чтобы мы могли сбросить его позже
    Dim sheetCnt As Long
    sheetCnt = Application.SheetsInNewWorkbook

    ' Установите листы в новой книге, чтобы быть 7
    Application.SheetsInNewWorkbook = 7

    ' Рабочая книга будет создана из 7 листов
    Dim wrk As Workbook
    Set wrk = Workbooks.Add

    ' Показать количество листов
    Debug.Print "number of sheets: " & CStr(wrk.Worksheets.Count)

    ' Сброс к первоначальному значению
    Application.SheetsInNewWorkbook = sheetCnt

End Sub

With и Workbook

Ключевое слово With облегчает чтение и написание кода VBA.
Использование с означает, что вам нужно упомянуть только один раз. С
используется с объектами. Это такие элементы, как рабочие книги, рабочие
таблицы и диапазоны.

В следующем примере есть два Subs. Первый похож на код,
который мы видели до сих пор. Второй использует ключевое слово With. Вы можете
увидеть код гораздо понятнее во втором Sub. Ключевые слова End With обозначают
конец кода раздела с помощью With.

' Не используется ключевое слово With
Sub NeIspWith()

   Debug.Print Workbooks("Книга2.xlsm").Worksheets.Count
   Debug.Print Workbooks("Книга2.xlsm").Name
   Debug.Print Workbooks("Книга2.xlsm").Worksheets(1).Range("A1")
   Workbooks("Книга2.xlsm").Close

End Sub

' Использование With делает код легче читать
Sub IspWith()

    With Workbooks("Книга2.xlsm")
        Debug.Print .Worksheets.Count
        Debug.Print .Name
        Debug.Print .Worksheets(1).Range("A1")
        .Close
    End With

End Sub

Резюме

Ниже приводится краткое изложение основных моментов этой статьи.

  1. Чтобы получить рабочую книгу, содержащую код, используйте ThisWorkbook.
  2. Чтобы получить любую открытую книгу, используйте Workbooks («Пример.xlsx»).
  3. Чтобы открыть книгу, используйте Set Wrk = Workbooks.Open («C: Папка Пример.xlsx»).
  4. Разрешить пользователю выбирать файл с помощью функции UserSelectWorkbook, представленной выше.
  5. Чтобы создать копию открытой книги, используйте свойство SaveAs с именем файла.
  6. Чтобы создать копию рабочей книги без открытия, используйте функцию FileCopy.
  7. Чтобы ваш код было легче читать и писать, используйте ключевое слово With.
  8. Другой способ прояснить ваш код — использовать переменные Workbook.
  9. Чтобы просмотреть все открытые рабочие книги, используйте For Every wk в Workbooks, где wk — это переменная рабочей книги.
  10. Старайтесь избегать использования ActiveWorkbook и Workbooks (Index), поскольку их ссылка на рабочую книгу носит временный характер.

Вы можете увидеть краткое руководство по теме в верхней части этой статьи

 Заключение

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

Чтобы получить максимальную пользу от этой статьи, я рекомендую вам попробовать примеры. Создайте несколько книг и поиграйтесь с кодом. Внесите изменения в код и посмотрите, как эти изменения влияют на результат. Практика — лучший способ выучить VBA.

Понравилась статья? Поделить с друзьями:
  • Macro code for excel
  • Macmillan english word workbook 2
  • Machine word idea family sea hour tree book house friend student pen clothes picture
  • Machine is the only word that
  • Machine is a borrowed word