2013-11-06 6 views
4

Я ищу разъяснения о влиянии «Нового» на объекты и сценарий.«Новый» Excel.Application vs Excel.Application

Я понимаю, что если мне нужно выполнить действия над документом excel, и приложение закрыто, я должен использовать New Excel.Application.

Если я поддерживаю это приложение активным (например, с помощью рабочей книги, например, книги), а позже в сценарии я решил открыть другую книгу, должен ли я использовать New Excel.Application или лучше использовать Excel. Тогда приложение?

Моя забота заключается в том, что я собираюсь написать длинный скрипт, который будет выполнять действия не менее 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")... 
+0

http://msdn.microsoft.com/en-us/library/office/ aa141350% 28v = office.10% 29.aspx –

+0

http://msdn.microsoft.com/en-us/library/7zc73115(v=vs.90).aspx – xQbert

+0

У ОП есть хорошая точка ... Я ' всегда замечал, что Microsoft Scriptin g Runtime требует ключевое слово New для FileScriptingObject, но не для других библиотек. Почему некоторые требуют новых, а другие нет? – DanK

ответ

1

приложения первенствовать может иметь несколько книг открытых сразу, так что вам не нужно Instancing новый. Если вы изнутри 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") 

Это откроет книги и даст ссылку, чтобы вы могли манипулировать ими, используя свой код.

2

Я собираюсь написать длинный скрипт, который будет выполнять действия, по крайней мере, 5 Workbooks

Хороший вопрос, короткий ответ, что вы можете открыть 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.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 

Не определять (затемнение) внутри цикла, однако вы можете создать экземпляр (Set) один и тот же объект, как столько раз, сколько вы хотите.Если вы используете глобальный объект (который не рекомендуется, но иногда под рукой) внутри элемента управления (кнопки, и т.д.), вы можете использовать что-то вроде этого:

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 

Смотрите также,

+1

Мне нужна последняя часть очистки. благодаря –

Смежные вопросы