Abra un archivo de Excel para leer con VBA sin pantalla

Resuelto notnot asked hace 15 años • 10 respuestas

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?

notnot avatar Feb 24 '09 06:02 notnot
Aceptado

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

Patrick McDonald avatar Feb 23 '2009 23:02 Patrick McDonald

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.

iDevlop avatar Aug 13 '2009 15:08 iDevlop

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
Ashok avatar Jan 16 '2012 11:01 Ashok

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
Munim Rashid avatar Jan 22 '2021 16:01 Munim Rashid