I have a bit of code now that prompt the user to select a range (1 area, 1 column, several rows).
This is the code where it prompt the user to do so:
MsgBox "Select a continuous range of cells where numeric values should be appended."
Set Rng = Application.InputBox("Select a range", "Obtain Range Object", Type:=8) 'Type Values, 8 - Range object
How can I however get the Workbook name and Worksheet name from the above selection?
I need this:
- Workbook name of destination wb — this I have achieved but using cmd: ThisWorkbook (before prompting the user to do anything)
-
Worksheet name of destination ws — this would preferbly also be read from above code, where it prompt the user with «Set Rng /—/»
-
Workbook name of source wb — after reading the destination ws, I want to promt the user with a Open-dialuge to select the source Workbook, where I will promt the user to select an additional range (source range) — which will be input to 3 & 4.
-
Worksheet name of source ws — see 3
Also preferrbly I would like to have the absolute ws name ‘Sheet1’ etc. not what it is named to (e.g. Kalle Anka).
Many thanks!
EDIT: I know it in the input-dialouge show if another ws or wb is selected than from where the macro was initiated, i.e. ‘[Cognos Orders and deliveries.xlsx]Truck Orders’!$F$11:$F$18. But if I dim Set as Range — is there any way to retrive that info? If it were a String you could maybes split the String with ! and then ] to get the ws and wb seperately? How now with a Range?
EDIT2: Based on answers below, I’ve tried this with following result/problem:
Sub AppendCognosData()
Dim Rng As Range
Dim AppendWb As Workbook
Dim AppendWs As Worksheet
Dim AppendWb2 As Workbook
'Create a reference to Wb where to append data
Set AppendWb = ThisWorkbook
MsgBox "Select a continuous range of cells (in a column) where numeric values should be appended."
Set Rng = Application.InputBox("Select a range", "Obtain Range Object", Type:=8) 'Type Values, 8 - Range object
AppendWs = Rng.Parent.Name
AppendWb2 = Rng.Parent.Paranet.Name
At these 2 last rows I get Error.
- Run error nr ’91’? It says that objectvariable or With-blocvariabel
has not been designated
Содержание
- VBA Get Workbook Name in Excel
- Syntax to get current Workbook name using VBA in Excel
- Get Name of the Active Workbook using VBA in Excel
- Macro to Get Current Workbook Name using VBA in Excel
- Instructions to Run VBA Macro Code or Procedure:
- Other Useful Resources:
- VBA ActiveWorkbook vs. ThisWorkbook
- ActiveWorkbook vs. ThisWorkbook
- ThisWorkbook
- ActiveWorkbook
- VBA Assumes ActiveWorkbook
- New or Opened Workbooks are Active
- ThisWorkbook and ActiveWorkbook Examples
- VBA Coding Made Easy
- Switch Active Workbook
- Make ThisWorkbook Active
- Set ActiveWorkbook to a Variable
- Close and Save the Active Workbook
- Close the Active Workbook Without Saving
- ActiveWorkbook – Save As
- VBA Code Examples Add-in
- Объект Workbook (Excel)
- Замечания
- Пример
- События
- Методы
- Свойства
- См. также
- Поддержка и обратная связь
- VBA ThisWorkbook
- Excel VBA ThisWorkbook
- Working with ThisWorkbook in Excel VBA
- Example #1
- Example #2
- Active Workbook vs. ThisWorkbook in Excel VBA
- Difference #1: Meaning
- Difference 2: Error Chances
- Recommended Articles
- Свойства и методы ActiveWorkbook
- Краткое руководство по книге VBA
- Начало работы с книгой VBA
- Доступ к рабочей книге VBA по индексу
- Поиск всех открытых рабочих книг
- Открыть рабочую книгу
- Проверить открыта ли книга
- Закрыть книгу
- Сохранить книгу
- Копировать книгу
- Использование диалогового окна «Файл» для открытия рабочей книги
- Использование ThisWorkbook
- Использование ActiveWorkbook
- Примеры доступа к книге
- Объявление переменной VBA Workbook
- Создать новую книгу
- With и Workbook
- Резюме
- Заключение
VBA Get Workbook Name in Excel
VBA Get Workbook Name in Excel. We can return workbook name using Workbook.Name property. Here workbook represents an object. It is part of Workbooks collection. Returns a string value representing Workbook name. We can find Active Workbook or Current Workbook name using Name property of Workbook.
Syntax to get current Workbook name using VBA in Excel
Here is the following syntax to get the Name of the Workbook using VBA in Excel.
Where expression: It represents Workbook object which is part of workbooks collection.
Name: It represents property of Workbook object to get Workbook name.
Get Name of the Active Workbook using VBA in Excel
Let us see the following example macro to get current or active workbook name in using VBA in Excel. Where ‘Name’ represents the property of Workbook object. It helps to get the name of the Workbook.
Output: Please find the output screenshot of the above macro code.
Active Workbook Name
Macro to Get Current Workbook Name using VBA in Excel
Here is another example macro code to get current workbook name using VBA in Excel.
Output: Here is the output screenshot of the above macro code.
This Workbook Name
Instructions to Run VBA Macro Code or Procedure:
You can refer the following link for the step by step instructions to execute VBA code or procedure.
Other Useful Resources:
Click on the following links of the useful resources. These helps to learn and gain more knowledge.
Источник
VBA ActiveWorkbook vs. ThisWorkbook
In this Article
This tutorial will discuss the difference between the VBA ActiveWorkbook and ThisWorkbook objects.
ActiveWorkbook vs. ThisWorkbook
It’s important to the know the difference between the ActiveWorkbook and ThisWorkbook in VBA:
The ActiveWorkbook is the workbook that is currently active (similar to how ActiveSheet is the currently active sheet). ThisWorkbook is the workbook where the VBA code is stored. ThisWorkbook will never change.
ThisWorkbook
Think of ThisWorkbook as an object variable that allows you to reference the workbook containing the currently running code.
This code will display a MessageBox with ThisWorkbook name:
ActiveWorkbook
The ActiveWorkbook is an object variable that allows you to reference the currently active workbook.
This code will display a MessageBox with ActiveWorkbook name:
VBA Assumes ActiveWorkbook
When attempting to work with objects (ex. Sheets) within the ActiveWorkbook, you do not need to explicitly state the ActiveWorkbook object. VBA will assume you are referring to the ActiveWorkbook.
Is the same as this:
New or Opened Workbooks are Active
Whenever you create a new workbook or open a workbook, the workbook becomes “Active”. You can see for yourself with this code that will add a workbook and retrieve the new workbook’s name:
After adding or opening a workbook, you can assign it to a variable by using the ActiveWorkbook object. We will show you how in the examples below:
ThisWorkbook and ActiveWorkbook Examples
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!
Switch Active Workbook
Switch the active workbook using Workbook name:
Switch the active workbook using an index as a workbook order number (1 is the first workbook opened or created):
Make ThisWorkbook Active
Make ThisWorkbook (where the currently running code is stored) the ActiveWorkbook:
Set ActiveWorkbook to a Variable
Assign the ActiveWorkbook to a workbook object variable:
Close and Save the Active Workbook
Closes and Saves the ActiveWorkbook:
Close the Active Workbook Without Saving
Closes the ActiveWorkbook without saving:
ActiveWorkbook – Save As
Performs a Save As of the active Workbook.
VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
Источник
Объект Workbook (Excel)
Представляет книгу Microsoft Excel.
Замечания
Объект Workbook является членом коллекции Workbooks . Коллекция Книги содержит все объекты Workbook , открытые в настоящее время в Microsoft Excel.
Свойство ThisWorkbook объекта Application возвращает книгу, в которой выполняется код Visual Basic. В большинстве случаев это то же самое, что и активная книга. Однако если код Visual Basic является частью надстройки, свойство ThisWorkbook не вернет активную книгу. В этом случае активной книгой является книга, вызывающая надстройку, тогда как свойство ThisWorkbook возвращает книгу надстройки.
Если вы создаете надстройку на основе кода Visual Basic, следует использовать свойство ThisWorkbook для определения инструкции, которая должна выполняться в книге, которую вы компилируете в надстройку.
Пример
Используйте workbooks (index), где index — это имя книги или номер индекса, чтобы вернуть один объект Workbook . В следующем примере активируется одна книга.
Номер индекса обозначает порядок открытия или создания книг. Workbooks(1) — первая созданная книга, а Workbooks(Workbooks.Count) — последняя созданная. Активация книги не изменяет ее номер индекса. Все книги включаются в число индексов, даже если они скрыты.
Свойство Name возвращает имя книги. Нельзя задать имя с помощью этого свойства; Если необходимо изменить имя, используйте метод SaveAs , чтобы сохранить книгу под другим именем.
В следующем примере выполняется активация Sheet1 в книге с именем Cogs.xls (книга уже должна быть открыта в Microsoft Excel).
Свойство ActiveWorkbook объекта Application возвращает книгу, которая сейчас активна. В следующем примере задается имя автора для активной книги.
В этом примере вкладка листа из активной книги отправляется по электронной почте, используя указанный адрес электронной почты и тему. Для выполнения этого кода активный лист должен содержать адрес электронной почты в ячейке A1, тему в ячейке B1 и имя листа, отправляемого в ячейку C1.
События
Методы
Свойства
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
VBA ThisWorkbook
Excel VBA ThisWorkbook
VBA ThisWorkbook means the workbook in which we are writing the Excel code. So, for example, if you are working in the workbook named “Sales 2019.xlsx,” we usually refer to the workbook like this.
The code will activate the workbook named “Sales 2019.xlsx”.
Here, ThisWorkbook refers to the workbook where we are writing the code. By referring to this word, we can execute all the tasks in the current workbook and avoid lengthy code with a fully named workbook name.
We are sure you must have also seen the word “Active Workbook” when referring to the other code. It is also one of the most often used words in coding. We will see what the differences between these two words in basic are.
Working with ThisWorkbook in Excel VBA
The reference word “ThisWorkbook” is more reliable than the Workbooks object qualifier. One human tendency is typing the workbook name wrongly, which results in an error message.
One more important reason why VBA ThisWorkbook is more reliable is that just in case we change the workbook name, we need to alter the code because we have used the word “ThisWorkbook.”
You are free to use this image on your website, templates, etc., Please provide us with an attribution link How to Provide Attribution? Article Link to be Hyperlinked
For eg:
Source: VBA ThisWorkbook (wallstreetmojo.com)
So, ThisWorkbook is safer to use for referring to the workbook where we are writing the code.
Example #1
We will see examples of using the word ThisWorkbook in Excel VBA. The following code will print the workbook name.
Code:
Example #2
Instead of using the word “This Workbook,” we can use variables to set the workbook reference and even reduce the length of the code drastically in VBA. For example, look at the below code first.
Code:
The above code has used “ThisWorkbook” in every line of the code. How hard it is to type the word every time. So, we can minimize this by using variables.
Now, look at the below code with the variable.
Code:
Looks beautiful, doesn’t it?
Let us explain the code.
First, we have declared the variable as a Workbook object.
Since this is an object variable, we need to set the reference to the particular workbook. So, we have used the “ThisWorkbook” reference.
We reference the variable “Wb” in the workbook where we are currently writing the code. So, as we advance in the procedure, we need not use the word “ThisWorkbook”; instead, we can use the variable “Wb.”
Active Workbook vs. ThisWorkbook in Excel VBA
As we said at the beginning of the article, many coders use the words “Active Workbook” and “ThisWorkbook” very often in their VBA coding. However, it is difficult to understand these two as a reader or a new learner. So, let me explain to you some of the differences.
Difference #1: Meaning
- Active Workbook: Active Workbook is not necessarily the workbook where we are currently writing the code. If you have multiple opened workbooks and the workbook is visible on your screen is considered an Active Workbook.
- ThisWorkbook: ThisWorkbook is always the workbook where we are writing the code at the moment.
Difference 2: Error Chances
- Active Workbook: Using Active in the coding may lead to many errors and confusion because we never know which workbook is active unless we specifically mention the workbook to activate before using the word Active Workbook.
- ThisWorkbook: ThisWorkbook cannot go wrong because it does not matter which workbook is active. It always takes the reference of the workbook where we are writing the code.
Recommended Articles
This article is a guide to VBA ThisWorkbook. Here, we learn how to use ThisWorkbook as a reference in Excel VBA, with practical examples and a downloadable Excel template. Below you can find some useful Excel VBA articles: –
Источник
Свойства и методы ActiveWorkbook
Мы тонем в информации, но жаждем знаний
Эта статья содержит полное руководство по использованию рабочей книги VBA.
Если вы хотите использовать VBA для открытия рабочей книги, тогда откройте «Открыть рабочую книгу»
Если вы хотите использовать VBA для создания новой рабочей книги, перейдите к разделу «Создание новой рабочей книги».
Для всех других задач VBA Workbook, ознакомьтесь с кратким руководством ниже.
Краткое руководство по книге 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 именем книги, которую вы хотите использовать.
В следующем примере показано, как записать в ячейку на листе. Вы заметите, что мы должны были указать рабочую книгу, рабочий лист и диапазон ячеек.
Этот пример может показаться немного запутанным для новичка, но на самом деле он довольно прост.
Первая часть до десятичной запятой представляет собой рабочую книгу, вторая часть представляет собой рабочую таблицу, а третья — диапазон. Вот еще несколько примеров записи в ячейку
Это простой шаблон. Вы можете написать в любую ячейку любого листа из любой книги. Это просто вопрос изменения названия книги, имени листа и диапазона в соответствии с вашими потребностями.
Взгляните на часть книги
Ключевое слово Workbooks относится к совокупности всех открытых рабочих книг. Предоставление имени книги в коллекцию дает нам доступ к этой книге. Когда у нас есть объект, мы можем использовать его для выполнения задач с книгой.
Устранение неполадок в коллекции книг
Когда вы используете коллекцию Workbooks для доступа к книге, вы можете получить сообщение об ошибке:
Run-time Error 9: Subscript out of Range.
Это означает, что VBA не может найти книгу, которую вы передали в качестве параметра.
Это может произойти по следующим причинам:
- Рабочая книга в настоящее время закрыта.
- Вы написали имя неправильно.
- Вы создали новую рабочую книгу (например, «Книга1») и попытались получить к ней доступ, используя Workbooks («Книга1.xlsx»). Это имя не Книга1.xlsx, пока оно не будет сохранено в первый раз.
- (Только для Excel 2007/2010) Если вы используете два экземпляра Excel, то Workbooks () относится только к рабочим книгам, открытым в текущем экземпляре Excel.
- Вы передали число в качестве индекса, и оно больше, чем количество открытых книг, например Вы использовали
Workbooks (3), и только две рабочие книги открыты.
Если вы не можете устранить ошибку, воспользуйтесь любой из функций в разделе Поиск всех открытых рабочих книг. Они будут печатать имена всех открытых рабочих книг в «Immediate Window » (Ctrl + G).
Примеры использования рабочей книги VBA
Следующие примеры показывают, что вы можете сделать с книгой.
Примечание. Чтобы попробовать этот пример, создайте две открытые книги с именами Тест1.xlsx и Тест2.xlsx.
Примечание: в примерах кода я часто использую Debug.Print. Эта функция печатает значения в Immediate Window. Для просмотра этого окна выберите View-> Immediate Window из меню (сочетание клавиш Ctrl + G)
Доступ к рабочей книге VBA по индексу
Вы также можете использовать индексный номер с книгами (). Индекс относится к порядку, в котором книга была открыта или создана.
Workbooks (1) относится к книге, которая была открыта первой. Workbooks (2) относится к рабочей книге, которая была открыта второй и так далее.
В этом примере мы использовали Workbooks.Count. Это количество рабочих книг, которые в настоящее время находятся в коллекции рабочих книг. То есть количество рабочих книг, открытых на данный момент. Таким образом, использование его в качестве индекса дает нам последнюю книгу, которая была открыта
Использование индекса не очень полезно, если вам не нужно знать порядок. По этой причине вам следует избегать его использования. Вместо этого вы должны использовать имя рабочей книги вместе с Workbooks ().
Поиск всех открытых рабочих книг
Иногда вы можете получить доступ ко всем рабочим книгам, которые открыты. Другими словами, все элементы в коллекции Workbooks ().
Вы можете сделать это, используя цикл For Each.
Вы также можете использовать стандартный цикл For для доступа ко всем открытым рабочим книгам.
Для доступа к книгам подходит любой из этих циклов. Стандартный цикл For полезен, если вы хотите использовать другой порядок или вам нужно использовать счетчик.
Примечание. Оба примера читаются в порядке с первого открытого до последнего открытого. Если вы хотите читать в обратном порядке (с последнего на первое), вы можете сделать это
Открыть рабочую книгу
До сих пор мы имели дело с рабочими книгами, которые уже открыты. Конечно, необходимость вручную открывать рабочую книгу перед запуском макроса не позволяет автоматизировать задачи. Задание «Открыть рабочую книгу» должно выполняться VBA.
Следующий код VBA открывает книгу «Книга1.xlsm» в папке «C: Документы»
Рекомендуется проверить, действительно ли существует книга, прежде чем открывать ее. Это предотвратит ваши ошибки. Функция Dir позволяет вам легко это сделать.
Проверить открыта ли книга
Если вы открываете книгу только для чтения, то не имеет значения, открыта ли она уже. Тем не менее, если вы собираетесь обновить данные в рабочей книге, рекомендуется проверить, открыты ли они.
Приведенную ниже функцию можно использовать для проверки, открыта ли книга в данный момент. Если нет, то откроется рабочая книга. В любом случае вы получите открытую рабочую книгу.
Вы можете использовать эту функцию так:
Этот код хорош в большинстве ситуаций. Однако, если рабочая книга может быть открыта в режиме только для чтения или может быть открыта в данный момент другим пользователем, возможно, вы захотите использовать немного другой подход.
Простой способ справиться с этим в этом сценарии состоит в том, чтобы настаивать на том, что файл должен быть закрыт для успешного запуска приложения. Вы можете использовать функцию ниже, чтобы просто проверить, открыт ли уже файл, и если это так, сообщить пользователю, что он должен быть закрыт в первую очередь.
Пример использования этой функции показан ниже. В этом случае, если рабочая книга уже открыта, вы сообщаете пользователю, что она должна быть закрыта для продолжения макроса.
Если вам нужно проверить, открыта ли книга в другом экземпляре Excel, вы можете использовать атрибут ReadOnly книги. Будет установлено значение true, если оно открыто в другом экземпляре.
Закрыть книгу
Закрыть книгу в Excel VBA очень просто. Вы просто вызываете метод Close рабочей книги.
Обычно, когда вы закрываете книгу в VBA, вы не хотите видеть сообщения из Excel, спрашивающие, хотите ли вы сохранить файл.
Вы можете указать, сохранять ли книгу или нет, и тогда сообщения Excel не будут появляться.
Очевидно, что вы не можете сохранить изменения в книге, которая в данный момент открыта только для чтения.
Сохранить книгу
Мы только что видели, что вы можете сохранить книгу, когда закроете ее. Если вы хотите сохранить его на любом другом этапе, вы можете просто использовать метод Save.
Вы также можете использовать метод SaveAs
Метод WorkAs SaveAs поставляется с двенадцатью параметрами, которые позволяют вам добавить пароль, установить файл только для чтения и так далее. Вы можете увидеть детали здесь.
Вы также можете использовать VBA для сохранения книги в виде копии с помощью SaveCopyAs.
Копировать книгу
Если рабочая книга открыта, вы можете использовать два метода в приведенном выше разделе для создания копии, т.е. SaveAs и SaveCopyAs.
Если вы хотите скопировать книгу, не открывая ее, вы можете использовать FileCopy, как показано в следующем примере:
Использование диалогового окна «Файл» для открытия рабочей книги
В предыдущем разделе показано, как открыть книгу с заданным именем. Иногда вам может понадобиться, чтобы пользователь выбрал рабочую книгу. Вы можете легко использовать Windows File Dialog.
FileDialog настраивается, и вы можете использовать его так:
- Выберите файл.
- Выберите папку.
- Откройте файл.
- «Сохранить как» файл.
Если вы просто хотите, чтобы пользователь выбрал файл, вы можете использовать функцию GetOpenFilename.
Следующая функция открывает книгу с помощью диалога файлов. Функция возвращает полное имя файла, если файл был выбран. Если пользователь отменяет, он отображает сообщение и возвращает пустую строку.
Когда вы вызываете эту функцию, вы должны проверить, отменяет ли пользователь диалог.
В следующем примере показано, как легко вызвать функцию UserSelectWorkbook и обработать случай отмены пользователя.
Вы можете настроить диалог, изменив Title, Filters и AllowMultiSelect в функции UserSelectWorkbook.
Использование ThisWorkbook
Существует более простой способ доступа к текущей книге, чем использование Workbooks() . Вы можете использовать ключевое слово ThisWorkbook. Это относится к текущей книге, то есть к книге, содержащей код VBA.
Если наш код находится в книге, называемой МойVBA.xlsm, то ThisWorkbook и Workbooks («МойVBA.xlsm») ссылаются на одну и ту же книгу.
Использование ThisWorkbook более полезно, чем использование Workbooks (). С ThisWorkbook нам не нужно беспокоиться об имени файла. Это дает нам два преимущества:
- Изменение имени файла не повлияет на код
- Копирование кода в другую рабочую книгу не требует изменения кода
Это может показаться очень маленьким преимуществом. Реальность такова, что имена будут меняться все время. Использование ThisWorkbook означает, что ваш код будет работать нормально.
В следующем примере показаны две строки кода. Один с помощью ThisWorkbook, другой с помощью Workbooks (). Тот, который использует Workbooks, больше не будет работать, если имя МойVBA.xlsm изменится.
Использование ActiveWorkbook
ActiveWorkbook относится к книге, которая в данный момент активна. Это тот, который пользователь последний раз щелкнул.
Поначалу это может показаться полезным. Проблема в том, что любая рабочая книга может стать активной простым щелчком мыши. Это означает, что вы можете легко записать данные не в ту книгу.
Использование ActiveWorkbook также затрудняет чтение кода. Из кода может быть не очевидно, какая книга должна быть активной.
Надеюсь, я дал понять, что вам следует избегать использования ActiveWorkbook, если в этом нет необходимости. Если вы должны быть очень осторожны.
Примеры доступа к книге
Мы рассмотрели все способы доступа к книге. Следующий код показывает примеры этих способов.
Объявление переменной VBA Workbook
Причина объявления переменной книги состоит в том, чтобы сделать ваш код более легким для чтения и понимания. Проще увидеть преимущество на примере:
Вы можете установить переменную книги с помощью любого из методов доступа, которые мы видели.
Ниже показан тот же код без переменной рабочей книги.
В этих примерах разница несущественная. Однако, когда у вас много кода, использование переменной полезно, в частности, для рабочего листа и диапазонов, где имена имеют тенденцию быть длинными, например thisWorkbook.Worksheets («Лист1»). Range («A1»).
Вы можете назвать переменную книги как wrkRead или wrkWrite. Затем вы можете сразу увидеть, для чего используется эта книга.
Создать новую книгу
Для создания новой рабочей книги вы используете функцию добавления рабочих книг. Эта функция создает новую пустую книгу. Это то же самое, что выбрать «Новая книга» в меню «Файл Excel».
Когда вы создаете новую книгу, вы, как правило, хотите сохранить ее. Следующий код показывает вам, как это сделать.
Когда вы создаете новую книгу, она обычно содержит три листа. Это определяется свойством Application.SheetsInNewWorkbook.
Если вы хотите, чтобы в новой книге было другое количество листов, измените это свойство перед созданием новой книги. В следующем примере показано, как создать новую книгу с семью листами.
With и Workbook
Ключевое слово With облегчает чтение и написание кода VBA. Использование с означает, что вам нужно упомянуть только один раз. С используется с объектами. Это такие элементы, как рабочие книги, рабочие таблицы и диапазоны.
В следующем примере есть два Subs. Первый похож на код, который мы видели до сих пор. Второй использует ключевое слово With. Вы можете увидеть код гораздо понятнее во втором Sub. Ключевые слова End With обозначают конец кода раздела с помощью With.
Резюме
Ниже приводится краткое изложение основных моментов этой статьи.
- Чтобы получить рабочую книгу, содержащую код, используйте ThisWorkbook.
- Чтобы получить любую открытую книгу, используйте Workbooks («Пример.xlsx»).
- Чтобы открыть книгу, используйте Set Wrk = Workbooks.Open («C: Папка Пример.xlsx»).
- Разрешить пользователю выбирать файл с помощью функции UserSelectWorkbook, представленной выше.
- Чтобы создать копию открытой книги, используйте свойство SaveAs с именем файла.
- Чтобы создать копию рабочей книги без открытия, используйте функцию FileCopy.
- Чтобы ваш код было легче читать и писать, используйте ключевое слово With.
- Другой способ прояснить ваш код — использовать переменные Workbook.
- Чтобы просмотреть все открытые рабочие книги, используйте For Every wk в Workbooks, где wk — это переменная рабочей книги.
- Старайтесь избегать использования ActiveWorkbook и Workbooks (Index), поскольку их ссылка на рабочую книгу носит временный характер.
Вы можете увидеть краткое руководство по теме в верхней части этой статьи
Заключение
Это был подробная статья об очень важном элементе VBA — Рабочей книги. Я надеюсь, что вы нашли ее полезной. Excel отлично справляется со многими способами выполнения подобных действий, но недостатком является то, что иногда он может привести к путанице.
Чтобы получить максимальную пользу от этой статьи, я рекомендую вам попробовать примеры. Создайте несколько книг и поиграйтесь с кодом. Внесите изменения в код и посмотрите, как эти изменения влияют на результат. Практика — лучший способ выучить VBA.
Источник
-
#1
Hi All,
I need to return the name of an active workbook, but I cannot use ThisWorkbook because my code resides in an add-in.
I have managed to make a function to accomplish this, but it seems messier than it ought to be. Does any one know of a slicker way to do this?
I’m using Excel 2010 and windows 7
The code for my current function is below:
Function GetBook(myRange As Range) As String
‘ Returns name of the workbook in which a range is located as a String.
Dim address As String
Dim nameSplit As Variant
Dim bookName As String
address = myRange.address(external:=True)
nameSplit = Split(address, «]»)
bookName = Replace(nameSplit(0), «‘», «», 1)
GetBook = Replace(bookName, «[«, «», 1)
End Function
Thanks,
Nolan