2017-09-22 5 views
1

Ich kann nicht scheinen, dass dieser Code wie beabsichtigt zusammenarbeitet. Ich denke, es ist ein einfacher logischer Fehler.Ein- und Ausblenden von Zeilen basierend auf einem Zellenwert (VBA)

If Worksheets("input").Range("B31").Value = "?TEXT" Then 
    Worksheets("Customer Report").Rows("22").EntireRow.Hidden = True 
    Worksheets("Customer Report").Rows("23").EntireRow.Hidden = False 
Else 
    Worksheets("Customer Report").Rows("23").EntireRow.Hidden = True 
    Worksheets("Customer Report").Rows("22").EntireRow.Hidden = False 
End If 

Das Ziel ist es, dass, wenn Zelle B31 in Blatt 1 enthält „Blah blah TEXT“ dann 22 Zeile zu verstecken und zeigen Zeile 23. Wenn es nur enthält „Blah blah“ dann 23 Zeile 22 und auszublenden Reihe zu zeigen, .

+0

Wird "TEXT" immer am Ende sein? – Moacir

+0

Ja, ich war unsicher, ob die Wildcard mit * oder? –

Antwort

1

Verwenden Sie Like mit * als Platzhalter.

Worksheets("input").Range("B31").Value Like "*TEXT"

Auch gibt es keine Notwendigkeit für die Falls. Wir können den Test einfach machen.

Rows().Hidden = 1 = 1

Die 1=1 wird auf true beheben und die Zeile wird ausgeblendet werden.

Auch Rows().EntireRow ist redundant.

Worksheets("Customer Report").Rows("22").Hidden = Worksheets("input").Range("B31").Value Like "*TEXT" 
Worksheets("Customer Report").Rows("23").Hidden = Not Worksheets("input").Range("B31").Value Like "*TEXT" 

Wir können die Menge von doppelten weiteren Eingabe verringern:

Dim rng As Range 
Set rng = Worksheets("input").Range("B31") 
With Worksheets("Customer Report") 
    .Rows("22").Hidden = rng.Value Like "*TEXT" 
    .Rows("23").Hidden = Not rng.Value Like "*TEXT" 
End With 
+0

Ausgezeichnet, danke! –

Verwandte Themen