excel vba - valor - Abra el archivo de Excel para leer con VBA sin pantalla
range.find vba excel example (9)
Quiero buscar a través de archivos de Excel existentes con una macro, pero no quiero mostrar esos archivos cuando el código los abre. ¿Hay alguna manera de tenerlos abiertos "en el fondo", por así decirlo?
Ábrelos desde una nueva instancia de Excel.
Sub Test()
Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
Dim w As Workbook
Set w = xl.Workbooks.Add()
MsgBox "Not visible yet..."
xl.Visible = True
w.Close False
Set xl = Nothing
End Sub
Debes recordar limpiar después de que hayas terminado.
A pesar de que tiene su respuesta, para aquellos que encuentran esta pregunta, también es posible abrir una hoja de cálculo de Excel como un almacén de datos JET. Tomando prestada la cadena de conexión de un proyecto en el que la he usado, se verá así:
strExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & objFile.Path & ";Extended Properties=""Excel 8.0;HDR=Yes"""
strSQL = "SELECT * FROM [RegistrationList$] ORDER BY DateToRegister DESC"
Tenga en cuenta que "RegistrationList" es el nombre de la pestaña en el libro de trabajo. Hay algunos tutoriales que flotan en la web con los detalles de lo que puede y no puede hacer accediendo a una hoja de esta manera.
Solo pensé en agregar. :)
Abra el libro de trabajo como oculto y luego configúrelo como "guardado" para que no se le pregunte a los usuarios cuando se cierran.
Dim w As Workbooks
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Set w = Workbooks
w.Open Filename:="//server/PriceList.xlsx", UpdateLinks:=False, ReadOnly:=True ''this is the data file were going to be opening
ActiveWindow.Visible = False
ThisWorkbook.Activate
Application.ScreenUpdating = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
w.Item(2).Saved = True ''this will suppress the safe prompt for the data file only
End Sub
Esto es algo derivado de la respuesta publicada por Ashok.
Al hacerlo de esta manera, no se le pedirá que guarde los cambios en el archivo de Excel desde donde lee. Esto es genial si el archivo de Excel de su lectura pretende ser una fuente de datos para la validación. Por ejemplo, si el libro de trabajo contiene nombres de productos y precios, puede ocultarse y puede mostrar un archivo de Excel que represente una factura con menús desplegables para productos que validen desde esa lista de precios.
A continuación, puede almacenar la lista de precios en una ubicación compartida en una red en algún lugar y hacerla de solo lectura.
El problema con las respuestas de iDevlop y Ashok es que el problema fundamental es una falla de diseño de Excel (aparentemente) en la que el método Open no respeta la configuración Application.ScreenUpdating de False. En consecuencia, establecerlo en False no es beneficioso para este problema.
Si la solución de Patrick McDonald es demasiado onerosa debido a la sobrecarga de comenzar una segunda instancia de Excel, entonces la mejor solución que he encontrado es minimizar el tiempo que el libro abierto es visible al reactivar la ventana original lo más rápido posible:
Dim TempWkBk As Workbook
Dim CurrentWin As Window
Set CurrentWin = ActiveWindow
Set TempWkBk = Workbooks.Open(SomeFilePath)
CurrentWin.Activate ''Allows only a VERY brief flash of the opened workbook
TempWkBk.Windows(1).Visible = False ''Only necessary if you also need to prevent
''the user from manually accessing the opened
''workbook before it is closed.
''Operate on the new workbook, which is not visible to the user, then close it...
En Excel, oculte los libros de trabajo y guárdelos como ocultos. Cuando su aplicación los carga, no se mostrarán.
Editar: al volver a leer, quedó claro que estos libros de trabajo no son parte de su aplicación. Tal solución sería inapropiada para los libros de trabajo de los usuarios.
No estoy seguro de si puede abrirlos de forma invisible en la instancia de Excel actual
Sin embargo, puede abrir una nueva instancia de excel, ocultarla y luego abrir los libros de trabajo
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 después de que haya terminado con los libros de trabajo abiertos
Para abrir un libro como oculto en la instancia existente de Excel, use lo siguiente:
Application.ScreenUpdating = False
Workbooks.Open Filename:=FilePath, UpdateLinks:=True, ReadOnly:=True
ActiveWindow.Visible = False
ThisWorkbook.Activate
Application.ScreenUpdating = True
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 reducirlo utilizando una segunda instancia de Excel.
Un enfoque mucho más simple que no implica la manipulación de ventanas activas:
Dim wb As Workbook
Set wb = Workbooks.Open("workbook.xlsx")
wb.Windows(1).Visible = False
Por lo que puedo decir, el índice de Windows en el libro de trabajo siempre debe ser 1
. Si alguien sabe de alguna condición de carrera que haga que esto no sea cierto, por favor avíseme.