Unterstützung mit VBA-Befehlen in Excel

Master Sheep

Lt. Junior Grade
Registriert
Feb. 2011
Beiträge
356
Liebe Community,

aufbauend auf diesem Thread habe ich ein paar Fragen zu automatisierten VBA-Befehlen. Ich packe sie mal zusammen, da es für geübte User sicherlich "Einsteigerfragen" darstellen dürften.

  1. Wie sage ich in VBA: wähle TabelleBeispiel und
    • sortiere absteigend nach Wert in Tabellenspalte "Gesamt"
    • blende alle Werte = 0 in Tabellenspalte "Gesamt" aus / setze den Filter Wert =/= 0
    • blende alle wieder ein / lösche alle aktiven Filter
  2. Wie sage ich VBA Wähle ein Tabellenblatt aus und
    • blende alle Zellen ein
    • blende eine Spalte aus
Zu 1:
Habe es so probiert:
Code:
 Sheet"1I".Select
 ActiveSheet.ListObjects("Tabelle1I").Range.AutoFilter Field:=2, _
        Criteria1:="<>"

Geht es auch irgendwie, dass ich die Tabelle direkt auswähle und nicht über das Sheet auswähle? Das führt (beim Ausführen des Makros) auch immer dazu, dass man die einzelnen Reiter "durchspringt".

Danke schon mal für euer Unterstützung! :-)
 
Zu deinen 2 Fragen:
Ein guter Einstieg ist die Makroaufzeichnung in Excel. Einfach diese aktivieren und dann über die Excel-Oberfläche die Schritte durchführen (Sortierung und Filter setzen usw.) und danach die Makroaufzeichnung beenden. Danach kannst im VBA-Editor sehen, welche Befehle dafür genutzt wurden.
Danach benötigt es natürlich auch etwas VBA-Wissen, um z.B. unnötige optische Sprünge zwischen verschiedenen Zellen oder Tabellenblättern zu vermeiden (siehe nächste Antwort).


Master Sheep schrieb:
Geht es auch irgendwie, dass ich die Tabelle direkt auswähle und nicht über das Sheet auswähle? Das führt (beim Ausführen des Makros) auch immer dazu, dass man die einzelnen Reiter "durchspringt".

Basierend auf deinem Code-Beispiel:
Code:
 Sheets("1I").ListObjects("Tabelle1I").Range.AutoFilter Field:=2, _
        Criteria1:="<>"

EDIT:
Es heißt "Sheets" und Klammern fehlten auch. Dein Code-Beispiel war kein lauffähiger Code.
 
Zuletzt bearbeitet:
Darkman.X, danke für deine Hilfe! Konnte das nun so umsetzen. :-)
Das mit dem Code war ein Fehler von mir beim Bearbeiten für den Forenpost - ich hatte noch beim Namen was angepasst. sry.

Mit dem Aufzeichnen hatte ich ursprünglich auch angefangen. Da kam dann aber immer ein ungeschmeidiger Code raus (z.B. wird immer erst das Tabellenblatt angewählt und dann die jeweilige Tabelle ausgewählt). Das wollte ich vermeiden. Hatte es erst mit "Worksheets" probiert, aber das hat nicht hingehauen. XD
Teilweise konnte ich ihn schon selbst zurechtstutzen; war aber alles andere als einfach. :-)

Ich habe noch eine Frage: Ich verwende folgenden Code, um eine Spalte aus- und eine andere einzublenden.

Code:
   Sheets("1I").Columns("H").Select
   Selection.Columns.Hidden = False
   Sheets("1I").Columns("G").Select
   Selection.Columns.Hidden = True

Jetzt habe ich die Situation, dass in der Zeile auch eine verbundene Zeile ist und er dann immer alle Spalten nimmt, über die sich die verbundene Zeile erstreckt.
Wie kann ich das umgehen bzw. VBA sage, er soll wirklich nur die eine Spalte ausblenden? Händisch funktioniert das auch richtig. Mit aufgezeichnetem Makro ergibt das:

Code:
    Columns("G:G").Select
    Range("Tabelle1I[[#Headers],[Abzug1]]").Activate
    Selection.EntireColumn.Hidden = True

Ich verstehe aber nicht, was das mit der Tabelle zu tun hat? xD
 
Master Sheep schrieb:
Jetzt habe ich die Situation, dass in der Zeile auch eine verbundene Zeile ist und er dann immer alle Spalten nimmt, über die sich die verbundene Zeile erstreckt.
Das verstehe ich nicht bzw. kann ich mit meinem Excel 2019 nicht nachvollziehen.
Wenn ich beispielsweise Zellen A1+B1 verbinde und dann Spalte A ausblende, dann bleibt Spalte B weiterhin sichtbar. Egal ob ich die Spalte A händisch in der Excel-GUI oder per VBA ausblende. Wenn ich deinen Text aber richtig verstehe, dann würde bei dir auch Spalte B ausgeblendet werden?

