2017-03-06 149 views
0

我正在使用vba嘗試打開工作簿(如果它尚未打開)。VBA打開工作簿錯誤?

我遇到的問題是有時候工作簿可能會被另一個用戶打開,所以如果工作簿被鎖定,那麼我想向用戶提供一個選項來以只讀方式打開工作簿。

代碼:

'Open Planner 
On Error Resume Next 
Set WB = Workbooks("2017 Planner.xlsx") 
On Error GoTo 0 
If WB Is Nothing Then 'open workbook if not open 
On Error GoTo Message4 
Set WB = Workbooks.Open("G:\BUYING\Food Specials\2. Planning\1. Planning\1. Planner\8. 2017\2017 Planner.xlsx", Password:="samples", WriteResPassword:="samples", UpdateLinks:=False) 
Message4: 
Dim answer2 As Integer 
answer2 = MsgBox("Oooops!" & vbNewLine & vbNewLine & "We had trouble opening the planner with Read/Write access. We can open the file in Read-Only but this means the planner won't automatically be updated. Would you like to continue?", vbYesNo + vbQuestion, "Notice") 
If answer2 = vbNo Then 
Exit Sub 
Else 
Set WB = Workbooks.Open("G:\BUYING\Food Specials\2. Planning\1. Planning\1. Planner\8. 2017\2017 Planner.xlsx", ReadOnly:=True, IgnoreReadOnlyRecommended:=True) 
End If 
End If 

出於某種原因,我在這條線得到一個錯誤1004:

Set WB = Workbooks.Open("G:\BUYING\Food Specials\2. Planning\1. Planning\1. Planner\8. 2017\2017 Planner.xlsx", ReadOnly:=True, IgnoreReadOnlyRecommended:=True) 
+0

您是否嘗試過我碼? – BOB

+0

您在第一次打開電話時提供了'Password:=「samples」',但不在第二次打開。 –

回答

0

試試這個:

dim link as string 

link= "G:\BUYING\Food Specials\2. Planning\1. Planning\1. Planner\8. 2017\2017 Planner.xlsx" 
Set wb = Workbooks.Open(Filename:=link, UpdateLinks:=False, ReadOnly:=True, IgnoreReadOnlyRecommended:=True) 
0

只是爲了檢查,儘量把文件在沒有任何特殊字符的某個目錄中。

ie:C:\ workbooks

確保打開文件的權限。

0

你可以測試它是否已經打開:

Sub Test() 

    Dim sFilePath As String 
    Dim wrkBk As Workbook 

    sFilePath = "G:\BUYING\Food Specials\2. Planning\1. Planning\1. Planner\8. 2017\2017 Planner.xlsx" 

    If WorkBookIsOpen(sFilePath) Then 
     Set wrkBk = Workbooks.Open(sFilePath, ReadOnly:=True) 
    Else 
     Set wrkBk = Workbooks.Open(sFilePath) 
    End If 

End Sub 

Public Function WorkBookIsOpen(FullFilePath As String) As Boolean 

    Dim ff As Long 

    On Error Resume Next 

    ff = FreeFile() 
    Open FullFilePath For Input Lock Read As #ff 
    Close ff 
    WorkBookIsOpen = (Err.Number <> 0) 

    On Error GoTo 0 

End Function 

由於WorkBookIsOpen返回boolean和ReadOnly屬性的函數期望你可以使用這個短程序一個布爾值:

Sub Test2() 

    Dim sFilePath As String 
    Dim wrkBk As Workbook 

    sFilePath = "G:\BUYING\Food Specials\2. Planning\1. Planning\1. Planner\8. 2017\2017 Planner.xlsx" 

    Set wrkBk = Workbooks.Open(sFilePath, ReadOnly:=WorkBookIsOpen(sFilePath)) 

End Sub