2016-03-01 91 views
0

我有一個工作簿,並希望一旦用戶從下拉列表中選擇了一個選項,就可以隱藏其他幾張工作表。代碼是目前 -使用宏隱藏選項卡

Sub select_role() 

Dim role As String 

role = Sheet3.Cells(11, "F").Value 

Select Case role 
Case "Project Manager" 
Sheet10.Visible = xlSheetHidden 
Sheet11.Visible = xlSheetHidden 
Sheet4.Visible = xlSheetHidden 
Sheet6.Visible = xlSheetHidden 
Sheet7.Visible = xlSheetHidden 
Sheet8.Visible = xlSheetHidden 

Case "Business Analyst" 
Sheet10.Visible = xlSheetHidden 
Sheet11.Visible = xlSheetHidden 
Sheet5.Visible = xlSheetHidden 
Sheet6.Visible = xlSheetHidden 
Sheet7.Visible = xlSheetHidden 
Sheet8.Visible = xlSheetHidden 

Case "Developer" 
Sheet10.Visible = xlSheetHidden 
Sheet11.Visible = xlSheetHidden 
Sheet4.Visible = xlSheetHidden 
Sheet6.Visible = xlSheetHidden 
Sheet5.Visible = xlSheetHidden 
Sheet8.Visible = xlSheetHidden 

Case "Architect" 
Sheet10.Visible = xlSheetHidden 
Sheet11.Visible = xlSheetHidden 
Sheet4.Visible = xlSheetHidden 
Sheet6.Visible = xlSheetHidden 
Sheet7.Visible = xlSheetHidden 
Sheet5.Visible = xlSheetHidden 

Case "Payments" 
Sheet5.Visible = xlSheetHidden 
Sheet11.Visible = xlSheetHidden 
Sheet4.Visible = xlSheetHidden 
Sheet6.Visible = xlSheetHidden 
Sheet7.Visible = xlSheetHidden 
Sheet8.Visible = xlSheetHidden 

Case "New Role" 
Sheet10.Visible = xlSheetHidden 
Sheet5.Visible = xlSheetHidden 
Sheet4.Visible = xlSheetHidden 
Sheet6.Visible = xlSheetHidden 
Sheet7.Visible = xlSheetHidden 
Sheet8.Visible = xlSheetHidden 

End Select 

End Sub 

但是我調試它,它進入的情況下,一個正常,然後當它從第一張到列表中的第二個動作,我得到一個運行時錯誤「1004」。

任何幫助,將不勝感激。

+1

'Sheet11'幾乎總是要隱藏的第二張表。它受保護嗎? – Adam

+0

在哪一行會得到運行時錯誤?你檢查是否存在所有表單嗎?它似乎只是隱藏和不顯示任何工作表。也許工作表已經隱藏了?工作簿(或任何工作表)是否受到保護? – Ralph

+0

新角色是否也會發生這種情況,這是唯一一個沒有sheet11作爲第二個值的人 –

回答

0

我鼓勵你使用這種模式。這是更易於維護和更簡潔:

Sub Select_Role() 
    Dim role As String, shts(), sht As Integer 

    role = Worksheets("Sheet3").Range("F11") 

    Select Case role 
     Case "Project Manager" 
      shts = Array(10, 11, 4, 6, 7, 8) 
     Case "Business Analyst" 
      shts = Array(10, 11, 5, 6, 7, 8) 
     Case "Developer" 
      shts = Array(10, 11, 4, 6, 5, 8) 
     Case "Architect" 
      shts = Array(10, 11, 4, 6) 
     Case "New Role" 
      shts = Array(10, 5, 4, 6, 7, 8) 
    End Select 

    For sht = 0 To UBound(shts) 
     If Worksheets("Sheet" & shts(sht)).Visible Then 
      Worksheets("Sheet" & shts(sht)).Visible = xlSheetHidden 
     End If 
    Next sht 

End Sub 
  • 每個Array持有你要隱藏的工作表引用。它們可以是表格名稱或索引。
  • 您可以輕鬆更新每個陣列以滿足您的需求以及添加和刪除新案例
  • 循環首先檢查工作表是否可見,但您可以添加更多條件,例如protected,xlVeryHidden等...
+0

感謝亞歷克斯,我試過你的解決方案,但它會拋出一個下標超出範圍錯誤。 If then語句的運行時錯誤「9」。 –

+0

嗯。你沒有把excel的數組索引設置爲'1',你是否是一個全局選項?它在測試中爲我工作。 –

相關問題