622 Aufrufe
Gefragt in Tabellenkalkulation von

Guten Tag, bitte um Hilfe.

Wenn in Tabelle1 die Zeile “B1“ oder “B2“ oder “B3“ leer ist soll die ganze Zeile 1, 2, oder 3 in Tabelle1, Tabelle2, Tabelle3 und Tabelle4 automatisch mit einem makro ausgeblendet werden.

Zudem möchte ich in Tabelle1 “A6“ ein makro (Schaltknopf) um alle 3 Zeilen in allen Tabellen wieder einzuschalten.

Danke.

8 Antworten

0 Punkte
Beantwortet von

Hallo Janina,

hier mal 3 Makros, die in das Modul Tabelle1 gehören.

Private Sub Worksheet_Calculate()
  For i = 1 To 4
    With Sheets("Tabelle" & i)
      .Rows("1:1").Hidden = Sheets("Tabelle1").Range("B1") = ""
      .Rows("2:2").Hidden = Sheets("Tabelle1").Range("B2") = ""
      .Rows("3:3").Hidden = Sheets("Tabelle1").Range("B3") = ""
    End With
  Next i
  If ActiveWindow.ScrollRow <= 4 Then ActiveWindow.ScrollRow = 1
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("B1:B3")) Is Nothing Then
    For Each c In Target.Cells
     For i = 1 To 4
      With Sheets("Tabelle" & i)
       If c.Row <= 3 Then .Rows(c.Row).Hidden = c.Value = ""
      End With
     Next i
    Next c
  End If
End Sub
Sub Einblenden()
  For i = 1 To 4
    With Sheets("Tabelle" & i)
      .Rows("1:1").Hidden = False
      .Rows("2:2").Hidden = False
      .Rows("3:3").Hidden = False
    End With
  Next i
  If ActiveWindow.ScrollRow <= 4 Then ActiveWindow.ScrollRow = 1
End Sub


Das erste Marko "Application Calculate" wird ausgeführt wenn du die Leerzelle per Formel berechnest. z.B. über =WENN(C9=1;1;"") Wenn du in C9 eine 1 einträgst wird die Zeile1 eingeblendet. Ist C9 jedoch <>1 wird sie ausgeblendet.

Das zweite Makro "Worksheet Change" wird ausgeführt wenn du per Direkteingabe, z.B. über die Taste ENTF, die Zellen löschst bzw. neu beschreibst. Ist B1="" dann wird zeile1 ausgeblendet, steht was drin wird sie eingeblendet.

Das dritte Makro "Einblenden" fügst du deinem Button hinzu. Hier werden alle 3 Zeilen eingeblendet.

Sollten deine Tabellen anders heißen, dann ersetzen Sheets("Tabelle" & i) durch Sheets(i) sowie Sheets("Tabelle1") durch Sheets(1)

Gruß Mr. K.

0 Punkte
Beantwortet von
Hallo Mr. K. vielen Dank, schon mal der richtige Ansatz.

Leider nicht ganz was ich möchte, Zeile ausblenden sollte automatisch gehen wenn in Spalte "B1 bis B3" keinen Eintrag gibt (Zelle leer auch keine Formel), nochmal vielen Dank.
0 Punkte
Beantwortet von

Hallo Janina,

Dann schmeiß einfach das erste Makro wieder raus. Das war ja nur ein Vorschlag, da ich nicht wusste, wie deine Tabelle aufgebaut ist. Das zweite Makro macht genau das was du suchst. Sobald du in Zelle B1:B3 einen Wert löschst wird die Zeile ausgeblendet. Falls das nicht das ist, was du suchst, dann schreib doch mal, wann das Ausblenden sonst stattfinden soll. Hier nochmal der Code für Tabelle1:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("B1:B3")) Is Nothing Then
    For Each c In Target.Cells
     For i = 1 To 4
      With Sheets("Tabelle" & i)
       If c.Row <= 3 Then .Rows(c.Row).Hidden = c.Value = ""
      End With
     Next i
    Next c
  End If
End Sub
Sub Einblenden()
  For i = 1 To 4
    With Sheets("Tabelle" & i)
      .Rows("1:1").Hidden = False
      .Rows("2:2").Hidden = False
      .Rows("3:3").Hidden = False
    End With
  Next i
  If ActiveWindow.ScrollRow <= 4 Then ActiveWindow.ScrollRow = 1
