Quiero buscar entre 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?Abrir archivo de Excel para leer con VBA sin pantalla
Respuesta
No estoy seguro si se pueden abrir de forma invisible en la corriente sobresalir ejemplo
Puede abrir una nueva instancia de Excel sin embargo, ocultarlo 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 otros han dicho, asegúrese de limpiar después de que haya terminado con cualquier libro abierto
En Excel, oculte los libros de trabajo y guárdelos como ocultos. Cuando su aplicación los carga, no se mostrarán.
Edición: 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.
Á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
Debe recordar limpiar después de que haya terminado.
Solo para enfatizar, debe limpiar después de que haya terminado con una instancia invisible. Si no lo hace, es posible que el usuario no pueda abrir archivos de Excel haciendo doble clic o iniciando desde otras aplicaciones, a menos que cierre la sesión o sepa cómo eliminar procesos (porque los archivos se abren en la ventana invisible). – David
si que se adapte a sus necesidades, simplemente usaría
Application.ScreenUpdating = False
con el beneficio añadido de acelerar su código, en lugar de frenarla mediante el uso de una segunda instancia de Excel.
Aunque tenga 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. El préstamo de la cadena de conexión de un proyecto en el que he utilizado en, que se verá algo como esto:
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. 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. :)
¡Eso es genial! –
¿eso funciona para usted? parece que no funciona en excel 2003 –
@ShawnZhang La mayoría de los archivos de Excel que hemos estado leyendo se han exportado en el formato 2000/2003, ya que eso es lo que emite el programa del remitente. Hay una variación de la cadena de conexión que hemos probado para los archivos de 2007/2010 que también funciona. – AnonJr
Para abrir un libro como oculto en la instancia existente de Excel, el uso siguiente:
Application.ScreenUpdating = False
Workbooks.Open Filename:=FilePath, UpdateLinks:=True, ReadOnly:=True
ActiveWindow.Visible = False
ThisWorkbook.Activate
Application.ScreenUpdating = True
Gracias, funcionó cuando se utiliza de esta manera: 'ThisWorkbook.Activate: ActiveWindow.Visible = False: Application.ScreenUpdating = false' TODO OTRO CÓDIGO AQUÍ ' Application.ScreenUpdating = True: ThisWorkbook.Activate: ActiveWindow.Visible = Verdadero 'Ni la barra de tareas ni el cursor parpadean. – sevenkul
abrir el libro como ocultos y luego otra vez como "salvado" por lo que los usuarios no se les solicita cuando cerrar.
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, aunque no se le pedirá que guarde los cambios en el archivo de Excel de su lectura. 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.
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 iniciar 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 como más rápidamente 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...
¿Por qué necesita acciones con 'ActiveWindow'? Creo que solo ocultar la ventana del libro de trabajo después de que se ha abierto tiene el mismo efecto – Winand
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
de lo que puedo decir al índice de windows en el libro siempre debe haber 1
. Si alguien sabe de alguna condición de carrera que haga que esto no sea cierto, por favor avíseme.
- 1. Abrir Google Chrome desde VBA/Excel
- 2. ¿Cómo abrir un archivo de Excel con PHPExcel para leer y escribir?
- 3. Abrir y leer un archivo con askopenfilename
- 4. Renombrar archivos con Excel VBA
- 5. Java: abrir y leer un archivo sin bloquearlo
- 6. Forzar una actualización de pantalla en Excel VBA
- 7. Subcadena de Excel VBA
- 8. ¿Cómo puedo abrir un archivo de Excel en Python?
- 9. Eliminación de imágenes con Excel VBA
- 10. No se puede abrir el archivo Excel generado con excelLibrary
- 11. Archivo de Excel con contraseña protegida
- 12. Abrir archivo para leer y escribir (no anexar) en perl
- 13. Documentación para macros VBA de Excel
- 14. Procedimiento almacenado para abrir y leer un archivo de texto
- 15. VBA Excel Getting File Path (finaliza con la carpeta)
- 16. OnClick en Excel VBA
- 17. PHP Leer archivo xlsx Excel 2007
- 18. Errores de manejo adecuado en VBA (Excel)
- 19. Truncamiento doble con VBA en Excel
- 20. Leer datos de Excel
- 21. LIFO (Apilado) Algoritmo/Clase para Excel VBA
- 22. Excel VBA - xlDown
- 23. matriz en Excel VBA
- 24. Excel VBA Colón
- 25. ¿Cómo abrir un archivo para leer en C?
- 26. Solicitud HTTPS POST usando VBA para Excel
- 27. EXcel VBA: Macro de Excel para crear una tabla en PowerPoint
- 28. Leer/Analizar archivo de texto línea por línea en VBA
- 29. Abrir documento de Excel con EPPlus
- 30. Rendimiento de OLEDB para leer Excel
Para el flasheo en la barra de tareas pero causa el parpadeo en el cursor. Incluso Application.Cursor no ayuda (en Office 2010 x64). – sevenkul
recomiendo encarecidamente que bloquea la sesión de aplicación antes de abrir el libro de destino: 'App.AutomationSecurity = msoAutomationSecurityForceDisable' ' App.EnableEvents = False' ' App.Calculation = xlCalculationManual' - Y usted podría considerar enumerar la colección AddIns y deshabilitarlos también: ** los inicios de complementos lentos retrasarán el inicio de la sesión de la aplicación **. –
@Nile Todos suenan como grandes ideas –