2016-10-17 2 views
0

Ich möchte bestimmte Spalten in meinem Excel-Arbeitsblatt ("Vorlagenkonto") basierend auf einem Wert aus einer Auswahlliste, die in Zelle AC5 ausgewählt ist, ausblenden.Ausblenden von Spalten in Excel basierend auf Zellenwert

Die Logik ist wie folgt:

1) Ist die Auswahlliste Wert in Zelle AC5 ist „Energie und Ressourcen“, dann würde ich die Spalten BJ mögen: BO versteckt werden.

2) Ist die Auswahlliste Wert in Zelle AC5 ist „Verteidigung“, dann würde ich die Spalten BP mag: CA versteckt werden und so weiter ..

3) Else wenn AC5 enthält keine der Auswahllistenwert in AC5 dann nichts verstecken

Der Code, den ich versuchte, sieht so aus, aber es funktioniert nicht. Kann mir bitte jemand etwas mitteilen?

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Dim cellvalue As String 
Dim ws As Worksheet 
Set ws = Sheet("Template account") 

If cellvalue Like "*Energy and Resources*" Then 
Columns("BJ:BO").EntireColumn.Hidden = True 
Else 
If cellvalue Like "*Defence*" Then 
Columns("BP:CA").EntireColumn.Hidden = True 
Else 
Exit Sub 
End If 
End Sub 
+0

Sie nie 'Target' verwenden. Ich denke, du musst nur 'cellvalue' durch' Target.Value' ersetzen und es sollte funktionieren. Vielleicht möchten Sie die Spalten mit 'ws.Columns (...' ebenfalls qualifizieren. – BruceWayne

+1

Ich bezweifle, dass Ihr Code sogar kompiliert. Ich würde erwarten, dass VBA sich über ein fehlendes 'End If' beschweren würde benutze 'ElseIf' anstelle von' Else {newline} If' ?. Auch der letzte 'Else'-Block ist redundant, und 'cellValue' wird benutzt, bevor ihm etwas zugewiesen wird, also wird es immer eine leere Zeichenkette sein, also keine Die Bedingungen können immer funktionieren. 'Sheets' sollten' Worksheets' sein, und 'Columns' bezieht sich implizit auf das aktive Blatt, Sie sollten stattdessen" Target.Parent "verwenden oder zumindest mit diesem vergleichen, um sicherzugehen, dass Sie es sind Arbeiten am richtigen Arbeitsblatt –

Antwort

1

Platzieren Sie Ihren Code unter Workbook_SheetChange. Derzeit wird das Ereignis, unter dem Sie sich befinden, nur ausgelöst, wenn Sie eine andere Zelle auswählen und nicht, wenn tatsächliche Änderungen in Zellen stattfinden. Auch als @BruceWayne besagt, dass Sie nie den Wert der Zelle AC5 an Ihre cellvalue Variable übergeben. Code mit einigen Änderungen:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    If Sh.Name = "Template account" And Target.Address = "$AC:$5" Then 
     Application.EnableEvents = False 
     Dim cellvalue As String 
     cellvalue = Target.Value2 

     If cellvalue Like "*Energy and Resources*" Then 
      Sh.Columns("BJ:BO").EntireColumn.Hidden = True 
     ElseIf cellvalue Like "*Defence*" Then 
      Sh.Columns("BP:CA").EntireColumn.Hidden = True 
     Else 
      Sh.Columns("BJ:BO").EntireColumn.Hidden = False 
      Sh.Columns("BP:CA").EntireColumn.Hidden = False 
     End If 
     Application.EnableEvents = False 
    End If 
End Sub 

Eine Überprüfung hinzugefügt, um zu bestätigen, dass sich Änderungen auf dem richtigen Blatt und der richtigen Zelle befinden. Deaktivierte Ereignisse, während der Code ausgeführt wird, sodass das Ausblenden der Spalten das Ereignis nicht erneut auslöst. Am Ende aktiviert. Hinzugefügt, die Spalten wieder auf dem Else zeigend. Habe nicht getestet.

