Ich versuche, alle Zeilen mit dem Wert „xx“ in Spalte A auszublenden und die Zeilen mit „a“ in Spalte A nicht auszublenden. Der Bereich reicht von A8:A556. Dieses Makro muss durch eine Änderung in Zelle C4 ausgelöst werden.
Irgendeine Idee, warum es nicht funktioniert? Hier ist der aktuelle Versuch:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(True, True) = "$C$4" Then
If Range("A8:A555").Value = "xx" Then
Rows("8:555").EntireRow.Hidden = True
ElseIf Range("A8:A555").Value = "a" Then
Rows("8:555").EntireRow.Hidden = False
End If
End If
End Sub
Danke!
BEARBEITEN:
Hallo Fixer1234, hier sind die Einzelheiten:
- Wenn das Makro korrekt funktioniert, dürfen die beiden Namen „xx“ und „a“ nicht zusammen vorkommen.
- Nur "xx" Zeilen dürfen ausgeblendet werden
- „xx“-Werte dürfen nicht mit Werten kombiniert werden, die nicht ausgeblendet werden können.
- „a“-Werte dürfen nicht mit Werten kombiniert werden, die ausgeblendet werden müssen.
- es gibt andere Zeilen, die weder „xx“ noch „a“ enthalten und nicht ausgeblendet werden müssen (sollte ich diesen Spalten ein „a“ hinzufügen oder das IfElse vollständig entfernen?).
- Die Zeile „xx“ enthält andere Formeln. Ein leeres Ergebnis der Formel bedeutet, dass die Zeile ausgeblendet werden muss.
- „a“-Zeilen haben die gleiche Formel, erzeugen aber ein Ergebnis und dürfen nicht ausgeblendet werden.
Laufzeitfehler '13': Typenkonflikt und dann geht der Debug zum ersten
If Range("A8:A555").Value = "xx" Then
Antwort1
Sie können nicht alle Werte in einem Bereich mit testen Range("A8:A555").Value = "xx"
. Es wird ein Typkonfliktfehler ausgegeben.
Sie müssen jede Zelle im Bereich durchlaufen und einzeln prüfen, ob sie Value
„xx“ entspricht.
Um die Ausführung des Codes zu beschleunigen, verbergen Sie Zeilen nicht gleich, wenn Sie sie erkennen, sondern erstellen Sie eine Range
Liste mit Ranges
zu verbergenden Zeilen und verbergen Sie sie dann alle auf einmal.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range
Dim RangeToHide As Range
'Test if Target is C4
If Not Intersect(Target, [C4]) Is Nothing Then
'Loop through each cell in range and test if it's "xx"
For Each cel In Range("A8:A555")
If cel = "xx" Then
If RangeToHide Is Nothing Then
'Initialise RangeToHide because Union requires at least 2 ranges
Set RangeToHide = cel
Else
'Add cel to RangeToHide
Set RangeToHide = Union(RangeToHide, cel)
End If
End If
Next
RangeToHide.EntireRow.Hidden = True
End If
End Sub
Antwort2
Verwenden Sie diesen VBA-Code als Standardmodul. Er hilft Ihnen, alle Zeilen auszublenden, die entweder XX
oder xx
in der Spalte enthalten A
.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(True, True) = "$C$4" Then
Dim i As Integer
Application.ScreenUpdating = False
For i = 8 To 255
If Sheets("Sheet1").Range("A" & i).Value = "XX" Or Sheets("Sheet1").Range("A" & i).Value = "xx" Then
Rows(i & ":" & i).EntireRow.Hidden = True
End If
Next i
End If
Application.ScreenUpdating = True
End Sub
Achtung
Sie müssen keinen Code verwenden, um Zeilen mit a
oder sichtbar zu machen A
, da diese bereits sichtbar sind. Und vor allem verbirgt der verwendete Code bestimmte Zeilen in der Spalte A
.
Antwort3
Wie verstecke ich einzelne Zeilen?
Ich denke, das ist so:
Private Sub CheckBox1_Click()
If CheckBox1 = False Then
[15:15].EntireRow.Hidden = True
[3:3].EntireRow.Hidden = True
Else
[15:15].EntireRow.Hidden = False
[3:3].EntireRow.Hidden = False
End If
Freundliche Grüße
Mattias