for - Diferencia entre CreateObject("Excel.Application").Workbooks.Open y solo Workbooks.Open
visual basic for applications (2)
La vinculación tardía es ligeramente más lenta que la vinculación temprana, pero es posible que ni siquiera note la diferencia. Sí, puede usar solo una instancia para todos los libros de trabajo. Tenga en cuenta que esto:
Dim xl As New Excel.Application
xl.Workbooks.Open "z:/docs/test.xlsm"
No será visible a menos que usted diga:
xl.Visible = True
Asegúrese de cerrar cualquier instancia en su trampa de error.
Actualmente estoy usando Workbooks.Open
para procesar una gran cantidad de archivos contenidos en un directorio. Pero abrir y cerrar estos archivos hace que los archivos aparezcan en la barra de tareas y quería evitar el parpadeo constante.
Obtuve una sugerencia de que puedo usar CreateObject
para crear una nueva instancia, ya que abre una nueva instancia de Excel que está oculta.
¿Hay alguna otra diferencia entre las dos formas de abrir nuevos libros de trabajo en términos de rendimiento?
Además, ¿debería simplemente usar una instancia de Excel creada con
CreateObject
para abrir todos los libros o debo crear una instancia para cada libro que tengo que procesar (lo que parece una pérdida de memoria y menos velocidad )?
Workbooks.Open
utiliza la instancia actual de MS Excel y CreateObject(“Excel.Application”)
crea una nueva instancia de MS Excel. Puedes leer sobre CreateObject
here .
Simplemente emitir un libro de trabajo. Abrir después de crear una nueva instancia no garantizará que los libros de trabajo se abran en la nueva instancia. Tendrás que ligarte con ello. Por ejemplo
Dim oXLApp As Object, wb As Object
Set oXLApp = CreateObject("Excel.Application")
''~~> Hide Excel
oXLApp.Visible = False
''~~> Open files
Set wb = oXLApp.Workbooks.Open("C:/Sample.xls")
Respecto a tu otra pregunta
Además, si solo utilizo una instancia de Excel creada con CreateObject para abrir todos los Libros o necesito crear una instancia para cada libro que debo procesar
No necesitas varias instancias. Puedes trabajar con una instancia. Por ejemplo
Dim oXLApp As Object, wb As Object
Set oXLApp = CreateObject("Excel.Application")
''~~> Hide Excel
oXLApp.Visible = False
''~~> Open files
Set wb = oXLApp.Workbooks.Open("C:/Sample1.xls")
''
''~~> Do some Stuff
''
wb.Close (False)
''~~> Open files
Set wb = oXLApp.Workbooks.Open("C:/Sample2.xls")
''
''~~> Do some Stuff
''
wb.Close (False)
''
''~~> And So on
''