Открытие книги 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, существование книги, обратиться к открытой книге.
Присвоение переменной имени открываемой книги |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Задача такова:
Workbooks.Add
1) Затем нужно присвоить созданной книге имя.
2) Открыть другие книги и перенести из них листы в эту созданную книгу и закрыть открытые книги из которых переносились листы.
3) Заархивировать созданную книгу.
4) Архив сохранить на диске
5) Созданную книгу удалить.
Как сделать п. 1)?
Может туплю, но неполучается!
Путей к вершине — множество. Этот один из многих!
1) Свойство Workbook.Name имеет признак read-only, потому что её (книги) именем является название файла, т.е. книгу НАДО СОХРАНИТЬ.
PS: Имя книги (т.к. оно – имя файла) может быть разным (что может привести к ошибке при обращении по имени): с расширением и без, если в настройках Винды включено их неотображение.
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли
Спасибо Шпец! Я полагал, что есть способ присвоить книге имя несохранаа ее!
Значит нет …
Путей к вершине — множество. Этот один из многих!
Когда-то я тоже с этим столкнулся и в виде решения выбрал смену заголовка вновь созданной Книги.
Sub New_book()
Dim CODESRC(2) As String
CODESRC(0) = "Private Sub Workbook_Activate()"
CODESRC(1) = " ActiveWindow.Caption = ""Здесь назовите книгу как хотите""" 'при чем у меня здесь вставленна переменная и книга называется в зависимости от данных которые содержит
CODESRC(2) = "End Sub"
Set AppExcel = Excel.Application
AppExcel.Visible = True
Set wbk = AppExcel.Workbooks.Add
Dim linecount
linecount = AppExcel.ActiveWorkbook.VBProject.VBComponents(1).CodeModule.CountOfLines
For i = 0 To UBound(CODESRC)
AppExcel.ActiveWorkbook.VBProject.VBComponents(1).CodeModule.InsertLines i + linecount + 1, CODESRC(i)
Next i
End Sub
Два обязательных момента:
1. Разрешено доверие к проектам VBA
2. Книгу надо активировать
но если Вам надо книгу всеравно сохранять, то я не пойму в чем проблема?
Сохраните, задайте полюбившееся имя и …
Цитата: boa от 12.03.2009, 18:13
Когда-то я тоже с этим столкнулся и в виде решения выбрал смену заголовка вновь созданной Книги.но если Вам надо книгу всеравно сохранять, то я не пойму в чем проблема?
Сохраните, задайте полюбившееся имя и …
Уважаемый boa! Фишка в том, что по условиям проекта, нужно в созданной книге собрать некий лист, а затем переместить результаты сборки (лист) в другую книгу. Наверно непонятно, но таков путь. И Ваше решение скорее всего оптимально. Пока непроверял … Так что, огромное СПАСИБО!
Путей к вершине — множество. Этот один из многих!
Спасибо boa! Буду разбиратся…
Путей к вершине — множество. Этот один из многих!
Squitty 72 / 0 / 0 Регистрация: 24.06.2014 Сообщений: 11 |
||||||||||||||||||||
1 |
||||||||||||||||||||
Присвоение переменной имени книги24.06.2014, 15:54. Показов 8964. Ответов 4 Метки нет (Все метки)
Доброго дня. Помогите решить проблему. Макрос открывает файл .csv посредством обращения к Modules. Пробовал
или
Во втором случае проблема в том, что после отработки Modules программа автоматически возращается к ранее открытым книгам без участия Modules и присваивает nm значение других книг. Хотя когда запускается debug, нужна книга активна. При не больших знаниях vba использовал все доступные мне способы, а в сети и на форуме ответа на вопрос не нашел. Заранее благодарен. Добавлено через 41 минуту Собественно код программы, чтобы было детальнее. Кликните здесь для просмотра всего текста
Файл .csv открывается путем вызова модуля mWScript.WScriptOpen Кликните здесь для просмотра всего текста
и вторая часть
0 |
KoGG 5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
||||
24.06.2014, 16:29 |
2 |
|||
Файл открыт, но присвоить переменной имя файла не получается. Это разве все проблемы? Мне кажется и данные переносится не должны. 18 строку mWScript.WScriptOpen лучше заменить на
0 |
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||||||
24.06.2014, 16:58 |
3 |
|||||||
Я всё сделал бы иначе. Потому что csv лучше открывать так (только посмотрите какие там разделители полей — уверен что они будут постоянными, но могут быть не только «;»):
Добавлено через 2 минуты
Добавлено через 2 минуты
0 |
72 / 0 / 0 Регистрация: 24.06.2014 Сообщений: 11 |
|
24.06.2014, 17:11 [ТС] |
4 |
Hugo121, так было изначально. Но VBA при открытии csv файла не разделяет структуру с учетом разделителей. Разделить и изъять не проблема, но при сохранении файла VBA разделяет уже не «;», а просто «,». Плюс структура остается в одну строку. А программа, которая использует эту базу чувствительна и такой формат не воспринимает. Поэтому возникла необходимость для такого порядка открытия файла. Hugo121, делится однозначно все «;». Испробую, спасибо. Но мне нужно наоборот вставить в этот файл
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
24.06.2014, 17:22 |
5 |
Открыли файл, взяли всё в массив, файл закрыли. Ну или можно выгрузить полученный из файла массив на лист, чтоб было наглядно, и чтоб уже существующий код не менять полностью. Заодно на лету подправить форматы — чтоб даты были датами, а всякие ID типа «000123» не теряли ведущие нули. Добавлено через 11 секунд Ну или можно выгрузить полученный из файла массив на лист, чтоб было наглядно, и чтоб уже существующий код не менять полностью. Заодно на лету подправить форматы — чтоб даты были датами, а всякие ID типа «000123» не теряли ведущие нули.
0 |
Home / VBA / VBA Rename Workbook (Excel File)
To RENAME an Excel file that is stored on your computer, you need to use the “NAME” statement. In this statement, you need to define the old file name and the new name that you want to apply. But there’s one thing that you need to remember the file must be closed.
Here I have an Excel file that is stored in the “Data” folder on my desktop and there in this folder “SampleFile” that I want to rename to the “myFile” and code for this would be like the following.
Name "C:UsersDellDesktopmyFolderSampleFile.xlsx" As _
"C:UsersDellDesktopmyFoldermyNewFile.xlsx"
Steps to use VBA to Rename Excel File
Now, let’s understand this line of code in detail.
- The name statement with which you need to start the code.
- Address of the file with the old name and file extension.
- “As” refers to the new name.
- Address of the file with the new name and file extension.
Helpful Links: Run a Macro – Macro Recorder – Visual Basic Editor – Personal Macro Workbook
To make the name states a little clearer you can use variables, just like the following code.
Sub vba_rename_workbook()
Dim oldName As String
Dim newName As String
oldName = "C:UsersDellDesktopmyFolderSampleFile.xlsx"
newName = "C:UsersDellDesktopmyFoldermyNewFile.xlsx"
Name oldName As newName
End Sub
More on VBA Workbooks
VBA Save Workbook | VBA Close Workbook | VBA Delete Workbook | VBA ThisWorkbook | 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