Supportnet Computer
Planet of Tech

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

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

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.

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

Antwort 5 von Marie

Zitat:
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

Antwort 7 von Marie

Dann hast Du den Code vermutlich nicht in Visual Basic eingefügt???

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

Antwort 9 von Martina

Hallochen,

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

Antwort 11 von Martina

Hallochen,

Zitat:
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

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.

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.

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: