Supportnet / Forum / Tabellenkalkulation
Makro: Spaltenbreite und Zeilenhöhe bei bestimmten Kriterien auf 0 setzen
Frage
Hallo,
ich habe folgendes Problem: eine Excel-Datei mit Gruppierungen, in denen sich ausgeblendete Zeilen befinden. Wenn die Grupperiung erweitert wird, werden auch die ausgeblendeten Zellen sichtbar.
Gibt es mit VBA eine Möglichkeit, die Spaltenbreite bzw. die Zeilenhöhe auf 0 zu setzen, wenn in Spalte A bzw. Zeile 1 ein gewisser Wert steht?
Vielen Dank schon mal.
LG malli
Antwort 1 von Martina
Hallochen,
da musst du dir ein Makro schreiben.
Machst eine Abfrage, ob sich in den Zellen ein best. Wert befindet.
Wenn ja dann für Spaltenbreite = 0 in z.B. Spalte D
und für Zeilenbreite = 0 in z.B. Zeile 6
LG Martina
da musst du dir ein Makro schreiben.
Machst eine Abfrage, ob sich in den Zellen ein best. Wert befindet.
Wenn ja dann für Spaltenbreite = 0 in z.B. Spalte D
Columns("D:D").Select
Selection.ColumnWidth = 0
und für Zeilenbreite = 0 in z.B. Zeile 6
Rows("6:6").Select
Selection.RowHeight = 0
LG Martina
Antwort 2 von malli
Hallo Martina,
vielen Dank für deine Antwort.
Meine Kenntnisse reichen leider nicht aus, um ein Makro mit einer Abfrage hinzubekommen.
Könnte mir da vielleicht nochmal jemand helfen?
LG malli
vielen Dank für deine Antwort.
Meine Kenntnisse reichen leider nicht aus, um ein Makro mit einer Abfrage hinzubekommen.
Könnte mir da vielleicht nochmal jemand helfen?
LG malli
Antwort 3 von Denkanstoßer
Hi
Nachstehende Anweisungen bewirken, dass wenn in Zelle A1 eine "0" steht, dass die Spalte F und die Zeile 5 ausgeblendet werden. Eine "1" in A1 stellt die Orginalgrößen wieder her.
Einzufügen ind den Codebereich des Tabellenblattes wo es wirken soll. Alt+F11| F7
mfg
Nachstehende Anweisungen bewirken, dass wenn in Zelle A1 eine "0" steht, dass die Spalte F und die Zeile 5 ausgeblendet werden. Eine "1" in A1 stellt die Orginalgrößen wieder her.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
If Target.Value = "1" Then
Columns("F:F").ColumnWidth = 10.71
Rows("5:5").RowHeight = 12.75
End If
If Target.Value = "0" Then
Columns("F:F").ColumnWidth = 0
Rows("5:5").RowHeight = 0
End If
End Sub
Einzufügen ind den Codebereich des Tabellenblattes wo es wirken soll. Alt+F11| F7
mfg
Antwort 4 von malli
Danke, aber leider schaffe ich es nicht mal, das zum Laufen zu bringen. Wenn ich einfüge und dann ausführen will, kommt immer das Fenster "Makros", aber da kann ich nur ein neues Makro anlegen.
Ich glaube aber, dass es auch noch nicht ganz die Funktion ist, die ich bräuchte.
Ich versuch's mal mit einem Beispiel zu erklären:
Die Zeilen 1-5 sind gruppiert und die Details ausgeblendet, das heisst sichtbar ist nur Zeile 5. Die Zeilen 1 und 4 wären aber sowieso ausgeblendet. Diese sollten nun auf Zeilenhöhe 0 gesetzt werden, aufgrund dessen, dass in Zelle A1 und A4 z.B. "Ausblenden" steht.
LG malli
Ich glaube aber, dass es auch noch nicht ganz die Funktion ist, die ich bräuchte.
Ich versuch's mal mit einem Beispiel zu erklären:
Die Zeilen 1-5 sind gruppiert und die Details ausgeblendet, das heisst sichtbar ist nur Zeile 5. Die Zeilen 1 und 4 wären aber sowieso ausgeblendet. Diese sollten nun auf Zeilenhöhe 0 gesetzt werden, aufgrund dessen, dass in Zelle A1 und A4 z.B. "Ausblenden" steht.
LG malli
Antwort 5 von Marie
Zitat:
Einzufügen ind den Codebereich des Tabellenblattes wo es wirken soll.
Einzufügen ind den Codebereich des Tabellenblattes wo es wirken soll.
Das bedeutet, wenn der Code in Tabellenblatt 1 laufen soll, dann klickst Du auf Alt+F11 und dort links oben auf Tabelle 1, dann geht ein leeres Codefenster auf, dort kopierst du den Code von Denkanstoßer rein und speicherst ab. Dann lässt Du den Cursor in dem Code und klickst im Menü auf den Pfeil unter dem Wort Testen.
wenn Du das gemacht hast schreibste mal exakt auf, was dann passiert, was nicht so passieren soll, bzw wenn eine fehlermeldung kommt exakt den Text. Habe deine Fragen und den Code nicht durchgelesen, weil ich glaube, dass Du daran erstmal gescheitert bist, dass Du den Code nicht richtig einfügst.
Gruß Marie
Antwort 6 von malli
Das mit dem Einfügen ist mir grundsätzlich mal klar. Nur dass sich eben beim Ausführen immer das Fenster "Makros" öffnet. Sonst tut sich nichts.
Testen gibt's bei mir nicht, ich hätte Ausführen gewählt.
LG malli
Testen gibt's bei mir nicht, ich hätte Ausführen gewählt.
LG malli
Antwort 7 von Marie
Dann hast Du den Code vermutlich nicht in Visual Basic eingefügt???
Gruß Marie
Gruß Marie
Antwort 8 von malli
Meiner Meinung nach schon ... hab' mal einen Screenshot gemacht.
http://img519.imageshack.us/img519/3329/bildjt8.jpg
LG malli
http://img519.imageshack.us/img519/3329/bildjt8.jpg
LG malli
Antwort 9 von Martina
Hallochen,
Malli, dein Macro ist aber noch nicht komplett.
Du musst da noch eine Abrage mit reinbringen:
Eine andere Zuweisung der Spaltenbreite bzw. Zeilenhöhe würde ich weglassen. Weil: Wenn du einmal die Optionen auf 0 gesetzt hast, diese sicher nicht wieder auf einen Wert gesetzt werden soll. Die Spalten und Zeilen sollen doch sicher "ausgeblendet" bleiben.
LG Martina
Malli, dein Macro ist aber noch nicht komplett.
Du musst da noch eine Abrage mit reinbringen:
'zuerst definierst du dir Zeile und Spalte und den Wert nach dem du suchst, damit du das eigentliche Makro nicht bei jeder neuen Abfrage ändern musst.
Spalte = "D"
Zeile = 2
suche= "xyz"
'oder wenn du nach einer Ziffer (z.B 12) suchst
suche = 12
'du kannst auch noch vonZeile und bisZeile definieren.
vonZeile = 2
bisZeile = 200
'und hier nun das eigentliche Makro:
For Zeile = vonZeile To bisZeile
If Range (Spalte & ":" & Zeile) == suche Then
Columns(Spalte & ":" & Spalte).Select
Selection.ColumnWidth = 0
Rows(Zeile & ":" & Zeile).Select
Selection.RowHeight = 0
End If
Next Zeile
Eine andere Zuweisung der Spaltenbreite bzw. Zeilenhöhe würde ich weglassen. Weil: Wenn du einmal die Optionen auf 0 gesetzt hast, diese sicher nicht wieder auf einen Wert gesetzt werden soll. Die Spalten und Zeilen sollen doch sicher "ausgeblendet" bleiben.
LG Martina
Antwort 10 von malli
Hallo Martina,
vielen Dank.
Leider bekomme ich noch folgende Fehlermeldung:
Laufzeitfehler '1004':
Anwendungs- oder objektdefinierter Fehler.
Wenn ich das richtig sehe, bei der Zeile "If Range ..."
Die Überwachung meint "Ausdruck im Kontext nicht definiert".
Ich habe es jetzt so drinnen stehen (ein = habe gelöscht, da die Zeile rot war):
Sub Ausblenden()
Spalte = "A"
Zeile = 1
suche = "Hide+Auto"
vonZeile = 2
bisZeile = 10
For Zeile = vonZeile To bisZeile
If Range("Spalte" & ":" & "Zeile") = suche Then
Columns(Spalte & ":" & Spalte).Select
Selection.ColumnWidth = 0
Rows(Zeile & ":" & Zeile).Select
Selection.RowHeight = 0
End If
Next Zeile
End Sub
LG malli
vielen Dank.
Leider bekomme ich noch folgende Fehlermeldung:
Laufzeitfehler '1004':
Anwendungs- oder objektdefinierter Fehler.
Wenn ich das richtig sehe, bei der Zeile "If Range ..."
Die Überwachung meint "Ausdruck im Kontext nicht definiert".
Ich habe es jetzt so drinnen stehen (ein = habe gelöscht, da die Zeile rot war):
Sub Ausblenden()
Spalte = "A"
Zeile = 1
suche = "Hide+Auto"
vonZeile = 2
bisZeile = 10
For Zeile = vonZeile To bisZeile
If Range("Spalte" & ":" & "Zeile") = suche Then
Columns(Spalte & ":" & Spalte).Select
Selection.ColumnWidth = 0
Rows(Zeile & ":" & Zeile).Select
Selection.RowHeight = 0
End If
Next Zeile
End Sub
LG malli
Antwort 11 von Martina
Hallochen,
Du darfst Spalte und Zeile nicht in Hochkommas setzen. Dann müsste es funktionieren.
LG Martina
Zitat:
If Range("Spalte" & ":" & "Zeile") = suche Then
If Range("Spalte" & ":" & "Zeile") = suche Then
Du darfst Spalte und Zeile nicht in Hochkommas setzen. Dann müsste es funktionieren.
LG Martina
Antwort 12 von malli
Ich nochmal ...
Die Zeile sieht so aus:
If Range(Spalte & ":" & Zeile) = suche Then
Die Zeile sieht so aus:
If Range(Spalte & ":" & Zeile) = suche Then
Antwort 13 von malli
Ups, ich hab' nicht aktualisiert. Das mit den Hochkomma war nur ein verzweifelter Versuch, die Fehlermeldung ändert sich aber nicht.
Antwort 14 von malli
Kann es sein, dass der Doppelpunkt raus muss? Dann läuft es nämlich durch ... Zwar noch nicht ganz so, wie es sollte, aber immerhin! :-)
Antwort 15 von malli
Vielen lieben Dank, Martina. Dank deiner Hilfe habe ich zumindest den ersten Teil geschafft.
Nur, wie bekomme ich das jetzt auch noch für die Spalten hin? Bei den Zeilen kann ich ja z.B. 2-10 sagen, aber wie schaffe ich das mit Buchstaben?
LG malli
Spalte = "A"
Zeile = 1
suche = "Hide+Auto"
vonZeile = 2
bisZeile = 10
For Zeile = vonZeile To bisZeile
If Range(Spalte & Zeile) = suche Then
Rows(Zeile & ":" & Zeile).Select
Selection.RowHeight = 0.7 'notwendig, da sonst beim Aufblenden der Gruppierung wieder die Standardhöhe hergestellt wird
End If
Next Zeile
Nur, wie bekomme ich das jetzt auch noch für die Spalten hin? Bei den Zeilen kann ich ja z.B. 2-10 sagen, aber wie schaffe ich das mit Buchstaben?
LG malli
Antwort 16 von Martina
Hallochen,
das ist etwas schwieriger. Du musst dir denken:
A=1
B=2
C=3
usw.
Dann machst du noch eine Schleife mehr. Kannst aber dann die Zelle nicht mehr mit Range ansprechen, sondern musst Cells benutzen.
LG Martina
das ist etwas schwieriger. Du musst dir denken:
A=1
B=2
C=3
usw.
Dann machst du noch eine Schleife mehr. Kannst aber dann die Zelle nicht mehr mit Range ansprechen, sondern musst Cells benutzen.
Zeile = 1
suche = "Hide+Auto"
vonZeile = 2
bisZeile = 10
For Spalte = 1 To 5 'also Spalte A bis E
For Zeile = vonZeile To bisZeile
If Cells(Zeile, Spalte) = suche Then
Rows(Zeile & ":" & Zeile).Select
Selection.RowHeight = 0.7
End If
Next Zeile
Next Spalte
LG Martina
Antwort 17 von malli
Sorry, dass ich mich erst heute wieder melde, aber ich bin vorher nicht dazugekommen es auszuprobieren.
Vielen Dank nochmal, hat prima geklappt!
LG malli
Vielen Dank nochmal, hat prima geklappt!
LG malli