2009-02-23 85 views

Respuesta

59

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

+0

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

+4

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 **. –

+0

@Nile Todos suenan como grandes ideas –

0

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.

1

Á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.

+2

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

23

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.

9

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. :)

+0

¡Eso es genial! –

+0

¿eso funciona para usted? parece que no funciona en excel 2003 –

+0

@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

8

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 
+0

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

1

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.

2

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... 
+0

¿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

3

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.