Simples ausblenden von Spalten:
Sheets("1I").Columns("G").Hidden = True oder nur Columns("G").Hidden = True, wobei letzteres gefährlich ist, falls Sheets("1I") nicht das aktuell aktive Sheet ist.

Keine Ahnung warum die Tabelle da mit im aufgezeichneten Makro ist. Ich habe auch nie behauptet, dass die Makroaufzeichnung perfekt ist 😜
Sie ist nur ein guter Einstieg, um die Befehle von allen GUI-Elementen / Funktionen kennenzulernen.


PS: Ich bin auch kein Profi. Ich betrachte mich selber nur als gehobener Anfänger oder schlechtes Mittelmaß.
Und es gilt die Regel Nr. 1 beim Programmieren: Lerne das richtige googeln. Böse Zungen behaupten, dass das die primäre Tätigkeit von Programmierern ist 😉
 
Zuletzt bearbeitet:
Danke für deine umfassende Unterstützung! :)
Dein Fall weicht von meinem ab: Ich habe mehrere Zellen (4 Stück) und ich picke mir die 2. raus. Vielleicht weil sie in der Mitte liegt? Ich schaue mir das bei nächster Gelegenheit nochmals an.

Und ja, genau so Einzeiler will ich haben. :-D

Ja googlen ist gut.

PS: Wenn ich den Code so verwende wie du es tust, macht es keine Probleme. Er blendet nur die gewünschte Spalte aus. Danke für deine Unterstützung! :-) Ich melde mich wieder, wenn mein Projekt weiter gediehn ist. :-D
 
Zuletzt bearbeitet: (Klarifizierung: Zeile in Spalte umbenannt.)
Wie gesagt, nicht nachvollziehbar. Ich habe bei mir A1, B1, C1 und D1 miteinander verbunden, dann Spalte B ausgeblendet (2x getestet: 1x händisch und 1x VBA). Danach waren Spalten A, C und D weiterhin sichtbar.
 
OK, das ist komisch. Kann ich leider auch nicht genauer eingrenzen. :confused_alt:

Ich will in der Tabelle 1I im Sheet 1I VBA sagen, dass es im Feld 36 die Werte absteigend sortieren soll. Das bekomme ich nicht so recht hin. Wenn ich das Makro aufzeichne, entsteht ein Code-Wulst, den ich kaum dekodieren kann.

Ansonsten habe ich diesen Teil des Codes soweit fertig. An die Stelle der drei Fragezeichen gehört dann das gesuchte Codeschnipselchen.

Code:
    Sheets("1I").Unprotect
    ???
    Sheets("1I").ListObjects("Tabelle1I").Range.AutoFilter Field:=36, _
        Criteria1:=">0"
    Sheets("1I").Protect
 
Darkman.X schrieb:
Und es gilt die Regel Nr. 1 beim Programmieren: Lerne das richtige googeln.
This!

Ich habe jetzt nicht die Motivation, dir bei allen Problemen zu helfen.
Außerdem hast du auch nicht geschrieben, was denn genau nicht funktioniert. Und was ist mir dem Code von der Makroaufzeichnung? Damit sollte es doch funktionieren. Es ist erstmal egal, ob der Code "schön" aussieht oder nicht, Hauptsache er funktioniert.
 
  • Gefällt mir
Reaktionen: GunMum
So zusammen,
noch einmal herzlichen Dank an euch alle für eure Unterstützung! Das hat mir wirklich sehr geholfen. :-)
Ich habe letztlich das wesentliche hinbekommen, was ich benötigt habe. Leider ist der Code nicht überall schön geworden, aber er tut irgendwie, was er soll.

Ich habe euch die Excel-Datei mal angehangen. Datenschutzrechtlich kein Problem, weil die Siegerlisten sowieso veröffentlicht wurden. Ich habe lediglich noch alle nicht-angetretenen Turner entfernt.
Leider darf ich keine Excel-Dateien mit Makros hochladen. Schade.
Wenn es jemanden interessiert, gerne PN an mich.

Ich wollte noch etwas zu dem Punkt "googlen" sagen:
Ich lese sehr oft, dass jemand sagt: "dann google halt". Googlen kann man natürlich üben. Wenn man aber komplett fachfremd ist, fehlen einem zum Teil schon die Begriffe, damit man präzise googlen kann. Ich wollte mich ja explizit nicht in das Programmieren an sich hineinarbeiten, sondern lediglich die Excelliste irgendwie zum Laufen bringen. "google halt einfach" blendet dann irgendwie aus, dass dafür bereits gewisse Kenntnisse erforderlich sind. Ich bitte euch, das nicht zu unterschätzen. :-)
 
Zurück
Oben