2009-08-13 156 views
1

我想打開一系列Excel電子表格,使用在Access數據庫模塊內創建的Excel實例。我可以讓文件正常打開;但是,啓動Excel的實際調用需要很長時間,打開文件需要更長的時間。文件的位置無關緊要(同一時間在本地HDD上作爲網絡驅動器打開)。VBA文件打開很慢

爲了弄清楚花了多長時間,我給記錄模塊添加了一個定時器。打開文件大約需要2分30秒,在此期間主機應用程序(Access)完全不響應用戶輸入);腳本的其餘部分在不到10秒的時間內執行。

我使用標準Excel.Workbooks.Open電話如下

Set OpenSpreadsheet = Excel.Workbooks.Open(Name, 2, False) 

周圍使用此行Debug.Print方法說,它可能需要長達2分半鐘的這一行來執行。

有什麼我可以做的,使Excel文件打開更快?

編輯:打開時,UpdateLinksFalseReadOnlyTrue;所有其他選項都保留爲默認值。

+1

如果您添加一些代碼以顯示您如何打開文檔,請輸入您設置的參考號,這將更容易回覆。但是可以肯定的是,任何超過10秒的東西。是漫長的。 – 2009-08-13 15:41:26

+0

同意,+ 1 ...需要查看方法。 – Smandoli 2009-08-13 16:11:48

+0

我添加了我正在做的呼叫,並注意到單線需要運行的時間。 – 2009-08-13 17:17:22

回答

3

第一個想法:你可以使用與Excel連接的ODBC連接的Jet驅動程序,而不是在Excel對象中打開它?可能會快得多。

第二個想法:確保在例程開始時創建並實例化Excel應用程序對象,然後對每個電子表格使用Excel.Workbooks.Open()和Excel.ActiveWorkbook.Close()。這樣你就不會每次都「重新啓動」MS Excel應用程序。

+0

這工作 - 我跑了模塊,同時留意任務管理器和三個Excel實例創建,即使我只在代碼中創建一個。 – 2009-08-13 19:07:21

0

要繪製出@ BradC的明智建議第二,如果你需要使用Excel中的一個以上的步驟,創建一個自初始化的全局函數。我總是使用後期綁定來自動執行Office應用程序。

Public Function Excel(Optional bolCleanup As Boolean = False) As Object 
    Static objExcel As Object 

    If bolCleanup Then 
     If Not objExcel Is Nothing Then 
      Set objExcel = Nothing 
      Exit Function 
     End If 
    End If 
    If objExcel Is Nothing Then 
     Set objExcel = CreateObject("Excel.Application") 
    End If 
    Set Excel = objExcel 
    End Function 

然後你就可以在代碼中使用它,而無需對其進行初始化,並且單個實例將繼續提供給需要使用Excel的任何代碼。

而當你關閉你的應用程序,你會打電話給Excel(真)來清理。

我一直在用Outlook和Word來做這件事。但是,有一些COM應用程序與它不兼容,比如PDF Creator,它不會很好地處理這種類型的處理(如果您試圖以某種方式關閉並重新初始化,最終會導致無限循環這種方式破壞實例)。