+1

1) Das Ausblenden von Spalten löst kein Blattwechselereignis aus. Da sowohl das Auswahllistenfeld als auch die Spalten, die ausgeblendet/aufgedeckt werden sollen, im Arbeitsblatt "Vorlagenkonto" vorhanden sind, ist es nicht erforderlich, einen Arbeitsbereichs-Ereignishandler zu verwenden, und es genügt, ein Arbeitsblatt im relevanten Arbeitsblattcodefenster zu schreiben. 2) 'Target.Address =" $ AC: $ ​​5 "muss" Target.Address = "$ AC $ 5' sein. 3)' cellvalue Like "* Energie und Ressourcen *" '(und dergleichen) entspricht nicht der Erzählung von OP _ "Wenn der Auswahllistenwert in der Zelle AC5" Energie und Ressourcen "ist" _ – user3598756

2

eine Änderung in einem Zellenwert erkennen Sie Worksheet_Change() Ereignishandler

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address(False, False) = "AC5" Then '<-- check for changed cell to be in AC5 
     Select Case Target.Value '<-- act correspondingly to changed cell value 
      Case "Energy and Resources" 
       Columns("BJ:BO").EntireColumn.Hidden = True 
      Case "Defence" 
       Columns("BP:CA").EntireColumn.Hidden = True 
      Case "...." 
       ' go on with other cases 
     End Select 
    End If 
End Sub 

sollten Sie wollen Spalten wieder einblenden BJ verwenden müssen: BO und BP: CA, wenn weder "Energy and Resources" noch "Defense" ist der Wert der geänderten Pickup-Zelle, dann ändert sich der Code leicht im letzten Teil der Select Case Block

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address(False, False) = "AC5" Then '<-- check for changed cell to be in AC5 
     Select Case Target.Value '<-- act correspondingly to changed cell value 
      Case "Energy and Resources" 
       Columns("BJ:BO").EntireColumn.Hidden = True 
      Case "Defence" 
       Columns("BP:CA").EntireColumn.Hidden = True 
      Case Else 
       Union(Columns("BJ:BO"), Columns("BP:CA")).EntireColumn.Hidden = False 
     End Select 
    End If 
End Sub 
+0

Ihr zweites Beispiel könnte besser geschrieben werden als '... Then'' Spalten ("BJ: BO"). EntireColumn.Hidden = Target.Value = "Energy and Resources" '' Spalten ("BP: CA"). EntireColumn.Hidden = Target.Value = "Defense" '' End If ... '- das stellt sicher, dass die" Defense "-Spalten sichtbar sind, wenn" Energy and Ressourcen "ausgewählt und umgekehrt. Im Moment könnten beide Gruppen von Spalten versteckt werden. (Aber vielleicht will das OP?Es scheint komisch, einen von mehreren Datenblöcken zu verstecken. Es ist üblicher, einen Block sichtbar zu machen, während alle anderen ausgeblendet werden. – YowE3K

+0

Hallo, vielen Dank für Ihre Vorschläge! Gibt es eine Möglichkeit, dass ich die Spalten beim Löschen des Wertes in Zelle AC5 "einblenden" kann? Derzeit, wenn ich einen Wert in AC5 eingeben, dann sind bestimmte Spalten ausgeblendet. Wenn ich einen anderen Wert in AC5 eingeben, bleiben die zuvor verborgenen Spalten zusammen mit den neu versteckten Spalten verborgen. – Morpheus

+0

Sie sind willkommen. Ohne genau das zu bekommen, wonach Sie gefragt haben, kann ich antworten: "Ja, das ist möglich", aber Sie sollten besser das gesamte Verhalten des AC5-Zellen-Editiervorgangs detailliert beschreiben. – user3598756

Verwandte Themen