visual for ejemplos descargar code applications excel vba excel-vba

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.

  1. ¿Hay alguna otra diferencia entre las dos formas de abrir nuevos libros de trabajo en términos de rendimiento?

  2. 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 ''