Предыстория статьи: Чтобы открыть файл Excel по указанному пути, в VBA обычно используется метод Workbooks.Open. Недавно я обнаружил, что существует функция GetObject, имеющая схожие функции, поэтому в этой статье обсуждаются различия между двумя методами открытия.
1 Workbooks.Open2 GetObject 3 Различия между двумя способами открытия
Откройте книгу.
expression.Open (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)
Если после редактирования вы хотите закрыть книгу, вы можете использовать Workbook.Close.
expression.Close (SaveChanges, FileName, RouteWorkbook)
Пример кода:
Option Explicit
Option Base 1
Sub test()
«Открой книгу «Работа»
Dim wb As Workbook, pathname As String
pathname = "D:\OneDrive\Documents\test.xlsm"
Set wb = Workbooks.Open(pathname)
wb.Sheets(1).Range("A1") = "Hello world!"
wb.Close SaveChanges:=True
MsgBox "Done!"
End Sub
Откройте файл Excel, после редактирования сохраните содержимое и закройте его.
Возвращает ссылку на объект, предоставленный компонентом ActiveX.
GetObject ([ pathname ], [ class ])
Пример кода:
Sub test2()
'Используйте функцию GetObject, чтобы открыть книгу «Работа».
Dim wb As Workbook, pathname As String, content As String
pathname = "D:\OneDrive\Documents\test.xlsm"
On Error Resume Next
Set wb = GetObject(pathname)
On Error GoTo 0
If wb Is Nothing Then
MsgBox "File not found or error occurred."
Exit Sub
End If
' Получить контент
content = wb.Sheets(1).Range("A1").Value2
MsgBox content
wb.Close SaveChanges:=False
MsgBox "Done!"
End Sub
использоватьGetObject
функция,Получает ссылку на указанный файл Excel. Если файл Excel еще не открыт,Затем программа в фоновом режиме откроет книгу Работа.
Уведомление:проходитьGetObject
функцияцитировать Работа Бронирование времени,Если книга Работа уже открыта,но не в активном состоянии,Программа может сообщить об ошибке.
(1)использоватьGetObject
функция Преимущество в том,,Указанную Рабочую книгу можно открыть в скрытом режиме. Если целью является получение данных указанной Рабочей книги,не пытаясь изменить данные,Это нормальноиспользоватьGetObject
функция。
(2) При открытии указанной Рабочей книги,Если книга «Работа» была открыта заранее,использоватьGetObject
функция Есть возможность сообщить об ошибке,Потому что книга Работа обычно не активна;
использоватьWorkbooks.Open
Методы обычно не вызывают ошибок。Напротив,это будетвозвратная пара уже открывает ссылку на книгу «Работа», не открывая ее повторно.
(3)проходитьGetObject
функцияоткрытьExcelПока файл изменен(Писать)и сохранить,Когда вы откроете файл позже, вы увидите только лист в VBE.,Но пользовательский интерфейс не виден。использоватьWorkbooks.Open
Этот метод не имеет этой проблемы。
противGetObject
функция Проблемы,Есть два решения:
1) После открытия файла,проходитьпоказывать
в менюПоказать
функция пустьлист Сновапоказыватьпублично заявить。
2)существоватьwb.Close SaveChanges:=True
Добавьте строку кода перед,Application.Windows(wb.name).Visible = True
。
Пример кода:
Sub test4()
'Используйте функцию GetObject, чтобы открыть книгу «Работа».,Изменить контент,Файлы не будут скрыты
Dim wb As Workbook, pathname As String, content As String
pathname = "D:\OneDrive\Documents\test.xlsm"
Set wb = GetObject(pathname)
wb.Sheets(1).Range("A2").Value2 = "No 2"
Application.Windows(wb.Name).Visible = True
wb.Close SaveChanges:=True
MsgBox "Done!"
End Sub
Ссылки:
[1] Что лучше, getobject или workbooks.open?
[2] Workbooks.Open method
[3] Workbook.Close method