Abra un archivo de Excel para leer con VBA sin pantalla
Quiero buscar en archivos de Excel existentes con una macro, pero no quiero mostrar esos archivos cuando el código los abre. ¿Hay alguna manera de abrirlos "en segundo plano", por así decirlo?
No estoy seguro de poder abrirlos de forma invisible en la instancia actual de Excel.
Sin embargo, puedes abrir una nueva instancia de Excel, ocultarla y luego abrir los libros.
Dim app as New Excel.Application
app.Visible = False 'Visible is False by default, so this isn't necessary
Dim book As Excel.Workbook
Set book = app.Workbooks.Add(fileName)
'
' Do what you have to do
'
book.Close SaveChanges:=False
app.Quit
Set app = Nothing
Como han publicado otros, asegúrese de limpiar una vez que haya terminado con los libros abiertos
Si eso se adapta a sus necesidades, simplemente usaría
Application.ScreenUpdating = False
con el beneficio adicional de acelerar su código, en lugar de ralentizarlo usando una segunda instancia de Excel.
Para abrir un libro como oculto en la instancia existente de Excel, utilice lo siguiente:
Application.ScreenUpdating = False
Workbooks.Open Filename:=FilePath, UpdateLinks:=True, ReadOnly:=True
ActiveWindow.Visible = False
ThisWorkbook.Activate
Application.ScreenUpdating = True
Usar ADO ( AnonJr ya lo explicó) y utilizar SQL es posiblemente la mejor opción para recuperar datos de un libro cerrado sin abrirlo de manera convencional. Por favor mira este vídeo .
DE LO CONTRARIO, posiblemente GetObject(<filename with path>)
sea la forma más CONCISA . Las hojas de trabajo permanecen invisibles, sin embargo, aparecerán en la ventana del explorador de proyectos en VBE como cualquier otro libro de trabajo abierto de manera convencional.
Dim wb As Workbook
Set wb = GetObject("C:\MyData.xlsx") 'Worksheets will remain invisible, no new window appears in the screen
' your codes here
wb.Close SaveChanges:=False
Si desea leer una hoja en particular, ni siquiera necesita definir una variable del Libro de trabajo
Dim sh As Worksheet
Set sh = GetObject("C:\MyData.xlsx").Worksheets("MySheet")
' your codes here
sh.Parent.Close SaveChanges:=False 'Closes the associated workbook