# [VBA] Excel 2010 Zeilen automatisch ausblenden



## DarthDeeger (7. August 2014)

Hallo,

ich habe folgendes Problem:

Auf einem Tabellenblatt werden alle Daten eingetragen die dann auf einem zweiten Blatt so ausgegeben werden, dass sie schön formatiert und druckfertig sind. (inkl. einiger Informationen aus einem dritten Blatt)
Ich möchte jetzt gerne, dass mittels Makro in der Druckvorlage alle Zeilen ausgeblendet werden die ncht benötigt werden.
Die Datentabelle enthält 25 Datenzeilen und 14 Spalten (diese werden z.T. automatisch via Formel gefüllt), die Druckvorlage hat für jede Informationszeile zwei verbundene Zeilen um die Daten darzustellen. Sprich wenn 1 Datenzeile im Datenblatt leer ist müssen zwei direkt untereinanderliegende Zeilen in der Druckvorlage entfernt werden.
Bisher habe ich folgendes zusammenbekommen:


```
Sub ausblenden()

j = 11

Dim check As Boolean

For i = 2 To 26
    If Tabelle4.Cells(i, 1) = "" Then
        'Wenn die Zelle i leer ist zur nächsten Zeile gehen.
    Else
        check = Tabelle4.Cells(i, 2)
        If check = False Then
            Tabelle3.Rows(j).EntireRow.Hidden = True
            Tabelle3.Rows(j+1).EntireRow.Hidden = True
        Else
            Tabelle3.Rows(j).EntireRow.Hidden = False
            Tabelle3.Rows(j+1).EntireRow.Hidden = False
        End If
    End If
    j = j + 2
Next i


End Sub
```

Excel gibt zwar keine Fehlermeldung aus, jedoch funktioniert es auch nicht. Wichtig wäre auch noch das das Ausblenden komplett automatisch geschieht ohne, dass das Makro manuell ausgeführt werden muss.

Ich bin für jede Hilfe dankbar


MfG


----------



## ColorMe (7. August 2014)

Also auf die Schnelle mal zu dem Druck Problem.
Du musst im VBA-Editor auf "DieseArbeitsmappe" doppelklicken. Dort findest du dann über dem Codefenster zweo Comboboxen.
In der ersten wählst du die Arbeitsmappe ("Workbook") und in der zweiten "BeforePrint".

Dürfte dir automatisch sowas erstellen:

```
Private Sub Workbook_BeforePrint(Cancel As Boolean)

End Sub
```
Dort schreibst du dann dein Makro hinein.

Zu dem anderen kann ich erst was sagen wenn ich daheim bin.


----------



## DarthDeeger (8. August 2014)

Leider führt diese Variante nicht zum gewünschten Ergebnis.

Ich erläutere nochmal kurz den Aufbau:

In Blatt1 werden allgemeine Kundendaten eingegeben

In Blatt2 werden Daten eingegeben um eine Vorlage für das Gespräch mit dem Kunden zu erstellen und am Ende zur Dokumentation auszudrucken (bleibt betriebsintern, daher ist die Formatierung nicht so wichtig) (Hier werden in den Kopf Daten aus Blatt1 übernommen)

In Blatt3 werden Daten aus Blatt2 übernommen und um weitere Angaben (die sich aus dem Gespräch ergeben haben ergänzt), anschließend wird manuell eine Reihenfolge vergeben (1,2,3,...) die über einen Button sortiert werden kann. Diese Reihenfolge steht in Spalte A.

Blatt4 ist das was am Ende für den Kunden ausgedruckt wird. Hier werden Daten aus Blatt1,2 und 3 zusammengeführt, nach bestimmten Kriterien formatiert und können nochmal kontrolliert werden.

Da maximal 25 Zeilen benötigt werden habe ich erstmal 25 Zeilen in Blatt4 vorgegeben wo die Formatierungsregeln etc. drinstehen. Ich möchte jetzt das bei jeder Eingabe in Blatt3 geprüft wird ob in einer Zeile in Spalte A etwas steht. Für jede leere Zeile soll auch eine Zeile in Blatt4 ausgeblendet werden und zwar bereits in Excel nicht nur für den Ausdruck.

Ich habe also in Blatt3 z.B. nur in 13Zeilen zahlen eingegeben und diese anschließend per Button sortiert, wenn ich jetzt auf Blatt4 klicke sollen nach Möglichkeit nur die Zeilen 10-22 überhaupt sichtbar sein (1-9 stellt den Kopf dar) und mit den entsprechenden Daten aus Blatt3 gefüllt.

Ich hoffe das ist so einigermaßen verständlich


MfG


----------



## DarthDeeger (21. August 2014)

Ok ich habe eine Möglichkeit gefunden das Problem zu lösen, ich poste hier mal den Code falls iwann jemand mal das gleiche Problem hat

```
Private Sub Worksheet_Calculate()

Dim i

Application.EnableEvents = False
Application.ScreenUpdating = False

    For i = 9 To 34
        If Range("A" & i) = "" And Range("B" & i) = "" Then
           Range("A" & i & ":A34").EntireRow.Hidden = True
        Else
           Range("A" & i).EntireRow.Hidden = False
        End If
    Next i
    
Application.ScreenUpdating = True
Application.EnableEvents = True
    
End Sub
```
Die Range Angaben usw. müssen dann natürlich auf die eigenen Bedürfnisse angepasst werden.

MfG


----------

