2017-01-13 1 views
0

bitte ist es möglich, diesen Code in der klarsten Version zu schreiben? Ich habe Blätter von 1-20 und Werte von 1-20 und brauche diese Prüfung auf jedem Blatt, wenn ich Arbeitsmappe öffne.Listen ein-/ausblenden, wenn der Wert wahr ist - Code löschen (VBA, EXCEL)

Private Sub Workbook_Open()  
If ThisWorkbook.Sheets("OPERACE_EXIST").Cells(2, 2).Value = True Then 

     Sheets("TP_OP_010").Visible = True 
     Else 
     Sheets("TP_OP_010").Visible = xlSheetVeryHidden 
     End If 


     If ThisWorkbook.Sheets("OPERACE_EXIST").Cells(3, 2).Value = True Then 

     Sheets("TP_OP_020").Visible = True 
     Else 
     Sheets("TP_OP_020").Visible = xlSheetVeryHidden 
     End If 

    If ThisWorkbook.Sheets("OPERACE_EXIST").Cells(4, 2).Value = True Then 

     Sheets("TP_OP_030").Visible = True 
     Else 
     Sheets("TP_OP_030").Visible = xlSheetVeryHidden 
     End If 

Antwort

1

Wenn die Arbeitsblatt Namenskonventionen sind:

Private Sub Workbook_Open() 
    Dim i As Integer 
    Dim SheetName As String 
    With ThisWorkbook.Sheets("OPERACE_EXIST") 
     For i = 2 To 31 
      SheetName = "TP_OP_" & Format((i - 1) * 10,"000") 
      ThisWorkbook.Sheets(SheetName).Visible = IIf(.Cells(i, 2).Value, xlSheetVisible, xlSheetVeryHidden) 
     Next 
    End With 

End Sub 

oder ein Array von Arbeitsblatt Namen verwenden:

Private Sub Workbook_Open() 
    Dim i As Integer 
    Dim SheetName As Variant 
    i = 1 

    With ThisWorkbook.Sheets("OPERACE_EXIST") 
     For Each SheetName In Array("TP_OP_010", "TP_OP_020", "TP_OP_030", "TP_OP_040", "TP_OP_050", "TP_OP_060", "TP_OP_070", "TP_OP_080", "TP_OP_090", "TP_OP_100", "TP_OP_110", "TP_OP_120", "TP_OP_130", "TP_OP_140", "TP_OP_150", "TP_OP_160", "TP_OP_170", "TP_OP_180", "TP_OP_190", "TP_OP_200") 
      i = i + 1 
      ThisWorkbook.Sheets(SheetName).Visible = IIf(.Cells(i, 2).Value, xlSheetVisible, xlSheetVeryHidden) 
     Next 
    End With 

End Sub 
+0

Ich bekomme Fehler Index außerhalb des Bereichs ThisWorkbook.Sheets (SheetName). Visible = IIf (.Cells (i, 2) .Wert, xlSheetVisible, xlSheetVeryHidden) Meine Werte beginnend von B2 bis B20 – Nataniell

+0

@Nataniell müssen Sie die Arbeitsblattnamen anpassen. Welche Version verwendest du? –

+0

Es funktioniert jetzt. Ich vergesse, TP_OP_200 hinzuzufügen. Sorry und danke für die Hilfe :) – Nataniell

2

Etwas Ähnliches (nicht sicher, obwohl über Ihre Arbeitsblatt Namensgebung, so dass Sie eine Anpassung an diesen Teil des Codes vornehmen müssen können) konsistent

Private Sub Workbook_Open() 

    Dim x As Long, c As Range 

    Set c = Me.Sheets("OPERACE_EXIST").Columns(2) 

    For x = 1 To 20 

     Me.Sheets("TP_OP_" & Format(x, "000")).Visible = _ 
      IIf(c.Cells(x + 1).Value, True, xlSheetVeryHidden) 

    Next x 


End Sub 
+0

Die Blattnamen werden um 10 erhöht. Interessant ist die Verwendung von "Ich" im Worksheet-Modul, um auf die Arbeitsmappe zu verweisen. –

+0

Nicht wirklich notwendig obwohl - sollte standardmäßig auf diese Arbeitsmappe ... –

Verwandte Themen