"Новый" Excel.Application против Excel.Application
Я ищу разъяснения о влиянии "Нового" на объекты и сценарий.
Насколько я понимаю, если мне нужно выполнить действия с документом Excel и приложение закрыто, я должен использовать New Excel.Application.
Если я оставлю это приложение активным (например, с помощью такого объекта, как Рабочая книга) и позже в сценарии я решу открыть другую рабочую книгу, следует ли мне по-прежнему использовать Новое приложение Excel.Application или тогда будет лучше использовать Excel.Application?
Мое беспокойство заключается в том, что я собираюсь написать длинный сценарий, который будет выполнять действия по крайней мере для 5 рабочих книг. Мне придется переключиться с одной рабочей книги на другую, а затем вернуться к прежнему...
Если каждый раз, когда сценарий создает новое приложение Excel.Application, у меня может быть довольно много запущенных приложений, и я боюсь, что этот беспорядок вызовет проблемы.
Правильнее ли написать что-то вроде:
Dim NxlApp as New Excel.Application
Dim xlApp as Excel.Application
NxlApp.Workbooks.Open "C:\Users\...\WorkbookA.xlsx"
NxlApp.Visible = True
'Perform actions on WorkbookA (keep it open)
Set ExcelApp = GetObject("", "Excel.Application.14")
xlApp.Workbooks.Open "C:\Users\...\WorkbookB.xlsx"
xlApp.Visible = True
'Perform actions on WorkbookB (keep it open)
'Go back to WorkbookA (using the xlApp variable this time)
xlApp.Workbook("A.xlsx")...
2 ответа
В приложении Excel может быть открыто несколько рабочих книг одновременно, поэтому вам не нужно создавать новую. Если вы изнутри Excel, вам не нужно ссылаться на приложение, чтобы открыть рабочие книги. Вы можете создать несколько экземпляров книги, например
Dim wbWorkbookA As Workbook
Dim wbWorkbookB As Workbook
Set wbWorkbookA = Workbooks.Open("C:\Users\...\WorkbookA.xlsx")
Set wbWorkbookB = Workbooks.Open("C:\Users\...\WorkbookB.xlsx")
Это откроет рабочие книги и даст ссылку, чтобы вы могли манипулировать ими, используя свой код.
Я собираюсь написать длинный скрипт, который будет выполнять действия как минимум на 5 рабочих книгах.
Хороший вопрос, короткий ответ - вы можете открыть 5 рабочих книг в одном объекте Application.
Если вы в Excel (см. Ниже), у вас уже есть приложение Excel.Application. Затем вы можете установить для каждой книги свой объект или ссылаться на них по имени:
dim wb1, wb2 as Excel.Workbook, wb3 as New Excel.Workbook 'blank is
same as Variant set wb1 = application.open("path/wb.xlsx") msgbox
wb1.name 'ref by object msgbox
workbooks("wb.xlsx").name 'ref by name
Насколько я понимаю, что если мне нужно выполнить действия с документом Excel и приложение закрыто, я должен использовать New Excel.Application
Если вы находитесь за пределами Excel (как в Access), вы можете создать объект Excel.Application, вот несколько советов:
Dim nXlApp as New Excel.Application
имеет такой же эффект как:
Dim xlApp as Excel.Application
Set xlApp = New Excel.Application 'Early Binding
Set xlApp = CreateObject(“Excel.Application”) 'Late Binding
Не определяйте (dim) внутри цикла, однако вы можете создавать (устанавливать) один и тот же объект столько раз, сколько захотите. Если вы используете глобальный объект (который не рекомендуется, но иногда удобно) внутри элемента управления (кнопка и т. Д.), Вы можете использовать что-то вроде этого:
if xlApp is Nothing then set xlApp = CreateObject(“Excel.Application”)
Когда вы закончите, не забудьте убрать дом!
wb1.Close False
set wb1 = Nothing 'do this once for each defined object, anything using New/Set
Смотрите также,
- Разница между CreateObject("Excel.Application") .Workbooks.Open и просто Workbooks.Open
- https://support.microsoft.com/en-us/kb/288902 (поведение GetObject и CreateObject)