2009-02-23 9 views

risposta

59

Non sono sicuro se è possibile aprire in modo invisibile in corrente eccellere esempio

È possibile aprire una nuova istanza di Excel, però, nasconderlo e quindi aprire le cartelle di lavoro

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 

Come altri hanno scritto, assicurati di ripulire dopo aver finito con le cartelle di lavoro aperte

+0

Arresta il lampeggio nella barra delle applicazioni ma provoca il lampeggiamento del cursore. Persino Application.Cursor non aiuta (in Office 2010 x64). – sevenkul

+4

Vi consiglio vivamente di bloccare il sessione di applicazione prima di aprire la cartella di lavoro di destinazione: 'App.AutomationSecurity = msoAutomationSecurityForceDisable' ' App.EnableEvents = False' ' App.Calculation = xlCalculationManual' - e si potrebbe prendere in considerazione enumerando anche la raccolta di AddIns e la disabilitazione: ** l'avvio lento di componenti aggiuntivi ritarderà l'avvio della sessione dell'app **. –

+0

@Nile Tutti sembrano grandi idee –

0

In Excel, nascondere le cartelle di lavoro e salvarle come nascoste. Quando la tua app li carica, non verranno mostrati.

Modifica: dopo la rilettura, è diventato chiaro che queste cartelle di lavoro non fanno parte dell'applicazione. Una tale soluzione sarebbe inappropriata per le cartelle di lavoro degli utenti.

1

Apri da una nuova istanza di 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 

È necessario ricordare di pulire dopo aver finito.

+2

Solo per sottolineare, è necessario eseguire la pulizia dopo aver terminato con un'istanza invisibile. Se non lo fai, l'utente potrebbe non essere in grado di aprire i file excel facendo doppio clic o avviandosi da altre app a meno che non si disconnettano o sappiano come uccidere i processi (perché i file vengono aperti nella finestra invisibile). – David

23

se che si adatta alle vostre esigenze, vorrei semplicemente utilizzare

Application.ScreenUpdating = False 

con l'ulteriore vantaggio di accelerare il vostro codice, invece di rallentarla utilizzando una seconda istanza di Excel.

9

Anche se hai la risposta, per coloro che trovano questa domanda, è anche possibile aprire un foglio di calcolo Excel come archivio dati JET. Prendendo in prestito la stringa di connessione da un progetto che ho usato su, sembrerà un po 'come questo:

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" 

nota che "registratiElenco" è il nome della scheda nella cartella di lavoro. Ci sono alcuni tutorial che girano sul web con i dettagli di ciò che puoi e non puoi fare accedendo a un foglio in questo modo.

Ho solo pensato di aggiungere. :)

+0

È bello !!!! –

+0

funziona per te? sembra non funzionare in Excel 2003 –

+0

@ShawnZhang La maggior parte dei file Excel che abbiamo letto sono stati esportati nel formato 2000/2003 poiché questo è ciò che il programma del mittente emette. Esiste una variante della stringa di connessione che abbiamo testato per i file 2007/2010 che funziona altrettanto bene. – AnonJr

8

Per aprire una cartella di lavoro come nascosti nella istanza esistente di Excel, l'uso seguente:

Application.ScreenUpdating = False 
    Workbooks.Open Filename:=FilePath, UpdateLinks:=True, ReadOnly:=True 
    ActiveWindow.Visible = False 
    ThisWorkbook.Activate 
    Application.ScreenUpdating = True 
+0

Grazie, ha funzionato quando uso questo modo: 'ThisWorkbook.Activate: ActiveWindow.Visible = False: Application.ScreenUpdating = FALSE TUTTE LE ALTRE CODICE QUI ' Application.ScreenUpdating = True: ThisWorkbook.Activate: ActiveWindow.Visible = True' Né barra delle applicazioni né sfarfallio del cursore. – sevenkul

1

Aprire la cartella di lavoro come nascosto e quindi impostare come "salvati" in modo che gli utenti non viene richiesto quando si chiudere.

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 

Questo è un po 'derivativo della risposta pubblicata da Ashok.

In questo modo, sebbene non venga richiesto di salvare le modifiche nel file Excel da cui si legge. Questo è ottimo se il file di Excel che stai leggendo è inteso come fonte di dati per la convalida. Ad esempio se la cartella di lavoro contiene nomi di prodotti e dati sui prezzi, può essere nascosta e puoi mostrare un file Excel che rappresenta una fattura con menu a discesa per prodotto che convalida da quel listino prezzi.

È quindi possibile memorizzare il listino prezzi su una posizione condivisa su una rete da qualche parte e renderlo di sola lettura.

2

Il problema con le risposte di iDevlop e Ashok è che il problema fondamentale è un difetto di progettazione di Excel (apparentemente) in cui il metodo Open non rispetta l'impostazione Application.ScreenUpdating di False. Di conseguenza, impostarlo su False non è di alcun beneficio a questo problema.

Se la soluzione di Patrick McDonald è troppo onerosa a causa del sovraccarico di avvio di una seconda istanza di Excel, quindi la soluzione migliore che ho trovato è quella di ridurre al minimo il tempo che la cartella di lavoro aperta è visibile riattivando la finestra originale come rapidamente possibile:

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

Perché hai bisogno di azioni con 'ActiveWindow'? Penso che nascondere la finestra della cartella di lavoro dopo che è stata aperta ha lo stesso effetto – Winand

3

Un approccio molto più semplice che non comporta la manipolazione finestre attive:

Dim wb As Workbook 
Set wb = Workbooks.Open("workbook.xlsx") 
wb.Windows(1).Visible = False 

Da quello che posso dire l'indice di Windows nella cartella di lavoro deve essere sempre 1. Se qualcuno è a conoscenza di condizioni di gara che lo renderebbero falso, fatemelo sapere.