End Sub

Dem Button weist du einfach das Makro Tabelle1.Einblenden zu. Dann wird alles wieder eingeblendet.

Gruß Mr. K.

0 Punkte
Beantwortet von

Hallo guten Morgen Mr. K. vielen vielen Dank, genau das habe ich gesucht.

Hätte noch eine bitte, wie kann ich meine Tabellen Sheets(1) mit einem Passwort (Blattschutz) versehen aber trotzdem Spalten und Zeilen formatieren. Zeilen einfügen und später wieder löschen ohne eine Passwortabfrage beim starten der Datei. Danke

0 Punkte
Beantwortet von
Hallo Janina, welche Office-Version hast du? In einigen Versionen kannst du im "Blatt schützen"-Menü Häkchen setzen um zu bestimmen, was geschützt wird und was nicht. Entferne z.B. das Häkchen bei Zeilen einfügen. wenn du trotz aktivem Blattschutz Zeilen einfügen willst. Leider kann ich dir dabei nicht viel weiterhelfen, da meine Version diese Funktion nicht unterstützt.

Eine andere Variante wäre der Befehl. Sheets(1).Unprotect "Passwort" bzw. Sheets(1).Protect "Passwort". Diese kannst du über ein weiteres Makro laufen lassen und so schnell per Button entschützen. Bedenke aber, dass dann jeder der das Codefenster öffnet, dein Passwort sehen kann. Das kannst du nur vermeiden indem du das gesamte VBA-Projekt ebenfalls per Passwort schützt. Das kannst du z.B. über Menü "Extras" -> "Eigenschaften von VBA-Project" erreichen.
0 Punkte
Beantwortet von

Hallo ich habe 

  1. Office 2013, könntest du mir diese makro überarbeiten es befindet sich in "DieseArbeitsmappe" ODER soll es in "Tabelle1".
  2. Ich möchte Spalten und Zeilen formatieren. Zeilen einfügen und später wieder löschen.
  3. Die Tabellen1, 2, 3 und 4 sind Blattgeschützt und sobald ich die Datei öffne kommt immer die Meldung "Blattschutz aufheben", was habe ich hier falsch gemacht. 

Sub Workbook_Open()
'für alle Blätter mit Passwortschutz
ActiveSheet.Protect userinterfaceonly:=True, Password:="test" 'Passwort anpassen
ActiveSheet.EnableAutoFilter = True 'ermöglicht Autofilter
ActiveSheet.EnableOutlining = True 'ermöglicht Gruppierung/Gliederung
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False, _
AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, _
AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowInsertingHyperlinks:=True, _
AllowDeletingColumns:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True 'setzt die Einstellungen, die im Blattschutz hinterlegt wurden (z.B. _
wurde erlaubt Zeilen zu löschen...)
End Sub

Besten Dank.

0 Punkte
Beantwortet von
Hallo Janina,

wie gesagt, kann ich dir hier leider nicht mehr weiterhelfen. Zum Überarbeiten hab' ich nicht die richtige Version. Ich kann also nur raten. Ein Workbook Open Makro gehört in "DieseArbeitsmappe". Punkt 1 ist also erstmal richtig. Dir ist schon bewusst, dass du damit bei jedem Öffnen den Schutzmodus neu aktivierst? Soweit ich sehen kann, hast du alle Allows auf True, sodass es möglich sein müsste, deine Wünsche laut Punkt 2 ebenfalls zu erfüllen. Für mich sieht der Code in Ordnung aus. Was mich allerdings wundert ist, dass du zweimal ActiveSheet.Protect drin stehen hast. Hat das der Makrorekorder so ausgespuckt? Die dahinter liegenden Parameter müssten eigentlich alle an ein Protect geknüpft werden. wann genau kommt denn die Meldung "Blattschutz aufheben"? Schon während des Makros oder erst danach? Bleibt das Makro an einer Zeile stehen? Vielleicht müssen die Enable-Zeilen vor Protect ausgeführt werden. Wie gesagt alles nur Theorie.
0 Punkte
Beantwortet von

Hallo Mr. K. sobald ich die Datei ÖFFNE kommt die Meldung "Blattschutz aufheben", den Rest werde ich versuchen, besten Dank.

...