bestimmte Zeilen unter Bedingung automatisch ein- oder ausblenden
#1
Hallo community,

leider habe ich nahzu keinerlei Ahnung von VBA und bin daher schon seit Tagen am suchen um mein Problem zu lösen. Ich habe jetzt einen code gefunden der auch funktioniert nur braucht es jetzt fast eine minute bis er fertig gerechnet hat um den befehl umzusetzen. Ihr seid jetzt meine letzte Hoffnung.

Problemstellung:
Ich benötige einen Code der zu beginn (beim öffnen der Datei) prüft ob in dem bereich von AU205:AU232 eine beliebige art von Inhalt steht. sollte in einer oder mehreren der Zellen ein Inhalt stehen so sollen nur die Zeilen dieser Zellen eingeblendet werden, während die anderen Zeillen dieser Zellen ausgeblendet werden.
Sobald jedoch in einer der Zellen ein inhalt eingetragen wird (mittels bezug über eine andere zelle) soll die Zeile automatisch eingeblendet werden. Andersherum soll aber auch wenn in diesen Zellen der Inhalt wieder entfernt wir die dazugehörigen Zeilen Automatisch ausgeblendet werden.

Nachfogend der derzeitige code:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xRg As Range
    Application.ScreenUpdating = False
        For Each xRg In Range("AU205:AU232")
            If (xRg.Value = "") Or (xRg.Value = "0") Then
                xRg.EntireRow.Hidden = True
            Else
                xRg.EntireRow.Hidden = False
            End If
        Next xRg
    Application.ScreenUpdating = True
End Sub


Falls Ihr mir helfen könntet wäre das echt super.
Antworten Top
#2
Hi,

wie du bemerkt hast, ist es nicht besonders geschickt immer alle Zellen zu prüfen und die entsprechende Zeile aus- bzw. einzublenden.
Sinnvoller ist es, zunächst einmal alle Zeilen einzublenden. Dann die Zeilen zu sammeln, die ausgeblendet werden sollen. Und dann diese auf einen Schlag auszublenden.
PHP-Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xRg As Range
Dim Aus 
As Range
Range
("205:242").Hidden False
For Each xRg In Range("AU205:AU232")
    If (
xRg.Value "") Or (xRg.Value "0"Then
        
If Aus is Nothing Then
            Set Aus 
xRg.EntireRow
        
Else
            
Set Aus Union(AusxRg.EntireRow)
        
End If
    
End If
Next xRg
If Not Aus Is Nothing Then Aus.Hidden True
End Sub 

Am sinnvollsten wäre es, die Zellen zu überwachen, die die Zellen AU205:AU232 beeinflussen. Und nur wenn eine dieser Zellen geändert wurde, dann die entsprechenden Zeilen aus- oder einzublenden. Aber dazu müsste man mehr über deine Datei wissen.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#3
Hallo HKindler,
ich habe Ihren code Ausprobiert und leider funktioniert er nicht bzw. es kommt eine Fehlermeldung.    
Antworten Top
#4
Hi vanDittrich,

wieso so förmlich? Im Forum wird üblicherweise das "Du" verwendet.

Ich habe den Code mal angepasst - und diesmal auch getestet.  32
Habe ihn auch so erweitert, dass er selbst bei einem Fehler in einer der Zellen nicht aussteigt.

PHP-Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xRg As Range
Dim Aus 
As Range
Rows
("205:242").Hidden False
For Each xRg In Range("AU205:AU232")
    If Not IsError(xRgThen
        
If (xRg "") Or (xRg "0"Then
            
If Aus Is Nothing Then
                Set Aus 
xRg
            
Else
                Set Aus Union(AusxRg)
            End If
        End If
    End If
Next xRg
If Not Aus Is Nothing Then Aus.EntireRow.Hidden True
End Sub 
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste