2012-05-01 190 views
0

我想在VBA的Excel工作簿中保護工作表(僅可見)。我想允許用戶在「工作表2」和「工作表3」上編輯對象,但不能在其他工具上編輯對象。如何使用Excel VBA中的不同選項保護工作表?

這是我正在使用的代碼。

Public Sub WBOpen() 
    Dim sh As Worksheet 
    Dim allowObjects As Boolean 
    For Each sh In Sheets 
    If sh.Visible = xlSheetVisible Then 
     **If sh.Name = "Sheet 2" Or "Sheet 3" Then** 
     allowObjects = True 
     Else 
     allowObjects = False 
     End If 
     sh.Protect Password:=pw(sh), DrawingObjects:=allowObjects, Contents:=True, Scenarios:=True, AllowFormattingRows:=True, AllowFiltering:=True, UserInterfaceOnly:=True 
    End If 
    Next 
End Sub 

我得到了一個類型不匹配錯誤,我用**包裝了一行。誰能告訴我我要去哪裏?

謝謝

+3

您是否嘗試過:如果sh.Name =「Sheet 2」或sh.Name =「Sheet 3」 – Randy

+0

另外,請確保在查看選項卡時引用的「Sheet 2」實際上具有空格。默認情況下,這些選項卡沒有空格(例如「Sheet2」)。 – Zairja

+0

蘭迪 - 仍然有相同的錯誤 – user1187347

回答

0

這行應該是:

If sh.Name = "Sheet 2" Or sh.Name = "Sheet 3" Then 

類型不匹配錯誤出現,因爲你是治療的字符串("Sheet 3")爲布爾(True/False)。

+0

謝謝你。還要感謝@Randy提供上述建議。 – user1187347

0

不知道爲什麼它仍然有@Randy注意的是固定的錯誤後的錯誤,但我可以告訴你我做什麼。而不是遍歷每張紙,我訪問我要直接保護的工作表。這是通過代碼名稱完成的,而不是GUI中的名稱。例如,在VBA編輯器中,在Project Explorer中的「Microsoft Excel Objects」文件夾下,單擊我的「測試」工作表並查看它具有「TestingSheet」的「(Name)」屬性。請注意,這可能只是一個可選步驟,因爲我的其他工作表也有名稱 - 比如「Sheet1」。然後在代碼中,我只需鍵入:

TestingSheet.Protect , True, True, True, True 

如果你這樣做,你將避免運行時錯誤,而你也將在工作表的名稱GUI方面更加靈活。

+0

感謝您的回答,我會爲您的未來發展考慮您的意見。 – user1187347

相關問題