2011-03-30 210 views
3

在Excel論壇的幫助下,我創建了一個用戶登錄表單,我有5個用戶。每個用戶只能訪問分配給他/她的工作表。這工作正常。但現在我保護了「工作簿結構」,以避免用戶添加/刪除工作表。然後我登錄一次,而不是顯示登錄表單,錯誤信息在Excel VBA中彈出:Excel中的錯誤-1004 VBA-無法設置工作表類的可視屬性

錯誤-1004無法設置工作表類

當我調試的Visible屬性在工作表的可見屬性設置爲「True」,「False」或「xlSheetVeryHidden」的以下代碼中突出顯示該錯誤。

Private Sub Workbook_Open() 
    Dim wsSht As Worksheet 

    Worksheets("Splash").Visible = True 
    Worksheets("Users").Visible = False 
    For Each wsSht In Worksheets 
     If Not wsSht.Name = "Splash" Then wsSht.Visible = xlSheetVeryHidden 
    Next wsSht 
    With Worksheets("Splash") 
     .Visible = True 
     .Activate 
    End With 
    frmLogin.Show 
    bBkIsClose = False 

End Sub 

有沒有辦法解決這個問題,因爲我可以像密碼保護「工作簿結構」那樣訪問登錄表單?

回答

2

您是否在測試它的同時打開了另一個Excel工作簿?沒有明確提及您正在查找的圖書,因此如果您運行的代碼中存在「Splash」表單不可用的工作簿,宏將嘗試將所有表單設置爲隱藏狀態,這可能會引發此錯誤。

模擬它,打開一個新的Excel會話,並運行此宏:

Sub test() 

    Dim oSheet As Excel.Worksheet 

    For Each oSheet In Worksheets 

     oSheet.Visible = xlSheetVeryHidden 

    Next oSheet 

End Sub 

如果我不吠叫了錯誤的樹,你會得到同樣的錯誤。

爲了解決這個問題,只需將工作簿的名稱到您的循環,它會是這樣(很明顯,你必須確保有一個「撲通」一聲片,或會出現的錯誤):

For Each wsSht In Workbooks("Mybook.xlsm").Worksheets 
    If Not wsSht.Name = "Splash" Then wsSht.Visible = xlSheetVeryHidden 
Next wsSht 

Rgds

+0

@Tiago ....我正在做一個For-Each循環使用ActiveWorkbook來獲取牀單,我仍然得到這個錯誤。最初我無法訪問Visible屬性,但現在得到這個。有任何指針? (FYI - Excel 2007) – GoldBishop 2012-04-25 19:04:18

+0

@GoldBishop,嘗試在if子句之前添加一個'debug.print wsSht.Name'(打印循環表)。打開調試窗口(ctrl + G),看看打印的紙張名稱是否正確。 – 2012-04-25 22:47:27

1

您必須在代碼中取消保護和重新保護。缺點是你的密碼將在代碼中。

Private Sub Workbook_Open() 
    Dim wsSht As Worksheet 

    Me.Unprotect "password" 

    Me.Worksheets("Splash").Visible = True 
    Me.Worksheets("Users").Visible = False 
    For Each wsSht In Me.Worksheets 
     If Not wsSht.Name = "Splash" Then wsSht.Visible = xlSheetVeryHidden 
    Next wsSht 
    With Me.Worksheets("Splash") 
     .Visible = True 
     .Activate 
    End With 
    frmLogin.Show 
    bBkIsClose = False 

    Me.Protect "password", True, False 

End Sub 
+0

我已經使用了ur代碼,但它不保護工作簿結構 – loknath 2011-03-31 05:21:10

7

這是另一個關於這方面的問題。

您可以不是隱藏所有工作表中的工作簿。因此,如果您知道您將至少有一張將始終可見的工作表,請將其從隱藏處理中排除。

相關問題