Открытие книги Excel из кода VBA. Проверка существования книги. Создание новой книги, обращение к открытой книге и ее закрытие. Методы Open, Add и Close.
Открытие существующей книги
Существующая книга открывается из кода VBA Excel с помощью метода Open:
Workbooks.Open Filename:=«D:test1.xls» |
или
Workbooks.Open («D:test1.xls») |
В кавычках указывается полный путь к открываемому файлу Excel. Если такой файл не существует, произойдет ошибка.
Проверка существования файла
Проверить существование файла можно с помощью функции Dir. Проверка существования книги Excel:
If Dir(«D:test1.xls») = «» Then MsgBox «Файл не существует» Else MsgBox «Файл существует» End If |
Или, если файл (книга Excel) существует, можно сразу его открыть:
If Dir(«D:test1.xls») = «» Then MsgBox «Файл не существует» Else Workbooks.Open Filename:=«D:test1.xls» End If |
Создание новой книги
Новая рабочая книга Excel создается в VBA с помощью метода Add:
Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:
Workbooks.Add ActiveWorkbook.SaveAs Filename:=«D:test2.xls» |
В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере — это «test2.xls».
Обращение к открытой книге
Обращение к активной книге:
Обращение к книге с выполняемым кодом:
Обращение к книге по имени:
Workbooks(«test1.xls») Workbooks(«test2.xls») |
Обратиться по имени можно только к уже открытой книге, а чтобы из кода VBA Excel книгу открыть, необходимо указать полный путь к файлу.
Открытая рабочая книга закрывается из кода VBA Excel с помощью метода Close:
Workbooks(«test1.xlsx»).Close |
Если закрываемая книга редактировалась, а внесенные изменения не были сохранены, тогда при ее закрытии Excel отобразит диалоговое окно с вопросом: Вы хотите сохранить изменения в файле test1.xlsx? Чтобы файл был закрыт без сохранения изменений и вывода диалогового окна, можно воспользоваться параметром метода Close — SaveChanges:
Workbooks(«test1.xlsx»).Close SaveChanges:=False |
или
Workbooks(«test1.xlsx»).Close (False) |
Закрыть книгу Excel из кода VBA с сохранением внесенных изменений можно также с помощью параметра SaveChanges:
Workbooks(«test1.xlsx»).Close SaveChanges:=True |
или
Workbooks(«test1.xlsx»).Close (True) |
Фразы для контекстного поиска: открыть книгу, открытие книги, создать книгу, создание книги, закрыть книгу, закрытие книги, открыть файл Excel, открытие файла Excel, существование книги, обратиться к открытой книге.
deathogre Пользователь Сообщений: 14 |
Здрасьте. Как программно открыть книгу эксель и сохранить эту книгу (объект) в глобальной переменной? |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#2 13.02.2016 13:53:37 1. Открытие нужной книги запишите макрорекордером — получите готовый код.
|
||
Hugo Пользователь Сообщений: 23253 |
#3 13.02.2016 13:53:58
|
||
deathogre Пользователь Сообщений: 14 |
Мне нужно открыть книгу из другой книги |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#5 13.02.2016 13:55:02
И что? |
||
deathogre Пользователь Сообщений: 14 |
#6 13.02.2016 14:02:59 Объявил глобальную переменную в модуле ЭтаКнига
открыл книгу в модуле АктивХ формы
выдает ошибку на 3 строке, Run-time error 9 Subscript out of range |
||||
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Глобальную переменную в стандартный модуль — будет доступна всюду. И модуль не нужно указывать. |
deathogre Пользователь Сообщений: 14 |
Мне нужно в открытую книгу писать изменения, через глобальную переменную хочу обращаться к этой книге |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#9 13.02.2016 14:21:54 Обращайтесь — кто мешает? )
|
||
KL Пользователь Сообщений: 2186 |
#10 13.02.2016 14:53:27 Или даже так:
KL |
||
KL Пользователь Сообщений: 2186 |
Кстати, ChDir для открытия книги таким способом не нужен. Он нужен для функции GetOpenFileName, которая, кстати, тоже уже не нужна, т.к. уже давно есть Application.FileDialog(msoFileDialogOpen) |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Кирилл, а рекордер упорно пишет ChDir )) |
KL Пользователь Сообщений: 2186 |
Юр, ну мало ли что на заборах пишут. Рекордер еще и Select обожает |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#14 13.02.2016 15:16:46 )) |
Visual Basic for Applications (VBA) is a frequently used utility for Microsoft applications — including Microsoft Excel, Office, PowerPoint, Word, and Publisher. As VBA is a fairly complicated language to learn, much has been written about it and its capabilities (and if you want to learn more about VBA and Excel, you can read about it here).
One of the most basic tasks you can use VBA for is to open and manipulate files, such as an Excel file. VBA open files will open the Excel file — from there you can control how it is read and written. Commonly, you would use VBA code to open the file, and then use Excel VBA macros to write to the file.
Let’s take a deeper look into how VBA open files can be used with an Excel Workbook.
What is VBA Open Files and how does it work?
VBA is extremely similar to Visual Basic, a programming language used within the Microsoft ecosystem. It is used to create “macros.” A macro is a sequence of automated events which can fine-tune, optimize, automate, and improve your operations. The Excel VBA implementation can open files and run macros on them.
In Excel, you use VBA by inserting the code in the Visual Basic Editor. You can also choose the “Macro” button on the Developer Tab. From there, you will enter in code as though programming.
Before you start digging into VBA, you should have some understanding of programming. Programming means directing a computer to perform a certain sequence of events. Keep a few things in mind:
- You should always test your programming thoroughly to make sure it does what you want it to do.
- You should never implement your programming in a “live” environment with important data rather than test data.
- You should save your work frequently and you should be prepared to restore both your programming and your data if needed.
Running the macros you program
When macros are created, they’re assigned to given keypresses. Sometimes this is a combination of keys, and sometimes it’s an extra mouse button. Regardless, they’re intended to set off an automated chain of events whenever you do the given action (whether it’s pressing a key on your keyboard, or a button on your mouse). You can also run a macro manually by selecting it.
So, when you run a macro, you have Microsoft Excel already open. The macro runs within Excel, and you will do all your VBA programming inside of that program. Likewise, you will do your Microsoft Word VBA programming inside of Microsoft Word.
Opening an Excel file with VBA
The first step to updating, modifying, and saving Excel files is to be able to open them. To open an Excel file with VBA you would program as follows:
Sub openworksheet()
Workbooks.Open filename:= _ “filepath”
End sub
The “sub” above is a lot like a function. It creates a small amount of code that is intended to take action. It begins with “Sub” and ends with “End Sub.”
In the above code, note that the italicized “filepath” references the full path of the workbook. Without the appropriate Workbooks.Open filename, you won’t be able to open the given file. You will also need the appropriate file type (Microsoft Excel, which is either XLS or XLSX) or the open method will fail.
Of course, the above assumes that you are always going to be opening the Workbook at the “filepath.” You might also want to open any file at all. You can create a macro that opens a dialog, through which you can select any file.
Sub openworksheet()
Dim Flocation as Variant
Flocation = Application.GetOpenFileName()
If Flocation <> false then
Workbooks.Open Filename:= Flocation
End If
End Sub
The above code prompts the user to give a file name. If the user does give a file name (the variable, Flocation is no longer false), then the program will open that file.
Also note that Flocation is just the name of the variable that’s being used. You could call it something else; in fact, you could even call it just “f.” All that’s important is that you don’t use a word that the code already uses, such as “Variant” or “Filename.”
You might also be wondering why this code is so important. After all, you can open your own files at any time. But you can bind it to a specific keypress, making it a macro. So, now, typing something like “F8” will automatically open the “open a file” dialog.
But once you’ve automatically opened a file, what’s next? Generally, opening the file is only the first step. Once you’ve opened the Excel file, you still need to be able to read and write to it.
Reading the Excel file
You’ve opened your Excel file. But what’s inside of it? Luckily for you, it’s pretty easy to start reading an Excel file once you’ve opened it with VBA.
First, you should know that when you open a file, it becomes the ActiveWorkbook, which can be referenced in code as “ActiveWorkbook.”
Let’s say you want to read the first cell of the book.
Dim contents As Integer
contents = ActiveWorkbook.Range(“A1”).value
Now, that does assume that the cell is an Integer. You would need to change it to a String if you were reading a string, or a Date if you were reading a Date. Consequently, you need to be really familiar with the type of data you’re reading before you go any further.
Now, note that this is reading the contents of the cell into just a variable. That’s not displaying it. That’s not doing anything with it at all. If you wanted to see, perhaps, what the contents were, you would then type:
MsgBox contents
Alternatively, you could:
MsgBox ActiveWorkbook.Range(“A1”).value
Either of these options should display the value. But, of course, it’s a static value; it’s always going to display A1. So, you might need to code things a little more expressively if you’re trying to read the entirety of a document, or if you’re trying to transition one document to another.
Writing to the file
So, you have your workbook open through the power of VBA. But now you want to write to the file. Writing can be used in tandem with reading; once the Workbook is open you could do both.
As an example, you could write a macro that would open a Workbook and copy one column to another column, by reading the data in the first column and then writing that data to the second column.
Similarly, you could write a macro that would open two Workbooks and copy data from one to another, and then save both Workbooks, and then close both Workbooks.
As mentioned, once you open a workbook with VBA, the workbook that you opened becomes the ActiveWorkbook. This also happens if you have created a new workbook within VBA.
You can then access its data through:
ActiveWorkbook.Sheets
ActiveWorbook.Cells
As an example, if you wanted to edit the cell at column 1, row 1, on Sheet 1, you would write as follows:
ActiveWorkbook.Sheets(“Sheet 1”).Cells(1,1).Value= “1”
If this is confusing, you can also use the “Range” field.
ActiveWorkbook.Sheets(“Sheet 1”).Range(“A1”).Value= “1”
The above would have the same result.
Writing to a sheet can become very complex. Consider that, when you’re writing the macro system, you don’t know what data is in those cells. You only know their positions. You’re essentially writing to that position blindly.
Macros are frequently used to do things such as read CSV files and import that CSV information into a brand new Microsoft Excel workbook. But it takes a lot of time and a lot of testing to ensure that the data is going through correctly.
In the above case, you’re only altering range A1. But you could iterate through all the rows and columns of a workbook one by one if you were trying to fill it out line by line. As you learn more about Excel and VBA, you will learn more advanced methods of both reading and writing data.
Saving the Excel workbook file
Just like when you’re using Excel regularly, you still need to save your changes. If you have opened and changed a Workbook, save it before you close it.
ActiveWorkbook.Save
You could even write a Macro that would save all your workbooks and close them, as follows:
For each workbook in Application.Workbooks
workbook.Save
Next workbook
Application.Quit
The above code iterates through each Workbook saving it until it cannot find a Workbook anymore. Once it can no longer find a Workbook, it quits the application. This is very useful for those who want to shut down fast and have a lot of workbooks left to save.
Closing the selected file
Closing the file is just as easy as opening a workbook. In fact, it’s actually easier, because you don’t need to know the file name. VBA already knows which file it has opened.
To close the Excel file you would type:
ActiveWorkbook.Close
On the other hand, perhaps you wanted to close a specific Workbook. In that case, you would use the following:
Workbooks(“book.xlsx”).Close
This is under the assumption the book was called “book.xlsx”; you would replace the given name for your sheet. Once you have closed the Workbook, you will not be able to make any further modifications to it until you open it again.
Opening a Microsoft Excel workbook that is password protected
Sometimes you may have password-protected your workbooks. That goes into more complicated territory. Understandably, it’s not going to open if you just try to directly open it.
But you can still open it with VBA.
Workbooks.Open(filename:= “filename”, Password:= “password”)
As you can see above, you just added the password directly into the macro. Now the file is going to open just fine.
But there’s a problem with the above, which (if you’re good with security) you already know. You just saved your password as plain text!
Now, anyone with access to your computer could potentially open that file without knowing the password. And if you’ve been using that password for multiple files (a big no-no), they could be compromised, too.
So, VBA does provide a method of opening files that have a password. But it’s not a good method because of the above reasons. It means that your system could be compromised. If you just have a password to prevent outside intrusion (the file being sent somewhere else and opened by an outsider), this may not be a problem. But if you’re trying to protect your file internally as well as externally, it can be a major issue.
The alternative is to use the previous method of opening a file with a dialogue box. When you press a button (or otherwise launch your macro), you’ll be given a dialogue box, and you’ll be able to open whatever file you want. Your macro can then continue actions on the file after you have manually entered your password.
Opening a read-only file
Some Microsoft Excel files don’t have a password when you open them. Instead, they are set to read-only. If they’re set to read-only, you’ll be able to open and read from them. But you won’t be able to actually write to them without a secondary password.
ActiveWorkbook.Password = “password”
Above is the method that you would call after you’ve opened the book so that you can start to write to it. You wouldn’t include the password when opening the file, because you wouldn’t have been prompted for it then.
The benefits of using Excel VBA Open
VBA is used to automate routine, mundane tasks, such as copying large volumes of data from one book to another. Any time you’re finding yourself spending hours just copying and pasting data, or running fairly mundane calculations, a macro can help.
You can also use VBA to automate smaller tasks that you find use a lot of keypresses. If you find yourself frequently needing to open the same 10 Excel Workbooks at once, for instance, you can create a macro that will open all of them on a single keypress, and close them all, too.
While it may only save you a few minutes of time, those minutes of time add up.
Potential issues with Excel VBA Open
It’s possible to run into issues with VBA open. If you have a protected workbook, you won’t be able to open it without the password (as noted). If you don’t have the password, you aren’t going to be able to open the file.
If the selected file is read-only, you aren’t going to be able to write to it without the right permissions. If you don’t realize that the file is read-only, you could try writing to it only for the action to fail.
And because you can’t always see what the macro is doing until you run it, you can potentially overwrite data or delete it altogether. This is why it’s always important to test your macros with test data before trying to implement it with live data.
But even so, Excel VBA open is a robust language. Most common activities with Workbooks (such as opening, closing, reading, writing, and saving) can be completed quite intuitively and often with a single line of code.
Learning more about Excel VBA
In the right hands, VBA is very powerful. If you have any automated, routine tasks in Excel, consider automating them with Excel VBA. Even better, once you learn the basics of VBA, you can also use it in other Microsoft applications such as Microsoft Word.
Still, powerful also means that mistakes can be made. Because VBA can open files and write to them, it’s also possible that it can overwrite data. This is why testing your programming is so important.
Frequently Asked Questions:
Can a macro open a file?
The Excel Macro can be used to prompt a user to open a file or to open a specific file (given the entire filename).
How do I open a text file in Excel VBA?
The VBA OpenTextFile method can be used to open a text file, just as the VBA Workbooks.Open method is used to open an Excel file.
How do I open a new workbook in VBA?
To open a new workbook in VBA, you would use the Workbooks.Add() VBA function. This function both creates a new workbook and prioritizes it as the active workbook.
Задача по объединению данных из нескольких Excel-файлов, или подгрузка доп.данных из внешнего файла решается достаточно просто: создается объект Excel, который можно скрыть визуально, затем открывается необходимый файл и выполняются нужные действия. Просто приведу несколько примеров.
Открытие файла Excel
Set objExcel = New Excel.Application objExcel.Visible = False Set wb = objExcel.Workbooks.Open(fname) Set ws = wb.Sheets(1)
В первой строке запускаем новый Excel, затем делаем его невидимым, в 3-й строке открываем файл fname. В последней строке получаем первый лист открытого excel-кого файла.
Альтернативный вариант открытия файла
Set objExcel = New Excel.Application Set wb = objExcel.Workbooks wb.Open fname, local:=True Set ws = wb.Item(1).ActiveSheet
При открытии файла можно использовать доп.параметры (приведу некоторые):
UpdateLinks — обновлять или нет внешние ссылки при открытии файла;
ReadOnly — открытие в режиме только для чтения;
Format — используемый при открытии разделитель (1 — символ tab, 2 — запятые, 3 — пробелы, 4 — точка с запятой, 5 — без разделителя, 6 — пользовательский разделитель, заданный в Delimiter);
Delimiter — пользовательский разделитель (в случае, если Format = 6);
Origin — тип операционной системы (xlMacintosh, xlWindows или xlMSDOS);
Local — использование в Excel языка такого же, как в открываемом файле.
Теперь можно выполнять какие-то действия с открытым файлом, просто обращаясь через wb и ws.
ws.Cells(1, 1).Value = "Test" ws.Cells(1, 1).Font.Size = 18 ' Поменять размер шрифта ws.Cells(1, 1).HorizontalAlignment = xlCenter '
Записать книгу и закрыть
wb.Save ' Записать с тем же именем wb.SaveAs Filename:="имя_нового_файла", FileFormat:=xlOpenXMLWorkbookMacroEnabled ' Записать в новый файл wb.Close ' Закрыть книгу
Для записи текущей книги (где находится макрос), можно использовать:
ActiveWorkbook.SaveAs
Чтобы сохранить или перезаписать книгу Excel без вопросов, можно применить такой вариант:
Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="c:Temp001.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled Application.DisplayAlerts = True
У метода SaveAs есть несколько параметров сохранения, с ними можно ознакомиться на сайте Microsoft.
Если нужно, можно закрыть книгу Excel без сохранения изменений таким образом:
wb.Close False
Содержание
- 1 Открытие существующей книги
- 2 Создание новой книги
- 3 Обращение к открытой книге
- 4 Как закрыть книгу Excel из кода VBA
- 4.1 Сохранение всех рабочих книг
- 4.2 Сохранение и закрытие всех рабочих книг
- 4.3 Частичное сокрытие элементов рабочего листа
- 4.4 Синхронизация выделенного диапазона на листах рабочей книги
- 4.5 Решение(ия):
- 5 Создать новую книгу в Excel VBA — примеры:
-
-
- 5.0.0.1 Создать новую книгу
- 5.0.0.2 Создание объекта для вновь созданной книги
-
-
Открытие книги Excel из кода VBA. Создание новой книги, присвоение ей имени. Обращение к открытой книге и закрытие. Методы Open, Add и Close объекта Workbooks.
- Открытие существующей книги
- Создание новой книги
- Обращение к открытой книге
- Как закрыть книгу Excel из кода VBA
Открытие существующей книги
Существующая книга открывается из кода VBA Excel с помощью метода Open:
Workbooks.Open Filename:="D:test1.xls"
или
Workbooks.Open ("D:test1.xls")
В кавычках указывается полный путь к открываемому файлу Excel. Если такой файл не существует, произойдет ошибка.
Проверить существование файла можно с помощью функции Dir:
If Dir("D:test1.xls") = "" Then MsgBox "Файл не существует" Else MsgBox "Файл существует" End If
Или, если файл существует, можно сразу его открыть:
If Dir("D:test1.xls") = "" Then MsgBox "Файл не существует" Else Workbooks.Open Filename:="D:test1.xls" End If
Создание новой книги
Новая рабочая книга Excel создается в VBA с помощью метода Add:
Workbooks.Add
Созданную книгу, если она не будет использоваться как временная, лучше сразу сохранить:
Workbooks.Add ActiveWorkbook.SaveAs Filename:="D:test2.xls"
В кавычках указывается полный путь сохраняемого файла Excel, включая присваиваемое имя, в примере — это «test2.xls».
Обращение к открытой книге
Обращение к активной книге:
ActiveWorkbook
Обращение к книге с выполняемым кодом:
ThisWorkbook
Обращение к книге по имени:
Workbooks("test1.xls") Workbooks("test2.xls")
Обратиться по имени можно только к уже открытой книге, а чтобы из кода VBA Excel книгу открыть, необходимо указать полный путь к файлу.
Открытая рабочая книга закрывается из кода VBA Excel с помощью метода Close:
Workbooks("test1.xlsx").Close
Если закрываемая книга редактировалась, а внесенные изменения не были сохранены, тогда при ее закрытии Excel отобразит диалоговое окно с вопросом: Вы хотите сохранить изменения в файле test1.xlsx? Чтобы файл был закрыт без сохранения изменений и вывода диалогового окна, можно воспользоваться параметром метода Close — SaveChanges:
Workbooks("test1.xlsx").Close SaveChanges:=False
или
Workbooks("test1.xlsx").Close (False)
Закрыть книгу Excel из кода VBA с сохранением внесенных изменений можно также с помощью параметра SaveChanges:
Workbooks("test1.xlsx").Close SaveChanges:=True
или
Workbooks("test1.xlsx").Close (True)
Настоящая заметка продолжает знакомство с VBA, в ней приводятся примеры управления рабочими книгами и листами Excel с помощью VBA.
Рис. 1. Столбцы и строки скрыты за исключением рабочего диапазона
Скачать заметку в формате Word или pdf, примеры в архиве (политика безопасности провайдера не позволяет загружать файлы Excel с поддержкой макросов)
Сохранение всех рабочих книг
Следующая процедура циклически просматривает все рабочие книги в коллекции Workbooks и сохраняет каждый файл, который сохранялся ранее.
Public Sub SaveAllWorkbooks()
Dim Book As Workbook
For Each Book In Workbooks
If Book.Path "
"
Then Book.Save
Next Book
End Sub
Обратите внимание на то, как используется свойство Path. Если для какой-либо рабочей книги свойство Path не задано, значит, файл еще не сохранялся (это новая рабочая книга). Данная процедура игнорирует такие рабочие книги и сохраняет только те из них, свойство Path которых имеет ненулевое значение.
Сохранение и закрытие всех рабочих книг
Следующая процедура циклически просматривает коллекцию Workbooks. Программа сохраняет и закрывает все рабочие книги.
Sub CloseAllWorkbooks()
Dim Book As Workbook
For Each Book In Workbooks
If Book.Name ThisWorkbook.Name Then
Book.Close savechanges:=True
End If
Next Book
ThisWorkbook.Close savechanges:=True
End Sub
Обратите внимание, что процедура использует оператор If, чтобы определить, содержит ли данная рабочая книга текущий выполняемый код. Это необходимо, так как при закрытии рабочей книги, содержащей процедуру, программа автоматически завершает свое выполнение, причем остальные рабочие книги не будут сохранены и закрыты.
Частичное сокрытие элементов рабочего листа
В примере из этого раздела скрываются все строки и столбцы рабочего листа за исключением тех из них, которые находятся в текущем выделенном диапазоне (рис. 1).
Sub HideRowsAndColumns()
Dim row1 As Long, row2 As Long
Dim col1 As Long, col2 As Long
If TypeName(Selection) "
Range"
Then Exit Sub'
Если последняя строка либо последний столбец скрыты,'
отобразить все и выйти
If Rows(Rows.Count).EntireRow.Hidden Or _
Columns(Columns.Count).EntireColumn.Hidden Then
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
Exit Sub
End If
row1 = Selection.Rows(1).Row
row2 = row1 + Selection.Rows.Count — 1
col1 = Selection.Columns(1).Column
col2 = col1 + Selection.Columns.Count — 1
Application.ScreenUpdating = False
On Error Resume Next'
Скрыть строки
Range(Cells(1, 1), Cells(row1 — 1, 1)).EntireRow.Hidden = True
Range(Cells(row2 + 1, 1), Cells(Rows.Count, _
1)).EntireRow.Hidden = True'
Скрыть столбцы
Range(Cells(1, 1), Cells(1, col1 — 1)).EntireColumn.Hidden = True
Range(Cells(1, col2 + 1), Cells(1, _
Columns.Count)).EntireColumn.Hidden = True
End Sub
Чтобы показать все строки и столбцы, встаньте на перекрестие строк и столбцов (выделено красным на рис. 1), и пройдите по меню: Главная –> Ячейки –> Формат –> Скрыть или отобразить –> Отобразить строки. Повторите этот путь, чтобы отобразить столбцы (рис. 2).
Рис. 2. Показать все строки и столбцы
Если выделенный диапазон включает несвязанные диапазоны, видимым останется только первый из них.
Синхронизация выделенного диапазона на листах рабочей книги
Если вы работаете с рабочими книгами, состоящими из нескольких листов, то, вероятно, знаете, что Excel не может «синхронизировать» листы в рабочей книге. Другими словами, не существует автоматического способа сделать так, чтобы все листы имели одинаковые выделенные диапазоны и верхние левые ячейки. Макрос VBA, показанный ниже, берет за основу активный рабочий лист и выполняет следующие действия со всеми остальными рабочими листами в книге:
- выделяет тот же диапазон, что и в активном листе;
- задает ту же левую верхнюю ячейку, что и на активном листе (рис. 3).
Рис. 3. Синхронизация выделенного диапазона на листах рабочей книги
Sub SynchSheets()'
Дублирование выделенного диапазона активного листа'
и верхней левой ячейки активного диапазона на всех листах
If TypeName(ActiveSheet) "
Worksheet"
Then Exit Sub
Dim UserSheet As Worksheet, sht As Worksheet
Dim TopRow As Long, LeftCol As Integer
Dim UserSel As String
Application.ScreenUpdating = False'
Запоминание текущего листа
Set UserSheet = ActiveSheet'
Сохранение сведений об активной ячейке
TopRow = ActiveWindow.ScrollRow
LeftCol = ActiveWindow.ScrollColumn
UserSel = ActiveWindow.RangeSelection.Address'
Циклический обход рабочих листов
For Each sht In ActiveWorkbook.Worksheets
If sht.Visible Then '
пропуск скрытых листов
sht.Activate
Range(UserSel).Select
ActiveWindow.ScrollRow = TopRow
ActiveWindow.ScrollColumn = LeftCol
End If
Next sht'
Восстановление исходного положения
UserSheet.Activate
Application.ScreenUpdating = True
End Sub
По материалам книги Джон Уокенбах. Excel 2010. Профессиональное программирование на VBA. – М: Диалектика, 2013. – С. 348–351.
Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код VBA.
Sub Название_Макроса() 'Выделить диапазон который необходимо скопировать Range("A1:F52").Select 'Скопировать то, что выделено Selection.Copy ChDir "путь к папке где лежит файл в который необходимо скопировать" Workbooks.Open Filename:= "Название файла, который находится в папке, путь к которой указан выше" 'Выделить начальную ячейку в которую необходимо вставить скопированные данные Range("A6").Select 'Вставить данные ActiveSheet.Paste 'сохранить текущую книгу ActiveWorkbook.Save 'Закрыть книгу ActiveWorkbook.Close End Sub
Вариант 2: В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, скопировал от туда нужные нам данные и вставил в нашу открытую книгу, закрыв файл из которого эти данные были скопированы
Sub Название_Макроса2() 'Открываем файл с которого нужно скопировать данные Workbooks.Open Filename:="C:Данные.xlsx" 'Скопировать нужный диапазон в открывшейся книге на листе 1 Workbooks("Данные.xlsx").Worksheets("Лист1").Range("A16:E16").Copy 'Активируем нужную нам книгу Workbooks("Книга1.xlsm").Activate 'Выделяем и вставляем скопированные данные в ячейку А1 ActiveWorkbook.Worksheets("Лист1").Range("A1").Select ActiveSheet.Paste 'Закрываем книгу откуда мы скопировали данные Workbooks("Данные.xlsx").Close End Sub
Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.
Sub Копируем_листы_в_другую_книгу() Dim bookconst As Workbook Dim abook As Workbook Set abook = ActiveWorkbook 'присваиваем перменную активной книге Set bookconst = Workbooks.Open("C:UsersUserDesktop1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные 'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("Лист1").Activate Range("A1:I23").Copy 'копируем определенный диапазон листа, укажите свой диапазон bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные Range("A1:I23").Select 'встаем на ячейку А1 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'второй лист abook.Worksheets("Лист2").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист2").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'третий лист abook.Worksheets("Лист3").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист3").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'сохранить текущую книгу bookconst.Save 'Закрыть книгу bookconst.Close abook.Activate End Sub
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.
Спасибо за внимание.
Иногда мы можем захотеть открыть или создать новую книгу с помощью VBA. Вы можете установить новую созданную книгу на объект, чтобы было легко сослаться на вашу книгу для выполнения дальнейших задач.
Решение(ия):
Следующие макросы позволят открыть или создать новую книгу с помощью метода Добавить.
Создать новую книгу в Excel VBA — примеры:
- Создать новую книгу
- Создание объекта для вновь созданной рабочей книги
Создать новую книгу
Вы можете использовать следующий код для создания новой книги и сохранения на диске C с помощью метода «Добавить».
Код:
Sub AddNewWorkbook1() 'Добавление новой рабочей книги Workbooks.Add 'Сохранение рабочей книги ActiveWorkbook.SaveAs "C:WorkbookName.xls" 'OR ActiveWorkbook.SaveAs Filename:="C:WorkbookName1.xls" End Sub
Объяснение:
- Метод добавления рабочей книги добавит новую книгу
- Сохранить как рабочую книгу метод сохранит активную книгу в определенном месте с указанным именем файла
Вывод: Вы должны увидеть недавно открытую книгу вместе с существующей книгой.
Инструкции:
- Откройте рабочую книгу Excel
- Нажмите Alt + F11, чтобы открыть редактор VBA.
- Вставьте новый модуль из меню «Вставка»
- Создайте приведенный выше код и вставьте в окно кода
- Нажмите F5, чтобы увидеть выход
- Вы должны увидеть недавно открытую книгу, как показано выше.
- Сохраните файл в виде макросъемки
Создание объекта для вновь созданной книги
Вы можете установить вновь созданную книгу на объект, так что вам легко обратиться к вашей книге для выполнения дальнейших задач.
Код:
sub AddNewWorkbook2() Dim wkb as Workbook 'Добавление новой рабочей книги Set wkb = Workbooks.Add 'Сохранение рабочей книги wkb.SaveAs "C:WorkbookName.xls" 'OR wkb.SaveAs Filename:="C:WorkbookName1.xls" End Sub
Вывод:
Вы должны увидеть недавно открытую книгу вместе с существующей книгой.
Инструкции:
- Откройте рабочую книгу Excel
- Нажмите Alt + F11, чтобы открыть редактор VBA.
- Вставьте новый модуль из меню «Вставка»
- Создайте приведенный выше код и вставьте в окно кода
- Нажмите F5, чтобы увидеть выход
- Вы должны увидеть недавно открытую книгу, как показано выше.
- Сохраните файл в виде макросъемки