2014-02-24 62 views
0

我有一個VBA腳本,當用戶執行它時,它會打開並將新數據寫入網絡共享驅動器上的另一個文件。偶爾,腳本無法訪問該文件以向其寫入新數據,因爲其他人同時嘗試打開它(通過只讀通過它們具有的VBA腳本)。VBA無法打開文件時的備用信息

這個特定的文件打開錯誤沒有被捕獲到錯誤處理代碼中,並且出現一個框並要求用戶進行結束或調試。有沒有辦法提出一個類似「無法處理請求的替代彈出框」,請等待幾秒鐘,然後重試。

+2

[THIS](http://stackoverflow.com/questions/9373082/detect-whether-excel-workbook-is-already-open-using-vba/9373914#9373914)會讓你開始。 –

+0

是的。顯示一些代碼笑我們可以幫助。 –

+0

問題不在於它已經打開。這是當它試圖在兩個不同的人同時打開時。有一個碰撞正在進行。 – Josh

回答

0

是的。在文件打開代碼周圍進行錯誤處理。像這樣:

on error goto FileError 
    'file opening code 
on error goto 0 


exit sub 
FileError: 
    msgbox("Could not process request. Please wait a few seconds and try again") 

基本上,OnError告訴該語句後面的所有內容,以便在發生錯誤時執行您指定的任何操作。在這種情況下,我已經放入goto FileError,所以如果在onError處理將停止並且轉到標記爲FileError的行後遇到任何錯誤。

然後OnError goto 0禁用該錯誤句柄。如果其他代碼生成錯誤,則不會由FileError句柄處理。 onerror的另一個選項是OnError Resume Next,它使程序跳過產生錯誤的代碼。所以它不會拋出錯誤,它會繼續處理。

請注意FileError標籤之前的Exit Sub,這樣代碼將不會進入FileError標籤,除非它通過生成的錯誤發送到那裏。