🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →

The ExcelMaster.ai Blog

VBA FileDialog in Excel — FilePicker, FolderPicker und .SelectedItems auslesen

VBA FileDialog in Excel — FilePicker, FolderPicker und .SelectedItems auslesen

Application.FileDialog ist der eingebaute Auswahldialog, mit dem ein Makro den Benutzer nach einer Datei oder einem Ordner fragt, statt einen Pfad fest zu verdrahten. Diese Anleitung behandelt alle drei Werkzeuge zum Erfragen eines Pfads als eine einzige Idee — sie geben eine Pfad-Zeichenfolge zurĂŒck, sie öffnen oder speichern nichts. Sie deckt die vier Dialogtypen (FilePicker, FolderPicker, SaveAs, Open) ab, warum .Show fĂŒr eine Auswahl -1 und fĂŒr Abbrechen 0 zurĂŒckgibt statt True oder False, das Auslesen des Ergebnisses aus der 1-basierten .SelectedItems-Auflistung, das Zulassen von Mehrfachauswahl, das HinzufĂŒgen von Dateifiltern und wann man stattdessen zum einfacheren GetOpenFilename greift.

Henry
VBA GetOpenFilename in Excel — einen Dateipfad holen und dann selbst öffnen

VBA GetOpenFilename in Excel — einen Dateipfad holen und dann selbst öffnen

Application.GetOpenFilename ist der einzeilige Weg fĂŒr ein Makro, den Benutzer zu fragen, welche Datei verwendet werden soll, statt einen Pfad fest zu verdrahten. Diese Anleitung macht die zwei Tatsachen, ĂŒber die alle stolpern, unĂŒbersehbar — sie gibt eine Pfad-Zeichenfolge zurĂŒck und öffnet nichts, und Abbrechen gibt den Wahrheitswert False zurĂŒck, sodass die Variable Dim As Variant sein muss. Sie behandelt die FileFilter-Syntax, das Setzen eines Standardfilters und Dialogtitels, das ZurĂŒckgeben eines 1-basierten Arrays von Pfaden mit MultiSelect und wie sie sich vom umfangreicheren FileDialog-Objekt unterscheidet.

Henry
VBA GetSaveAsFilename in Excel — nach dem Speicherort fragen, ohne zu speichern

VBA GetSaveAsFilename in Excel — nach dem Speicherort fragen, ohne zu speichern

Application.GetSaveAsFilename zeigt den Speichern-unter-Dialog und gibt den Pfad zurĂŒck, den der Benutzer gewĂ€hlt hat — aber es speichert nichts, und genau das ĂŒberrascht alle. Diese Anleitung ist das Spiegelbild von GetOpenFilename — sie gibt eine Pfad-Zeichenfolge zurĂŒck, und Abbrechen gibt den Wahrheitswert False zurĂŒck, sodass die Variable Dim As Variant sein muss. Sie behandelt das Vorschlagen eines Standardnamens mit InitialFileName, den FileFilter und die Falle, dass das echte Dateiformat aus Ihrem SaveAs-Argument FileFormat kommt, nicht aus der Erweiterung, die der Benutzer gewĂ€hlt hat, sodass eine NichtĂŒbereinstimmung eine Datei erzeugt, die sich nicht öffnen lĂ€sst.

Henry
VBA ListBox in Excel — fĂŒllen, die Auswahl auslesen und die MultiSelect-Falle

VBA ListBox in Excel — fĂŒllen, die Auswahl auslesen und die MultiSelect-Falle

VBA ListBox zeigt eine Liste von Optionen auf einem UserForm und lĂ€sst den Benutzer einen oder mehrere EintrĂ€ge wĂ€hlen. Dieser Guide behandelt jedes UserForm-Steuerelement als ein und dieselbe Idee: ein lebendiges Objekt, das Sie ĂŒber seine Eigenschaften auslesen, nicht das Feld selbst. Er erklĂ€rt das FĂŒllen in einem Zug mit .List = Range.Value gegenĂŒber .AddItem in einer Schleife, das Lesen einer Einzelauswahl mit .ListIndex und .Value, die Falle Nummer eins, dass .Value in dem Moment zu Null wird, in dem MultiSelect aktiv ist, sodass Sie .Selected(i) durchlaufen mĂŒssen, das Leeren mit .Clear und wann eine ListBox statt einer ComboBox die richtige Wahl ist.

Henry
VBA ComboBox in Excel — Dropdownliste fĂŒllen, die Auswahl lesen und die Falle ListIndex = -1

VBA ComboBox in Excel — Dropdownliste fĂŒllen, die Auswahl lesen und die Falle ListIndex = -1

VBA ComboBox ist eine Dropdownliste auf einem UserForm, aus der der Benutzer einen Eintrag wĂ€hlt oder, standardmĂ€ĂŸig, seinen eigenen tippt. Dieser Guide erklĂ€rt sie als eine ListBox, die auf eine Zeile zusammengeklappt ist und zwei Fragen auf einmal beantwortet: welcher Eintrag, gelesen mit .ListIndex, und welcher Text, gelesen mit .Value. Er behandelt das FĂŒllen mit .List = Range.Value, die Eigenschaft .Style, die entscheidet, ob Tippen erlaubt ist, die Falle Nummer eins, dass ein nicht leeres .Value nicht dasselbe ist wie eine gĂŒltige Auswahl, weshalb Sie .ListIndex >= 0 prĂŒfen, und wann eine ComboBox eine ListBox schlĂ€gt.

Henry
VBA CheckBox in Excel — True/False, das TripleState-Null und Optionsfelder gruppieren

VBA CheckBox in Excel — True/False, das TripleState-Null und Optionsfelder gruppieren

VBA CheckBox ist ein Ja/Nein-Schalter auf einem UserForm, dessen .Value Sie als Boolean lesen, True oder False. Dieser Guide erklĂ€rt sie als das einfachste Steuerelement ĂŒberhaupt und dann die zwei Dinge, die Leute ĂŒberraschen: TripleState, das .Value einen dritten Wert Null gibt, sodass If CheckBox1.Value einen « Type mismatch » auslöst, und die Gruppierungsregel fĂŒr ihren Verwandten, das OptionButton, bei dem alle Optionsfelder auf demselben Container eine exklusive Gruppe bilden, sofern Sie sie nicht mit einem Frame trennen. Er behandelt das Lesen von KontrollkĂ€stchen, das Verdrahten von Optionsfeldern und warum Sie eine Optionsfeld-Gruppe nie aus KontrollkĂ€stchen nachbauen sollten.

Henry
VBA Exit For in Excel — Exit For, Exit Do, Exit Sub und der saubere frĂŒhe Ausstieg

VBA Exit For in Excel — Exit For, Exit Do, Exit Sub und der saubere frĂŒhe Ausstieg

VBA Exit For verlĂ€sst eine For-Schleife in dem Moment, in dem Sie gefunden haben, wonach Sie gesucht haben, statt sich durch jeden ĂŒbrigen Durchlauf zu quĂ€len. Dieser Guide erklĂ€rt die ganze Exit-Familie als eine einzige Idee: die aktuelle Struktur frĂŒh und sauber verlassen. Er behandelt Exit For und Exit Do fĂŒr Schleifen, Exit Sub und Exit Function fĂŒr Prozeduren, die grĂ¶ĂŸte Überraschung, dass Exit For nur die innerste Schleife verlĂ€sst, warum es in VBA kein Exit If und kein Continue gibt, das Guard-Clause-Muster, das tiefe Verschachtelung ersetzt, und warum Exit eine saubere TĂŒr aus einem Block ist, wĂ€hrend End das ganze Makro stoppt.

Henry
VBA GoTo in Excel — Der Sprung zu einer Sprungmarke und warum Sie ihn meist meiden sollten

VBA GoTo in Excel — Der Sprung zu einer Sprungmarke und warum Sie ihn meist meiden sollten

VBA GoTo springt bedingungslos zu einer markierten Zeile innerhalb derselben Prozedur. Dieser Guide erklĂ€rt, wie die Syntax aus Sprungmarke und Sprung funktioniert, die eine Stelle, an die GoTo heute wirklich gehört (On Error GoTo fĂŒr die Fehlerbehandlung), und warum es fĂŒr den gewöhnlichen Ablauf fast immer das falsche Werkzeug ist. Er behandelt die Falle, in oder aus einer Schleife zu springen und den ZĂ€hler zu beschĂ€digen, warum VBA kein Continue hat und wie GoTo missbraucht wird, um es vorzutĂ€uschen, warum Sie mit GoTo nicht ĂŒber Prozedurgrenzen springen können, und die strukturierten Alternativen (Exit, Guard Clauses, Do-Schleifen), die sich besser lesen als jeder Sprung.

Henry
VBA End in Excel — End, End Sub, Exit Sub und Stop im Vergleich

VBA End in Excel — End, End Sub, Exit Sub und Stop im Vergleich

VBA End hĂ€lt das ganze Makro auf einen Schlag an, verwirft jede Variable und ĂŒberspringt jede eingeplante AufrĂ€umarbeit, was es weit zerstörerischer macht, als es aussieht. Dieser Guide entwirrt vier Dinge, die alle das Wort end enthalten, aber ganz verschiedene Aufgaben haben: die blanke End-Anweisung, die alles stoppt, End Sub und End If, die nur einen Block schließen, Exit Sub, das aus einer Prozedur zurĂŒckkehrt, und Stop, das im Debugger pausiert. Er erklĂ€rt, was End wirklich zurĂŒcksetzt, warum es ScreenUpdating ausgeschaltet oder Ereignisse deaktiviert lassen kann, und warum Sie es fast nie wollen.

Henry
VBA ReDim in Excel — Arrays mit ReDim und ReDim Preserve vergrĂ¶ĂŸern

VBA ReDim in Excel — Arrays mit ReDim und ReDim Preserve vergrĂ¶ĂŸern

VBA ReDim Ă€ndert die GrĂ¶ĂŸe eines dynamischen Arrays zur Laufzeit, denn ein VBA-Array hat in dem Moment eine feste GrĂ¶ĂŸe, in dem Sie es mit Dim deklarieren — es sei denn, Sie lassen die Klammern leer. Dieser Guide erklĂ€rt die eine Entscheidung, die jedes Array bestimmt: feste GrĂ¶ĂŸe gegen dynamisch. Er behandelt, warum Dim a() ein Array ohne GrĂ¶ĂŸe erzeugt, wie ReDim es dimensioniert, warum ein blankes ReDim jeden Wert verwirft, wĂ€hrend ReDim Preserve die Daten behĂ€lt, die Regel, dass ReDim Preserve nur die letzte Dimension eines zweidimensionalen Arrays vergrĂ¶ĂŸern kann, warum Sie ein Array mit fester GrĂ¶ĂŸe nicht mit ReDim Ă€ndern können, was Erase wirklich tut, und warum es langsam ist, ein Array in einer Schleife Element fĂŒr Element wachsen zu lassen.

Henry
VBA UBound in Excel — Array-GrĂ¶ĂŸe mit UBound und LBound (und der Off-by-One-Fehler)

VBA UBound in Excel — Array-GrĂ¶ĂŸe mit UBound und LBound (und der Off-by-One-Fehler)

VBA UBound gibt den höchsten gĂŒltigen Index eines Arrays zurĂŒck und LBound den niedrigsten, denn in VBA zĂ€hlen Sie ein Array nicht, Sie fragen es, wie groß es ist. Dieser Guide erklĂ€rt, warum VBA-Arrays standardmĂ€ĂŸig nullbasiert sind, sodass ein Array mit zehn Elementen von Index 0 bis 9 lĂ€uft, warum dieser Off-by-One-Fehler der Schleifenfehler Nummer eins ist, warum die sichere Schleife For i = LBound To UBound lautet statt 0 To UBound, wie Sie die wahre LĂ€nge als UBound minus LBound plus eins berechnen, wie Sie mit UBound Array 2 die GrĂ¶ĂŸe jeder Dimension eines 2D-Arrays ermitteln, und warum UBound auf einem leeren dynamischen Array Fehler 9 auslöst.

Henry
VBA 2D Arrays in Excel — zweidimensionale Arrays, Gitter und Range.Value

VBA 2D Arrays in Excel — zweidimensionale Arrays, Gitter und Range.Value

Ein VBA-2D-Array ist ein Array, das ĂŒber zwei Indizes angesprochen wird, ein Gitter aus Zeilen und Spalten, kein Array aus Arrays. Dieser Guide erklĂ€rt das Denkmodell eines Gitters mit einem Zeilenindex und einem Spaltenindex, wie Sie ein zweidimensionales Array mit Dim g Zeilen und Spalten deklarieren, wie Sie jede Zelle mit g Zeile Komma Spalte lesen und schreiben, und die einzige nĂŒtzlichste Tatsache fĂŒr Excel-Entwickler: Das Lesen von Range.Value reicht Ihnen ein einsbasiertes zweidimensionales Variant-Array, was der schnellste Weg ist, ein Blatt zu verarbeiten, weil Sie das Arbeitsblatt nur einmal anfassen. Er behandelt außerdem das ZurĂŒckschreiben eines Arrays in einen Bereich in einem Rutsch, die Grenze von ReDim Preserve bei der letzten Dimension beim ZeilenhinzufĂŒgen, und wie sich ein verzweigtes Array aus Arrays von einem echten 2D-Array unterscheidet.

Henry
VBA Set in Excel — warum Objektvariablen Set brauchen (und die Fehler 91 und 424)

VBA Set in Excel — warum Objektvariablen Set brauchen (und die Fehler 91 und 424)

VBA Set weist einer Objektvariablen eine Referenz zu, denn eine Objektvariable ist ein Etikett, das auf ein Ding zeigt, keine Schachtel, die eines enthĂ€lt. Lassen Sie Set bei einem Objekt weg, bekommen Sie Laufzeitfehler 91, Object variable or With block variable not set; verwenden Sie Set auf etwas, das kein Objekt ist, bekommen Sie Fehler 424, Object required. Dieser Guide behandelt das Denkmodell von Referenz gegen Wert, warum Range, Worksheet und Dictionary Set brauchen, wĂ€hrend Integer und String es nicht tun, wie Set aus zwei Variablen zwei Namen fĂŒr dasselbe lebende Objekt macht, und wie Sie die zwei hĂ€ufigsten VBA-Laufzeitfehler lesen.

Henry
VBA New in Excel — Objekte erzeugen, New gegen CreateObject und die Dim-As-New-Falle

VBA New in Excel — Objekte erzeugen, New gegen CreateObject und die Dim-As-New-Falle

VBA New erzeugt eine brandneue Instanz eines Objekts, also macht Set d = New Dictionary ein frisches, leeres Dictionary. New ist frĂŒhes Binden (early binding), das einen Bibliotheksverweis braucht, aber IntelliSense und Tempo bringt, wĂ€hrend CreateObject spĂ€tes Binden (late binding) ist, das keinen Verweis braucht und ĂŒber Rechner hinweg portabel ist. Dieser Guide behandelt das Denkmodell von New als dem Moment, in dem ein Objekt geboren wird, wann Sie New statt CreateObject wĂ€hlen, die Dim-As-New-Falle, in der das Objekt trĂ€ge erzeugt wird und still wieder aufersteht, nachdem Sie es freigegeben haben, und warum Sie kein Worksheet oder Range mit New erzeugen können.

Henry
VBA Nothing in Excel — Referenzen freigeben, Is Nothing gegen = Nothing und wann es zĂ€hlt

VBA Nothing in Excel — Referenzen freigeben, Is Nothing gegen = Nothing und wann es zĂ€hlt

VBA Nothing ist der Zustand der leeren Referenz, eine Objektvariable, die auf kein Objekt zeigt, und jede Objektvariable beginnt ihr Leben als Nothing. Sie testen ihn mit If x Is Nothing ĂŒber den Operator Is, weil ein blankes = keine Objekte vergleichen kann. Set x = Nothing gibt die Referenz frei. Dieser Guide behandelt das Denkmodell von Nothing als leerem Zeiger, warum der Schutz gegen ein Find, das Nothing zurĂŒckgab, die hĂ€ufigste echte Verwendung ist, wann das Freigeben auf Nothing wirklich zĂ€hlt und wann es ein harmloses Ritual ist, und wie sich Nothing von Empty, Null und der leeren Zeichenkette unterscheidet.

Henry
VBA Round in Excel — Runden zur nĂ€chsten geraden Zahl und warum es vom Arbeitsblatt abweicht

VBA Round in Excel — Runden zur nĂ€chsten geraden Zahl und warum es vom Arbeitsblatt abweicht

VBA Round nutzt das Runden zur nÀchsten geraden Zahl (banker's rounding), also ist Round(2.5) gleich 2 und Round(3.5) gleich 4; das weicht still vom Arbeitsblatt-ROUND ab, das HÀlften von der Null weg rundet. Dieser Guide behandelt das Denkmodell, dass VBA-Mathematik keine Arbeitsblatt-Mathematik ist, den Fehler Nummer eins einer Makro-Summe, die einen Cent von der Tabelle abweicht, wie Sie die Zelle mit Application.WorksheetFunction.Round treffen, warum Int und Fix abschneiden statt zu runden und sich bei negativen Zahlen uneinig sind, und wann das Runden zur geraden Zahl wirklich die richtige Wahl ist.

Henry
VBA Mod in Excel — der Rest-Operator, negative Zahlen und die Vorzeichen-Falle

VBA Mod in Excel — der Rest-Operator, negative Zahlen und die Vorzeichen-Falle

VBA Mod ist ein Operator, keine Funktion, und ĂŒberrascht gleich zweifach: Es rundet beide Operanden vor der Division auf ganze Zahlen, und das Ergebnis ĂŒbernimmt das Vorzeichen des Dividenden, also ist -7 Mod 3 gleich -1, wĂ€hrend das Arbeitsblatt-MOD(-7,3) gleich 2 ist. Dieser Guide behandelt das Denkmodell vom Rest nach der Ganzzahldivision, den Fehler Nummer eins beim direkten Übernehmen einer MOD-Formel vom Blatt in VBA, die Idiome jede-N-te-Zeile und ist-gerade, wie Sie mit ((a Mod b) + b) Mod b einen stets positiven Umbruch bauen, und warum x Mod 0 den Fehler 11 auslöst.

Henry
VBA Rnd in Excel — Zufallszahlen, Randomize und die Falle der sich wiederholenden Folge

VBA Rnd in Excel — Zufallszahlen, Randomize und die Falle der sich wiederholenden Folge

VBA Rnd gibt einen Single im Bereich 0 bis 1 zurĂŒck und spielt bei jedem Lauf des Makros exakt dieselbe Folge ab, bis Sie einmal Randomize aufrufen, um es aus der Systemuhr zu seeden. Dieser Guide behandelt das Denkmodell eines Pseudozufallsgenerators mit Startwert, den Fehler Nummer eins einer Zufallsauswahl, die jedes Mal identisch ist, weil Randomize fehlt, die korrekte Formel fĂŒr eine ganze Zahl im Bereich Int((hi - lo + 1) * Rnd + lo), wie Sie eine Folge fĂŒr Tests absichtlich reproduzieren, warum Rnd nichts fĂŒr Sicherheit ist, und wann RandBetween das bessere Werkzeug ist.

Henry
VBA Zeilen verschieben in Excel — ausschneiden und mit Insert einfĂŒgen, nicht mit Paste ĂŒberschreiben

VBA Zeilen verschieben in Excel — ausschneiden und mit Insert einfĂŒgen, nicht mit Paste ĂŒberschreiben

Eine Zeile in VBA zu verschieben heißt ausschneiden und mit Insert einfĂŒgen, nicht mit Paste ĂŒberschreiben. Rows(5).Cut Destination:=Rows(20) legt die Zeile auf Zeile 20 und zerstört sie still; Rows(5).Cut und dann Rows(20).Insert öffnet eine LĂŒcke und schiebt alles nach unten, sodass nichts verloren geht. Dieser Guide behandelt das Denkmodell, dass Verschieben eine Verschiebung ist, den Datenverlust-Fehler Nummer eins durch EinfĂŒgen mit Paste statt mit Insert, warum sich das Loch der Quellzeile schließt und alles darunter neu nummeriert, wie Sie mehrere Zeilen von unten nach oben verschieben, und warum ausgeschnittene Verweise den Daten folgen statt in #REF! zu zerspringen.

Henry
VBA Spalten verschieben in Excel — Spalten mit Cut und Insert neu anordnen (EntireColumn)

VBA Spalten verschieben in Excel — Spalten mit Cut und Insert neu anordnen (EntireColumn)

Eine Spalte in VBA zu verschieben ist dasselbe Ausschneiden-und-EinfĂŒgen wie beim Verschieben einer Zeile, nur um neunzig Grad gedreht. Eine Spalte auszuschneiden und mit Destination:= per Paste abzulegen landet auf der Zielspalte und ĂŒberschreibt sie; die Spalte auszuschneiden und dann Insert aufzurufen öffnet eine LĂŒcke und schiebt die Spalten nach rechts, sodass nichts zerstört wird. Dieser Guide behandelt, warum Sie die EntireColumn ausschneiden statt eines Teilbereichs, warum sich die LĂŒcke der Quellspalte schließt und Ihr Ziel um eins nach links rĂŒckt, das Neuordnen mehrerer Spalten per Kopfzeile, ohne dass sie falsch landen, und warum Verweise einer verschobenen Spalte folgen, statt in #REF! zu brechen.

Henry
VBA Ausschneiden (Cut) in Excel — Range.Cut, Cut vs. Copy und die zwei Wege, das Ausgeschnittene abzulegen

VBA Ausschneiden (Cut) in Excel — Range.Cut, Cut vs. Copy und die zwei Wege, das Ausgeschnittene abzulegen

Range.Cut in VBA hebt Zellen auf; danach gibt es genau zwei Wege, sie abzulegen, die das Gegenteil tun. Cut Destination:= (ein Paste) legt sie obenauf und ĂŒberschreibt; Destination.Insert öffnet eine LĂŒcke und schiebt. Dieser Guide behandelt Cut gegen Copy (ein Verschieben leert die Quelle, ein Kopieren lĂ€sst sie stehen), die zwei Abnehmer eines Ausschnitts, warum Sie Application.CutCopyMode = False setzen, warum Cut einen Mehrbereich ablehnt, und warum Formelverweise einem Ausschnitt folgen, statt wie beim Löschen in #REF! zu zerspringen.

Henry
VBA Zeilen gruppieren in Excel — Klappbare Gliederungen, Ebenen und die Summenzeilen-Falle

VBA Zeilen gruppieren in Excel — Klappbare Gliederungen, Ebenen und die Summenzeilen-Falle

Rows.Group versteckt oder löscht nichts; es fĂŒgt einer klappbaren Gliederung ein Band hinzu, die Daten bleiben vollstĂ€ndig erhalten, nur einklappbar. Dieser Guide behandelt das Denkmodell, dass Gruppieren ein Falten statt ein Verstecken ist, die Summenzeilen-Einstellung, die entscheidet, auf welcher Seite die Einklapp-SchaltflĂ€che landet und sich leise von einer Summenzeile oben löst, warum Sie nach Ebene mit ShowLevels statt ĂŒber Hidden einklappen, und warum ClearOutline einer Schleife aus Ungroup beim Neuaufbau vorzuziehen ist.

Henry
VBA Spalten gruppieren in Excel — Horizontale Gliederungen und warum die SchaltflĂ€che auf der falschen Seite ist

VBA Spalten gruppieren in Excel — Horizontale Gliederungen und warum die SchaltflĂ€che auf der falschen Seite ist

Columns.Group faltet Spalten hinter eine horizontale Gliederung quer ĂŒber die Blattoberkante, derselbe Falt-Effekt wie beim Gruppieren von Zeilen, nur um neunzig Grad gedreht. Dieser Guide behandelt, warum Sie die ganze Spalte gruppieren und nie einen Teilbereich, die Summenspalten-Einstellung, die die Einklapp-SchaltflĂ€che standardmĂ€ĂŸig rechts von der Gruppe platziert und sich von einer Summenspalte links löst, wie ShowLevels Spalten auf ihrer eigenen Achse einklappt, und warum Gruppieren nicht dasselbe Werkzeug ist wie eine Spalte zu verstecken oder ihre Breite zu setzen.

Henry
VBA Gliederung in Excel — Einklapp-Ebenen, AutoOutline und Teilergebnisse per Code steuern

VBA Gliederung in Excel — Einklapp-Ebenen, AutoOutline und Teilergebnisse per Code steuern

Die Gliederung ist das Objekt, auf dem jede Gruppe aufbaut; ShowLevels klappt das ganze Blatt in einem Aufruf auf eine Ebene ein oder aus, weit besser als eine Schleife ĂŒber Hidden. Dieser Guide behandelt das Steuern beider Achsen mit ShowLevels, warum AutoOutline echte Summenformeln braucht oder mit Fehler 1004 scheitert, wie Subtotal die Gruppen, die Gliederung und die SUBTOTAL-Zeilen in einem Rutsch erzeugt, aber bei einem erneuten Lauf stapelt, sofern Sie nicht zuerst entfernen, und wie ShowDetail einen einzelnen Knoten ausklappt, wĂ€hrend ClearOutline der saubere Reset ist.

Henry
VBA Spalte einfĂŒgen in Excel — Spalten hinzufĂŒgen, ohne das Raster zu zerreißen oder Formeln zu zerstören

VBA Spalte einfĂŒgen in Excel — Spalten hinzufĂŒgen, ohne das Raster zu zerreißen oder Formeln zu zerstören

Columns.Insert zaubert keine leere Spalte aus dem Nichts; es schiebt die vorhandenen Spalten nach rechts und schreibt die Formeln um, die in sie hineinzeigten, Insert ist also in Wahrheit eine Verschiebung. Dieser Guide behandelt, warum Sie die EntireColumn einfĂŒgen und nie einen Teilbereich, wie Verweise den Daten folgen, wĂ€hrend fest verdrahtete VBA-Adressen es nicht tun, das EinfĂŒgen mehrerer Spalten in einem Aufruf statt in einer VorwĂ€rtsschleife und die CopyOrigin-Regel, die entscheidet, von welchem Nachbarn die neue Spalte ihre Formatierung erbt.

Henry
VBA Spalte löschen in Excel — Spalten entfernen ohne #REF!-Fehler oder ĂŒbersprungene Spalten

VBA Spalte löschen in Excel — Spalten entfernen ohne #REF!-Fehler oder ĂŒbersprungene Spalten

Columns.Delete ist Insert rĂŒckwĂ€rts: Es zieht jede Spalte rechts davon einen Schritt nach links, und jede Formel, die in die gelöschte Spalte zeigte, kippt in einen dauerhaften #REF!-Fehler. Dieser Guide behandelt, warum Verweise brechen, die VorwĂ€rtsschleifen-Falle, die ein Löschen Spalten ĂŒberspringen lĂ€sst, das Löschen nach Bedingung mit einem einzigen Union, damit nichts mitten in der Schleife neu nummeriert wird, und wann ClearContents die Operation ist, die Sie eigentlich statt Delete wollten.

Henry
VBA Zellen einfĂŒgen in Excel — einen Bereich einfĂŒgen oder löschen und die Verschieberichtung selbst wĂ€hlen

VBA Zellen einfĂŒgen in Excel — einen Bereich einfĂŒgen oder löschen und die Verschieberichtung selbst wĂ€hlen

In dem Moment, in dem Sie einen Teilbereich statt einer ganzen Spalte oder Zeile einfĂŒgen oder löschen, erben Sie eine Entscheidung, die Excel still trifft: in welche Richtung die umliegenden Zellen verschoben werden. Dieser Guide behandelt, warum Ganzlinien-Operationen der sichere Fall sind, warum ein weggelassenes Shift-Argument Excel aus der Bereichsform raten und Ihre Nachbarn durcheinanderbringen lĂ€sst, die genauen xlShift-Konstanten fĂŒr Insert und Delete und warum eine ganze Zeile ohnehin meist das war, was Sie wollten.

Henry
VBA Blatt hinzufĂŒgen in Excel — ein Arbeitsblatt erstellen und richtig festhalten

VBA Blatt hinzufĂŒgen in Excel — ein Arbeitsblatt erstellen und richtig festhalten

Worksheets.Add ist eine Fabrik, die Ihnen das neue Blatt als RĂŒckgabewert reicht, fangen Sie es also mit Set ws = Worksheets.Add ab, statt es danach mit ActiveSheet zu suchen. Dieser Guide behandelt den RĂŒckgabewert, den die meisten AnfĂ€nger ignorieren, warum ein blankes Add das Blatt links neben das aktive statt ans Ende setzt, die Argumente Before und After, die die Position steuern, und die Namensregeln, die es mit dem Umbenennen teilt und die bei einem doppelten oder unzulĂ€ssigen Namen Fehler 1004 werfen.

Henry
VBA Blatt kopieren in Excel — ein Arbeitsblatt duplizieren, ohne eine neue Arbeitsmappe zu erzeugen

VBA Blatt kopieren in Excel — ein Arbeitsblatt duplizieren, ohne eine neue Arbeitsmappe zu erzeugen

Worksheet.Copy nutzt dieselbe Before-und-After-Positionierung wie Add, gibt aber nichts zurĂŒck, und ein blankes Copy ohne Ziel dupliziert das Blatt nicht innerhalb der Arbeitsmappe, sondern erstellt eine ganz neue Arbeitsmappe, die die Kopie enthĂ€lt. Dieser Guide behandelt diese Überraschung, wie Sie die Kopie ĂŒber ActiveSheet greifen, wenn es keinen RĂŒckgabewert gibt, was mit einem kopierten Blatt mitwandert, einschließlich seines Codes und seiner definierten Namen, und wie Move Copy mit umgekehrter Absicht spiegelt.

Henry
VBA Blatt löschen in Excel — ein Arbeitsblatt entfernen ohne RĂŒckfrage und ohne HĂ€nger

VBA Blatt löschen in Excel — ein Arbeitsblatt entfernen ohne RĂŒckfrage und ohne HĂ€nger

Worksheet.Delete ist die einzige Blattoperation, die zum Nachfragen anhĂ€lt und einen modalen BestĂ€tigungsdialog wirft, der ein unbeaufsichtigtes Makro still aufhĂ€ngt, also bringen Sie ihn mit Application.DisplayAlerts False zum Schweigen und schalten ihn in einem Fehlerhandler wieder ein. Dieser Guide behandelt diese CleanExit-Disziplin, warum Excel sich weigert, das letzte sichtbare Blatt zu löschen, und Fehler 1004 wirft, warum das Löschen per Index in einer Schleife BlĂ€tter ĂŒberspringt, sofern Sie nicht rĂŒckwĂ€rts laufen, und wie Sie ein Blatt nur löschen, wenn es existiert.

Henry
VBA Blatt schĂŒtzen in Excel — ein Arbeitsblatt sperren, ohne Ihre Eingaben auszusperren

VBA Blatt schĂŒtzen in Excel — ein Arbeitsblatt sperren, ohne Ihre Eingaben auszusperren

Worksheet.Protect ist der Hauptschalter, der die Locked-Markierung aktiviert, die bereits auf jeder Zelle sitzt, und weil jede Zelle standardmĂ€ĂŸig Locked ist, friert ein Blattschutz ohne Vorbereitung alles ein, samt der Eingaben, die Ihre Nutzer brauchen. Dieser Guide behandelt den Zweischritt entsperren-dann-schĂŒtzen, warum die Flags AllowFiltering und AllowSorting zĂ€hlen, warum ein geschĂŒtztes Blatt Ihre eigenen Makros blockiert, sofern Sie nicht UserInterfaceOnly ĂŒbergeben, warum dieses Flag beim Speichern verloren geht und warum das Passwort eine Leitplanke gegen Versehen ist, kein echter Schutz.

Henry
VBA Blattschutz aufheben in Excel — den Schutz sicher entfernen (und die Passwort-Falle)

VBA Blattschutz aufheben in Excel — den Schutz sicher entfernen (und die Passwort-Falle)

Worksheet.Unprotect legt den Hauptschalter des Schutzes wieder um, lĂ€sst aber jede Locked-Markierung genau so, wie sie war, sodass das Aufheben des Schutzes keine Zellen entsperrt. Dieser Guide behandelt das Sandwich aufheben-arbeiten-schĂŒtzen, das jedes bearbeitende Makro nutzt, warum ein falsches oder fehlendes Passwort auf einem geschĂŒtzten Blatt Fehler 1004 wirft oder an einem modalen Dialog hĂ€ngt, warum Sie in einem Fehlerhandler erneut schĂŒtzen mĂŒssen, damit ein Absturz das Blatt nie offen lĂ€sst, wie Sie jedes Blatt in einer Schleife entsperren, und die ehrliche Grenze, dass VBA ein vergessenes Passwort nicht wiederherstellen kann.

Henry
VBA Zellen sperren in Excel — die Locked-Eigenschaft, die allein nichts bewirkt

VBA Zellen sperren in Excel — die Locked-Eigenschaft, die allein nichts bewirkt

Die Locked-Eigenschaft in Excel VBA ist nur eine Markierung auf einer Zelle, keine aktive Sperre, und sie bewirkt absolut nichts, bis das Arbeitsblatt geschĂŒtzt ist — weshalb Locked auf True zu setzen und dann festzustellen, dass Nutzer weiter bearbeiten können, die Verwirrung Nummer eins ist. Dieser Guide behandelt, warum jede Zelle Locked beginnt, den umgekehrten Ablauf entsperre-die-Eingaben, warum Locked auf einer gemischten Auswahl Null zurĂŒckliest, den Begleiter FormulaHidden, der eine Formel vor der Bearbeitungsleiste verbirgt, und warum Sie Locked setzen mĂŒssen, solange das Blatt ungeschĂŒtzt ist.

Henry
VBA AutoFit in Excel — Spalten und Zeilen richtig an ihren Inhalt anpassen

VBA AutoFit in Excel — Spalten und Zeilen richtig an ihren Inhalt anpassen

AutoFit in Excel VBA misst den Inhalt, den eine Spalte oder Zeile im Moment der AusfĂŒhrung hĂ€lt, und legt eine feste GrĂ¶ĂŸe darauf fest — es ist also eine einmalige Momentaufnahme, keine lebende Regel, die immer wieder neu anpasst. Dieser Guide behandelt Columns.AutoFit gegenĂŒber Rows.AutoFit, die EntireColumn-Falle beim Start aus einem Teilbereich, warum AutoFit die letzte Zeile nach dem Schreiben der Daten sein muss, warum verbundene Zellen es still aushebeln und wann eine feste Breite, die Sie selbst steuern, besser ist als erneutes AutoFit.

Henry
VBA Wrap Text in Excel — langen Text einpassen und die Zeile mitwachsen lassen

VBA Wrap Text in Excel — langen Text einpassen und die Zeile mitwachsen lassen

WrapText in Excel VBA formt eine Zelle so um, dass langer Text innerhalb der Spaltenbreite auf mehrere Zeilen umbricht, statt ĂŒber die Nachbarzellen zu laufen, und es ist die eine Anzeige-Eigenschaft, die auf die Zeilenhöhe zurĂŒckwirkt. Dieser Guide erklĂ€rt, warum der Umbruch die Zeile nur wachsen lĂ€sst, wenn die Höhe auf automatisch steht, die Abfolge aus fester Breite, dann WrapText, dann Rows.AutoFit, wie sich WrapText von einem harten Chr(10)-Umbruch unterscheidet, warum ein gemischter Bereich als Null zurĂŒckkommt und wann Sie eine Spalte umbrechen und wann Sie es lassen sollten.

Henry
VBA Freeze Panes in Excel — Kopfzeilen fixieren, ohne die falschen zu erwischen

VBA Freeze Panes in Excel — Kopfzeilen fixieren, ohne die falschen zu erwischen

FreezePanes in Excel VBA sperrt die oberen Zeilen oder linken Spalten der Ansicht, damit sie beim Scrollen sichtbar bleiben, aber es ist eine Eigenschaft des Fensters und nicht des Blattes, und es fixiert alles oberhalb und links der aktiven Zelle. Dieser Guide erklĂ€rt, warum Sie die aktive Zelle vor dem Setzen positionieren mĂŒssen, warum die Fixierung an ActiveWindow hĂ€ngt und jedes Neue Fenster seine eigene bekommt, wie Sie sie ausschalten und neu setzen, FreezePanes gegenĂŒber Split und den Weg ohne Select ĂŒber SplitRow.

Henry
VBA PasteSpecial in Excel — nur Werte, Formate oder Formeln einfĂŒgen (und warum es fehlschlĂ€gt)

VBA PasteSpecial in Excel — nur Werte, Formate oder Formeln einfĂŒgen (und warum es fehlschlĂ€gt)

PasteSpecial in Excel VBA ist ein gefilterter EinfĂŒgevorgang, der die aktuelle Zwischenablage ausliest – deshalb muss es direkt auf ein Copy folgen, und alles, was die Zwischenablage dazwischen leert, wirft PasteSpecial method of Range class failed. Dieser Guide erklĂ€rt die zwei Achsen – was ĂŒbertragen wird (xlPasteValues, xlPasteFormats, xlPasteFormulas, xlPasteColumnWidths) und wie es ankommt (Operation, Transpose, SkipBlanks) –, die Formatfalle und wann Sie PasteSpecial ganz weglassen sollten.

Henry
VBA Paste Values in Excel — Formeln richtig in ihre Ergebnisse einfrieren

VBA Paste Values in Excel — Formeln richtig in ihre Ergebnisse einfrieren

Werte einfĂŒgen in Excel VBA friert eine aktive Formel zu der Zahl ein, die sie gerade anzeigt, damit das Ergebnis das Löschen seiner Quelle ĂŒbersteht, volatile Formeln aufhören sich neu zu berechnen, und externe VerknĂŒpfungen verstummen, bevor Sie eine Datei versenden. Dieser Guide zeigt das Rezept mit xlPasteValues, die Formatfalle, die Datumswerte in Seriennummern verwandelt, wann xlPasteValuesAndNumberFormats die bessere Wahl ist, und die Ein-Zeilen-AbkĂŒrzung dst.Value = src.Value, die die Zwischenablage nie berĂŒhrt.

Henry
VBA Copy Destination in Excel — einen Bereich bewegen, ohne die Zwischenablage zu berĂŒhren

VBA Copy Destination in Excel — einen Bereich bewegen, ohne die Zwischenablage zu berĂŒhren

Range.Copy Destination in Excel VBA kopiert einen Bereich in einer einzigen Anweisung direkt zum Ziel, sodass die Zwischenablage nie berĂŒhrt wird, nichts sie wĂ€hrend der Laufzeit beschĂ€digen kann und kein Select das Makro ausbremst. Dieser Guide stellt Copy Destination dem aufgezeichneten Select-Copy-Paste-Dreisprung gegenĂŒber, erklĂ€rt die Regel der oberen linken Zelle, zeigt, was eine vollstĂ€ndige Kopie mitbringt im Vergleich zur reinen Werte-AbkĂŒrzung dst.Value = src.Value, und sagt, wann Sie die Zwischenablage trotzdem brauchen.

Henry
VBA ColorIndex in Excel — die 56-Farben-Palette und warum Ihre Farbe daneben liegt

VBA ColorIndex in Excel — die 56-Farben-Palette und warum Ihre Farbe daneben liegt

ColorIndex in Excel VBA ist keine Farbe, sondern eine Platznummer in einer 56-Felder-Palette, die die Arbeitsmappe neu belegen kann — deshalb erscheint derselbe Index bei Ihnen golden und bei einer Kollegin senffarben. Diese Anleitung trennt ColorIndex (ein Paletten-Platz, 1 bis 56) von Color (ein absoluter RGB-Wert), erklĂ€rt die Sonderwerte xlNone und xlColorIndexAutomatic und zeigt, wann Sie doch zu ColorIndex greifen und wann Color die sicherere Wahl ist.

Henry
VBA RGB-Funktion in Excel — wie eine Farbe zu einer Zahl wird (und die BGR-Falle)

VBA RGB-Funktion in Excel — wie eine Farbe zu einer Zahl wird (und die BGR-Falle)

Die RGB-Funktion in Excel VBA packt drei KanĂ€le von 0 bis 255 in eine einzige Long-Zahl, und diese Zahl wird nicht so gespeichert, wie ein Web-Hex es nahelegt. Diese Anleitung erklĂ€rt, wie RGB eine Farbe baut, warum der Wert, den Sie aus Color zurĂŒcklesen, byteweise umgedrehtes BGR ist (sodass ein eingefĂŒgtes Web-Hex wie 4472C4 die falsche Farbe ergibt), wie Sie die vb-Farbkonstanten nutzen und wie Sie eine gespeicherte Farbe wieder in Rot, GrĂŒn und Blau zerlegen.

Henry
VBA Bedingte Formatierung in Excel — Regeln, die live bleiben, statt einer Schleife, die veraltet

VBA Bedingte Formatierung in Excel — Regeln, die live bleiben, statt einer Schleife, die veraltet

Bedingte Formatierung in Excel VBA ist eine stehende Regel, die Sie Excel einmal ĂŒber die FormatConditions-Sammlung ĂŒbergeben, und Excel fĂŒhrt sie bei jeder Änderung erneut aus — anders als eine VBA-Schleife, die Zellen einmal fĂ€rbt und veraltet, sobald sich ein Wert Ă€ndert. Diese Anleitung behandelt das HinzufĂŒgen einer Regel mit FormatConditions.Add, die Löschen-vor-HinzufĂŒgen-Gewohnheit, die verhindert, dass sich Regeln stapeln, die Falle aus absolutem und relativem Bezug in einer Ausdrucksregel und wann eine statische Schleife noch die richtige Wahl ist.

Henry
VBA ThisWorkbook in Excel — warum es nicht dasselbe ist wie ActiveWorkbook

VBA ThisWorkbook in Excel — warum es nicht dasselbe ist wie ActiveWorkbook

ThisWorkbook meint immer die eine Arbeitsmappe, die Ihren Code enthĂ€lt, und Ă€ndert sich nie, selbst wenn der Benutzer ein anderes Fenster anklickt, wĂ€hrend ActiveWorkbook das meint, was gerade zufĂ€llig im Vordergrund liegt. Diese Anleitung erklĂ€rt die Unterscheidung fest gegenĂŒber wankelmĂŒtig, die entscheidet, ob ein Makro die richtige Datei bearbeitet, warum ein nicht qualifizierter Range der hĂ€ufigste Grund ist, dass ein Makro die falsche Arbeitsmappe beschĂ€digt, wie Sie eine andere offene Arbeitsmappe per Namen ansprechen und warum ThisWorkbook Ihr Standardanker sein sollte.

Henry
VBA ActiveWorkbook und ActiveSheet in Excel — das Objekt, das die falsche Datei anfasst

VBA ActiveWorkbook und ActiveSheet in Excel — das Objekt, das die falsche Datei anfasst

ActiveWorkbook und ActiveSheet zeigen auf das, was der Benutzer zuletzt angeklickt hat, was sie bequem macht und zugleich zur grĂ¶ĂŸten einzelnen Quelle dafĂŒr, dass ein Makro die falsche Datei anfasst. Diese Anleitung erklĂ€rt, warum das aktive Objekt ein bewegliches Ziel ist, das Select-und-Activate-Anti-Pattern, das aufgezeichnete Makros hinterlassen, wann das Handeln am aktiven Objekt wirklich richtig ist, wie Sie das aktive Objekt einmal in eine Variable lesen, statt wieder und wieder danach zu greifen, und warum direkte Referenzen das AuswĂ€hlen jedes Mal schlagen.

Henry
VBA Worksheets in Excel — ein Blatt so ansprechen, dass ein umbenanntes Register es nicht bricht

VBA Worksheets in Excel — ein Blatt so ansprechen, dass ein umbenanntes Register es nicht bricht

Die Worksheets-Sammlung ist die Art, wie Sie ein Blatt im Code benennen, und Sie können es auf drei Arten ansprechen: per Namenszeichenkette, per Indexnummer oder per CodeName. Diese Anleitung erklÀrt, warum der Name in dem Moment bricht, in dem ein Benutzer ein Register umbenennt, warum der Index bricht, wenn jemand die Register umsortiert, warum der CodeName an keinem von beiden bricht, den echten Unterschied zwischen Worksheets und Sheets und wie Sie einmal eine qualifizierte Worksheet-Variable setzen, sodass der Rest Ihres Makros nie wieder eine fragile Referenz anfasst.

Henry
VBA Kommentar in Excel — Code auskommentieren, die Apostroph-Regel und warum er nie lĂ€uft

VBA Kommentar in Excel — Code auskommentieren, die Apostroph-Regel und warum er nie lĂ€uft

Ein Kommentar ist die eine Zeile, die der Compiler garantiert ignoriert — Ihr sicherster Debugging-Griff und zugleich Ihre gefĂ€hrlichste Dokumentationsgewohnheit. Diese Anleitung erklĂ€rt den Apostroph gegenĂŒber Rem, wie Sie mit der versteckten Edit toolbar einen ganzen Block auskommentieren, warum ein Kommentar keine Zeilenfortsetzung ĂŒberleben kann, den Unterschied zwischen einem Quellcode-Kommentar und einem Zell-Comment-Objekt und die einzigen Kommentare, die sich wirklich lohnen.

Henry
VBA Option Explicit in Excel — aus einem stillen Tippfehler einen lauten Compile error machen

VBA Option Explicit in Excel — aus einem stillen Tippfehler einen lauten Compile error machen

Option Explicit ist die wirkungsvollste einzelne Zeile in VBA, denn ohne sie ist ein vertippter Variablenname kein Fehler, sondern eine brandneue leere Variable, die stillschweigend null zurĂŒckgibt. Diese Anleitung zeigt den Silent-Typo-Bug, den sie tötet, warum sie pro Modul gilt und wie die Einstellung Require Variable Declaration sie fĂŒr Sie hinzufĂŒgt, was zu tun ist, wenn Variable not defined in altem Code auftaucht, und warum sie die Deklaration erzwingt, aber nicht die Datentypen.

Henry
VBA Zeilenfortsetzung in Excel — der Unterstrich, seine Regeln und die String-Falle

VBA Zeilenfortsetzung in Excel — der Unterstrich, seine Regeln und die String-Falle

VBA-Zeilenfortsetzung ist ein Leerzeichen gefolgt von einem Unterstrich, mit dem eine lange Anweisung mehrere physische Zeilen umspannen kann, und der Parser entfernt ihn vor dem Kompilieren, sodass sich nur Àndert, wie sich die Quelle liest. Diese Anleitung behandelt das Pflicht-Leerzeichen vor dem Unterstrich, warum Sie nicht innerhalb eines String-Literals umbrechen können, warum ein Kommentar eine Fortsetzung tötet, wie der Doppelpunkt das Gegenteil tut, indem er Anweisungen verbindet, und wann Sie dazu greifen.

Henry
VBA Debug.Print in Excel — warum Ihre Ausgabe in einem Fenster landet, das Sie nicht sehen

VBA Debug.Print in Excel — warum Ihre Ausgabe in einem Fenster landet, das Sie nicht sehen

Debug.Print schreibt eine Zeile in das Immediate Window und lĂ€uft weiter — der nicht blockierende Weg, eine Schleife ihre Werte streamen zu lassen, statt in MsgBox-Popups zu ertrinken. Diese Anleitung erklĂ€rt, warum Debug.Print scheinbar nichts tut, bis Sie das Immediate Window mit Ctrl+G öffnen, warum der rund 200 Zeilen große Puffer frĂŒhe Ausgaben still verwirft, warum das Ausdrucken eines Ausdrucks echte Nebenwirkungen auslösen kann, worin es sich von MsgBox unterscheidet, und wann Sie aufhören sollten, ins Fenster zu protokollieren, und stattdessen in eine Datei schreiben.

Henry
VBA Immediate Window in Excel — die Konsole, die Code ausfĂŒhrt, sobald Sie fragen

VBA Immediate Window in Excel — die Konsole, die Code ausfĂŒhrt, sobald Sie fragen

Das Immediate Window ist zwei Werkzeuge in einem — der Ort, an dem die Ausgabe von Debug.Print landet, und eine Live-Konsole, in die Sie eine Zeile VBA tippen und sofort ausfĂŒhren. Diese Anleitung zeigt, wie die AbkĂŒrzung ? jeden Ausdruck auswertet, warum ein ? vor einer Funktion diese Funktion samt ihren Nebenwirkungen tatsĂ€chlich ausfĂŒhrt, warum Ihre lokalen Variablen leer erscheinen, solange das Makro nicht im break mode angehalten ist, wie Sie einen Sub oder eine einzeilige Schleife von Hand aufrufen, und wann die Konsole ihren Dienst getan hat und die Logik in ein Modul gehört.

Henry
VBA Breakpoint in Excel — ein Makro einfrieren und Zeile fĂŒr Zeile durchsteppen

VBA Breakpoint in Excel — ein Makro einfrieren und Zeile fĂŒr Zeile durchsteppen

Ein Breakpoint friert ein Makro auf einer Zeile ein, bevor sie lĂ€uft, und versetzt Sie in den break mode, wo Sie jeden lebendigen Wert lesen und den Code dann mit F8 Zeile fĂŒr Zeile durchgehen. Diese Anleitung behandelt das Setzen von Breakpoints mit F9, den Unterschied zwischen Step Into und Step Over, warum Breakpoints verschwinden, wenn Sie die Arbeitsmappe schließen, warum eine Stop-Anweisung niemals zu Nutzern gelangen darf, wie Debug.Assert Ihnen einen bedingten Breakpoint gibt, der zur Laufzeit ignoriert wird, und wann Durchsteppen besser ist, als Debug.Print ĂŒber den Code zu streuen.

Henry
VBA IsNumeric in Excel — warum es zu Dingen Ja sagt, die gar keine Zahlen sind

VBA IsNumeric in Excel — warum es zu Dingen Ja sagt, die gar keine Zahlen sind

IsNumeric fragt nicht, ob eine Zeichenkette eine Zahl ist — es fragt, ob VBA sie als Zahl parsen könnte, wenn es mĂŒsste, und VBA gibt sich alle MĂŒhe. Diese Anleitung zeigt, warum IsNumeric bei wissenschaftlicher Notation, einem Hex-Literal, einem Tausendertrennzeichen, einer mit Leerzeichen aufgefĂŒllten Zeichenkette und sogar einem nachgestellten Vorzeichen True liefert, warum das schlechte Daten durch Ihre PrĂŒfung lĂ€sst, warum es gebietsschema-abhĂ€ngig genug ist, um Daten zwischen Rechnern zu zerstören, und wann Sie ihm nicht mehr trauen und die Form stattdessen mit dem Like-Operator festnageln sollten.

Henry
VBA Like-Operator in Excel — Platzhalter-Abgleich und die Falle mit der ganzen Zeichenkette

VBA Like-Operator in Excel — Platzhalter-Abgleich und die Falle mit der ganzen Zeichenkette

Der VBA-Operator Like beantwortet genau eine Boolean-Frage — passt die ganze Zeichenkette auf diese Platzhalter-Form? Diese Anleitung behandelt die fĂŒnf Platzhalter (Sternchen, Fragezeichen, Raute sowie die Formen [Liste] und [!Liste]), warum Like die gesamte Zeichenkette prĂŒft und Sie deshalb Sternchen um einen Teilstring brauchen, warum die Groß-/Kleinschreibung ein modulweiter Option-Compare-Schalter ohne Override pro Aufruf ist, wie Sie ein wörtliches Sternchen mit eckigen Klammern treffen, und wann Like sowohl InStr als auch einen vollen regulĂ€ren Ausdruck schlĂ€gt.

Henry
VBA Regex in Excel — das RegExp-Objekt und warum Ihr Treffer leer zurĂŒckkommt

VBA Regex in Excel — das RegExp-Objekt und warum Ihr Treffer leer zurĂŒckkommt

Regex ist in VBA kein SchlĂŒsselwort — es ist das VBScript-RegExp-Objekt, das Sie erzeugen, und es tut nichts NĂŒtzliches, bis Sie drei Schalter setzen und nach der richtigen Ausgabe greifen. Diese Anleitung behandelt spĂ€te Bindung gegenĂŒber dem HinzufĂŒgen des Verweises, warum Global standardmĂ€ĂŸig False ist und Sie deshalb nur den ersten Treffer bekommen, den Unterschied zwischen Test, Replace und Execute, warum Extrahieren heißt, ĂŒber Match.Value hinaus zu SubMatches zu greifen, und den VBScript-Musterdialekt mit seinen Dollar-Zeichen-RĂŒckverweisen.

Henry
VBA Filter in Excel — ein Array in einem Aufruf eingrenzen, und warum es nicht AutoFilter ist

VBA Filter in Excel — ein Array in einem Aufruf eingrenzen, und warum es nicht AutoFilter ist

Die VBA-Funktion Filter nimmt ein eindimensionales String-Array und gibt ein neues, kleineres Array zurĂŒck, das nur die Elemente enthĂ€lt, die einen von Ihnen genannten Teilstring enthalten — sie ist der Array-Vetter von InStr und rĂŒhrt nie eine Zelle an. Diese Anleitung entwirrt die stĂ€ndige Verwechslung mit AutoFilter (einer Arbeitsblattmethode, die Zeilen ausblendet) und behandelt dann die drei Fallen, die Filter kaputt aussehen lassen: Sie trifft Teilstrings statt ganzer Werte, sie beachtet standardmĂ€ĂŸig die Groß-/Kleinschreibung, bis Sie vbTextCompare ĂŒbergeben, und sie liefert ein nullbasiertes Array, dessen UBound minus eins ist, wenn nichts passt.

Henry
VBA Join in Excel — Array zurĂŒck zu einem String, die exakte Umkehrung von Split

VBA Join in Excel — Array zurĂŒck zu einem String, die exakte Umkehrung von Split

Die VBA-Funktion Join klebt ein eindimensionales Array wieder zu einem einzigen String zusammen und setzt zwischen jedes Element ein Trennzeichen — sie ist die exakte Umkehrung von Split und die einzeilige Kur fĂŒr die Verkettungsschleife, die immer ein Trennzeichen am Ende hinterlĂ€sst. Diese Anleitung zeigt, warum Join nur ein 1-D-Array akzeptiert (sodass Range.Value fehlschlĂ€gt, bis Sie es flach machen), warum das Trennzeichen standardmĂ€ĂŸig ein Leerzeichen ist statt nichts, wie jedes Element in Text umgewandelt wird, und die Split-Filter-Join-Pipeline, die eine fĂŒnfzehnzeilige Schleife durch einen Ausdruck ersetzt.

Henry
VBA Transpose in Excel — ein Array umformen und eine Spalte auf 1-D flach machen

VBA Transpose in Excel — ein Array umformen und eine Spalte auf 1-D flach machen

Application.Transpose vertauscht Zeilen und Spalten eines Arrays, doch seine eigentliche Alltagsaufgabe in VBA ist leiser: Das Transponieren eines einspaltigen Bereichs fasst ihn zu dem eindimensionalen Array zusammen, das Join und Filter beide brauchen. Diese Anleitung behandelt den Flatten-Trick, warum es Application.Transpose ist und nie ein nacktes Transpose, die stille 65.536-Elemente-Decke, die Sie bei großen Daten verrĂ€t, und die Fehler, die es bei Strings ĂŒber 255 Zeichen oder Arrays mit einem Fehlerwert wirft — damit Sie genau wissen, wo das Umformen aufhört und eine echte Schleife beginnt.

Henry
VBA Pivot Table in Excel — erstellen, aktualisieren und warum sie alte Zahlen zeigt

VBA Pivot Table in Excel — erstellen, aktualisieren und warum sie alte Zahlen zeigt

Eine PivotTable in Excel VBA liest nicht Ihre Zellen, sondern einen PivotCache — eine eingefrorene Momentaufnahme der Quelldaten, die beim Erstellen der Pivot entsteht, und diese eine Tatsache erklĂ€rt die hĂ€ufigste Pivot-Beschwerde: Sie Ă€ndern die Daten, und die Pivot zeigt weiter die Zahlen von gestern, bis Sie RefreshTable aufrufen. Diese Anleitung behandelt den modernen zweistufigen Aufbau mit PivotCaches.Create und CreatePivotTable, das Anordnen der Felder ĂŒber die vier Orientation-Werte, das HinzufĂŒgen von Datenfeldern mit der richtigen Zusammenfassungsfunktion, die Aktualisierungsfalle und die Quellbereichsfalle, die Sie lösen, indem Sie den Cache auf eine Table richten, damit die Pivot von allein mitwĂ€chst.

Henry
VBA Table (ListObject) in Excel — Zeilen hinzufĂŒgen und die Jagd nach der letzten Zeile beenden

VBA Table (ListObject) in Excel — Zeilen hinzufĂŒgen und die Jagd nach der letzten Zeile beenden

Eine Excel-Tabelle in VBA ist ein ListObject — ein Bereich, der seine eigene Kopfzeile, seinen Datenkörper und seine RĂ€nder kennt und sich automatisch ausdehnt, wenn Sie hineinschreiben, und genau deshalb erledigt sie die hĂ€ufigste Makro-Fron: die Jagd nach der letzten Zeile mit End(xlUp). Diese Anleitung behandelt das Umwandeln eines Bereichs mit ListObjects.Add, das Ansprechen der Teile ĂŒber ihren Namen (HeaderRowRange, DataBodyRange, ListColumns), das zuverlĂ€ssige HinzufĂŒgen von Zeilen mit ListRows.Add, die DataBodyRange-ist-Nothing-Falle bei einer leeren Tabelle und das Schreiben von Formeln mit strukturierten Verweisen, die EinfĂŒgungen ĂŒberstehen.

Henry
VBA Chart in Excel — ein Diagramm im Code erstellen und warum es die falschen Daten zeichnet

VBA Chart in Excel — ein Diagramm im Code erstellen und warum es die falschen Daten zeichnet

Ein Diagramm in Excel VBA hĂ€lt keine Daten, sondern einen Verweis auf einen Range, denn jede Datenreihe speichert ihre Werte als Formel wie =Sheet1!$B$2:$B$13, und diese eine Tatsache erklĂ€rt, warum ein Diagramm still die falschen Zellen zeichnet, sobald sich seine Quelle bewegt. Diese Anleitung behandelt die Zwei-Container-Trennung, ĂŒber die jedes Diagramm-Makro stolpert (eingebettete ChartObjects gegenĂŒber DiagrammblĂ€ttern), das Erstellen eines Diagramms und das Binden der Daten in einem Zug mit SetSourceData, das HinzufĂŒgen von Datenreihen von Hand mit SeriesCollection.NewSeries, die Duplikat-Diagramm-Falle beim erneuten Lauf und das Binden der Quelle an eine Table, damit das Diagramm den Daten folgt statt einer eingefrorenen Adresse.

Henry
VBA Named Range in Excel — Names.Add, RefersTo und warum Ihre Referenz driftet

VBA Named Range in Excel — Names.Add, RefersTo und warum Ihre Referenz driftet

Ein Named Range in Excel VBA ist kein Spitzname fĂŒr eine Zelle, sondern eine gespeicherte Formel, die Excel bei jeder Verwendung des Namens neu auflöst, und diese eine Tatsache erklĂ€rt jede Named-Range-Überraschung, auf die Sie je stoßen werden. Sie erklĂ€rt, warum RefersTo ein fĂŒhrendes Gleichheitszeichen braucht, warum die Dollarzeichen entscheiden, ob der Name absolut ist oder mit der aktiven Zelle driftet, warum ein Name einen Scope hat, der entweder die ganze Arbeitsmappe oder ein einzelnes Blatt umfasst, und warum das Löschen der Zellen unter einem Namen ihn auf einen dauerhaften #REF!-Fehler zeigen lĂ€sst. Diese Anleitung behandelt Names.Add und die einzeilige Range.Name-AbkĂŒrzung, den Scope ĂŒber die Arbeitsmappe gegenĂŒber dem Blatt, das Lesen des Werts, auf den ein Name verweist, und das AusrĂ€umen der kaputten Namen, die eine Arbeitsmappe aufblĂ€hen.

Henry
VBA AutoFill in Excel — eine Serie oder Formel fĂŒllen ohne die Destination-Falle

VBA AutoFill in Excel — eine Serie oder Formel fĂŒllen ohne die Destination-Falle

AutoFill in Excel VBA ist eine Muster-Maschine, kein Kopierbefehl, und diese Unterscheidung festzuhalten ist genau das, was es davon abhĂ€lt, Sie zu ĂŒberraschen. Range.AutoFill nimmt einen kleinen Seed und dehnt ihn ĂŒber eine grĂ¶ĂŸere Destination, wobei es eine Serie wie 1, 2, 3 oder die Monate des Jahres fortsetzt, statt bloß den Seed zu wiederholen, was zugleich der ganze Sinn und die ganze Falle ist. Diese Anleitung behandelt die Destination-Regel, die den run-time 1004 verursacht, den jeder trifft, den FillType, der entscheidet, ob Sie eine Serie oder eine Kopie bekommen, das FĂŒllen einer Formel eine Spalte hinunter, sodass sich ihre Referenzen pro Zeile anpassen, und warum die einfacheren FillDown und FillRight meist das bessere Werkzeug sind, wenn Sie nur eine schlichte Kopie wollen.

Henry
VBA Clear in Excel — ClearContents vs Clear vs Delete und die Leerstring-Falle

VBA Clear in Excel — ClearContents vs Clear vs Delete und die Leerstring-Falle

Eine Zelle in Excel VBA zu leeren ist ein MenĂŒ, kein einzelner Befehl, und den falschen Eintrag zu wĂ€hlen ist der Weg, wie Makros still eine Vorlage zerstören oder die Zellen verschieben, von denen andere Formeln abhĂ€ngen. Eine Zelle ist ein Stapel aus Schichten, der Wert und die Formel, das Zahlenformat, Schrift und FĂŒllung, Rahmen, GĂŒltigkeitsprĂŒfung und Kommentare, und jede Leer-Methode wischt eine gewĂ€hlte Teilmenge, wĂ€hrend der Rest ĂŒberlebt. Diese Anleitung behandelt ClearContents gegenĂŒber Clear gegenĂŒber ClearFormats, warum eine Zelle auf einen leeren String zu setzen nicht dasselbe ist, wie sie leer zu machen, den entscheidenden Unterschied zwischen Clear und Delete, der jede Adresse darunter Ă€ndert, und wie man einen ganzen UsedRange in einem einzigen schnellen Aufruf leert.

Henry
VBA Cell Value in Excel — .Value lesen und schreiben und der Range-zu-Array-Trick

VBA Cell Value in Excel — .Value lesen und schreiben und der Range-zu-Array-Trick

Eine Zelle in Excel VBA zu lesen und zu schreiben lĂ€uft ĂŒber die Range-Eigenschaft .Value, und das Wichtigste ist, was bei mehr als einer Zelle passiert: ein mehrzelliger Range liefert Ihnen ein 1-basiertes, zweidimensionales Variant-Array, und ein Array zurĂŒckzuschreiben setzt den ganzen Block in einem einzigen Aufruf. Genau das trennt ein Makro, das sofort fertig ist, von einem, das quĂ€lt, denn jeder einzelne Cells(i, j).Value-Zugriff ĂŒberquert die Grenze von VBA nach Excel. Diese Anleitung behandelt .Value auf einer einzelnen Zelle gegenĂŒber einem Range, den Array-Roundtrip, der Massen-Lesen und -Schreiben schnell macht, warum das Array selbst fĂŒr eine Spalte 2D ist, und die Standard-Eigenschaft-AbkĂŒrzung, auf die Sie sich nicht verlassen sollten.

Henry
VBA Formula in Excel — Formeln im Code schreiben mit .Formula und .FormulaR1C1

VBA Formula in Excel — Formeln im Code schreiben mit .Formula und .FormulaR1C1

Eine Formel aus Excel VBA zu schreiben bedeutet, der Range-Eigenschaft .Formula eine Zeichenkette zuzuweisen, und die eine Regel, die jeden erwischt, ist, dass .Formula einen einzigen festen Dialekt spricht: US-englische Funktionsnamen und Kommatrennzeichen, egal welche Sprache oder Regionseinstellungen der Nutzer hat. =SUM(A1:A10) zuzuweisen funktioniert auf jeder Maschine, und Excel lokalisiert die Anzeige; das deutsche =SUMME(A1;A10) zuzuweisen löst run-time error 1004 aus. Diese Anleitung behandelt .Formula gegenĂŒber dem lokalisierten .FormulaLocal, .FormulaR1C1, um relative Formeln ĂŒber einen ganzen Range zu stempeln, warum das fĂŒhrende Gleichheitszeichen Pflicht ist, wie man AnfĂŒhrungszeichen in einer Formel-Zeichenkette verdoppelt, und das ZurĂŒcklesen einer Formel mit .HasFormula.

Henry
VBA Value vs Value2 vs Text in Excel — welches liest die Zelle richtig

VBA Value vs Value2 vs Text in Excel — welches liest die Zelle richtig

Eine Zelle in Excel VBA hat mehr als ein Gesicht, und das falsche zu lesen ist ein stiller Bug: .Value2 gibt die rohe gespeicherte Zahl, .Value gibt diese Zahl in einen passenden VBA-Typ umgewandelt (eine als Datum formatierte Zelle liefert ein Date, eine WĂ€hrungszelle ein Currency), und .Text gibt die formatierte Zeichenkette, die auf dem Bildschirm erscheint, schreibgeschĂŒtzt. .Text zum Rechnen zu lesen gibt Ihnen eine Zeichenkette wie $1,235 oder sogar ### zurĂŒck, wenn die Spalte schmal ist; .Value auf einer WĂ€hrungszelle kann eine große Zahl runden; .Value2 ist der schnelle, verlustfreie Standard. Diese Anleitung erklĂ€rt alle drei Lese-Gesichter, wann die Currency- und Date-Umwandlung Genauigkeit verliert, warum .Text nur zur Anzeige dient und nicht zugewiesen werden kann, und zu welchem Gesicht man greifen sollte.

Henry
VBA Shell in Excel — ein externes Programm starten, und warum Ihr Code nicht wartet

VBA Shell in Excel — ein externes Programm starten, und warum Ihr Code nicht wartet

Die VBA-Funktion Shell startet ein externes Programm und geht sofort weiter — sie ist fire-and-forget. Shell liefert eine Task-ID zurĂŒck, nicht den Exit-Code des Programms, seine Ausgabe oder ein Erfolgssignal, und die nĂ€chste Zeile Ihres Makros lĂ€uft bereits, wĂ€hrend das Programm noch startet. Das ist der Bug hinter den meisten Shell-Fehlern: Sie starten mit Shell einen Konverter und versuchen dann, eine Datei zu öffnen, die er noch gar nicht geschrieben hat. Diese Anleitung erklĂ€rt, warum Shell nicht wartet, wie Sie Pfade mit Leerzeichen in AnfĂŒhrungszeichen setzen, warum Shell ausfĂŒhrbare Dateien startet, aber von sich aus kein PDF und keine URL öffnen kann, und wann Sie Shell zugunsten von WScript.Shell Run oder Exec fallen lassen, um tatsĂ€chlich auf das Programm warten und lesen zu können, was es erzeugt hat.

Henry
VBA Environ in Excel — Windows-Pfade lesen, ohne einen Benutzerordner fest zu verdrahten

VBA Environ in Excel — Windows-Pfade lesen, ohne einen Benutzerordner fest zu verdrahten

Die VBA-Funktion Environ liest die Umgebungsvariablen, die Windows jedem Programm mitgibt — USERPROFILE, TEMP, USERNAME, APPDATA —, sodass Sie benutzerspezifische Pfade bauen können, ohne C:\Users\John fest zu verdrahten, was auf jedem anderen Rechner bricht. Ihre kennzeichnende Falle ist lautlos: Eine fehlende oder falsch geschriebene Variable liefert eine leere Zeichenkette, keinen Fehler, also gibt Environ mit einem Tippfehler wie TMEP klammheimlich nichts zurĂŒck, und Ihr Pfad landet im Wurzelverzeichnis des Laufwerks. Diese Anleitung behandelt, warum Environ das Werkzeug fĂŒr portable Pfade ist, warum Sie jedes Ergebnis als möglicherweise leer behandeln mĂŒssen, die zwei Aufrufformen (nach Name gegenĂŒber nach numerischem Index), den Snapshot, den Environ beim Start von Excel nimmt, und was Environ nicht kann — Variablen setzen oder eine nach dem Start geĂ€nderte lesen.

Henry
VBA CreateObject in Excel — Late Binding, GetObject und warum Outlook offen bleibt

VBA CreateObject in Excel — Late Binding, GetObject und warum Outlook offen bleibt

CreateObject ist der GeneralschlĂŒssel von VBA zu allem außerhalb von Excel — es startet jede COM-Anwendung ĂŒber ihre ProgID-Zeichenkette: Scripting.FileSystemObject, Scripting.Dictionary, Outlook.Application, WScript.Shell, Word.Application. Dieses Nachschlagen per Zeichenkette ist Late Binding: Der Compiler weiß nichts ĂŒber das Objekt, also scheitert eine falsche ProgID oder eine nicht installierte Anwendung erst zur Laufzeit mit error 429. Diese Anleitung erklĂ€rt die eigentliche Entscheidung zwischen Late und Early Binding (PortabilitĂ€t gegenĂŒber IntelliSense), warum CreateObject immer eine neue Instanz startet, wĂ€hrend GetObject sich an eine laufende hĂ€ngt, und warum ein kopfloser Outlook- oder Excel-Prozess im Task-Manager hĂ€ngen bleibt, wenn Sie vergessen, die Anwendung mit Quit zu beenden und das Objekt auf Nothing zu setzen.

Henry
VBA Now, Date & Time in Excel — die Uhr auslesen, und warum Date auch eine Anweisung ist

VBA Now, Date & Time in Excel — die Uhr auslesen, und warum Date auch eine Anweisung ist

Ein VBA-Datum ist ein Double — der Ganzzahlteil zĂ€hlt die Tage seit dem 30.12.1899, der Nachkommateil ist die Uhrzeit, und so sind Now, Date und Time nur drei Blicke auf dieselbe Uhr. Now liefert Datum plus Uhrzeit, Date liefert heute um Mitternacht, Time nur die Uhrzeit. Der Bug, der die meisten Makros zerlegt, ist der Vergleich eines gespeicherten Now-Werts mit Date, der nie passt, weil Now einen Nachkommateil trĂ€gt, den das ganzzahlige Date nicht hat. Schlimmer noch, Date und Time sind auch Anweisungen, die die Systemuhr des Rechners neu stellen. Diese Anleitung zeigt, was der Double wirklich ist, warum der Gleichheitstest scheitert, wie Sie die Uhrzeit mit Int oder DateValue abschneiden, und warum Now Ortszeit ist statt UTC.

Henry
VBA DateAdd & DateDiff in Excel — Datumsrechnung ohne den MonatslĂ€ngen-Bug

VBA DateAdd & DateDiff in Excel — Datumsrechnung ohne den MonatslĂ€ngen-Bug

Weil ein VBA-Datum ein Double ist, rĂŒckt 1 zu addieren um einen Tag vor, und schlichte Arithmetik stimmt — fĂŒr Tage. Sie bricht in dem Moment, in dem Sie einen Monat als 30 Tage oder ein Jahr als 365 behandeln, denn Monate und Schaltjahre haben keine feste LĂ€nge. DateAdd kennt den Kalender, also ergibt einen Monat zum 31. Januar addiert den 28. Februar statt eines unmöglichen 31. DateDiff zĂ€hlt die ĂŒberschrittenen Grenzen, nicht die verstrichene Zeit, weshalb die LĂŒcke vom 31. Dezember zum 1. Januar ein Jahr ist, obwohl nur ein Tag verging. DateSerial baut ein Datum aus Jahr, Monat und Tag ohne regionale Mehrdeutigkeit und normalisiert Überlauf, was die saubere Letzter-Tag-des-Monats-Redewendung liefert. Diese Anleitung zeigt, wann schlichtes Plus genĂŒgt, welche Intervallcodes Leute stolpern lassen, und warum DateDiff eine GrenzzĂ€hlung ist.

Henry
VBA Weekday & DatePart in Excel — Datumsteile herausziehen, und warum Montag nicht 1 ist

VBA Weekday & DatePart in Excel — Datumsteile herausziehen, und warum Montag nicht 1 ist

Year, Month, Day, Hour, Minute und Second ziehen je eine Ganzzahl aus einem Datum zurĂŒck — dem Double, in den Sie ohnehin schon hineinsehen können — und sie sind so einfach, wie sie aussehen. Weekday ist das, was beißt — es liefert 1 bis 7, aber die Nummerierung hĂ€ngt von einem zweiten Argument ab, das standardmĂ€ĂŸig Sonntag gleich 1 setzt, sodass in einem schlichten Aufruf Montag 2 ist, nicht 1, und jeder auf einer fest verdrahteten Zahl gebaute Wochenendtest still falsch ist. DatePart ist der allgemeine Extraktor mit denselben Intervallcodes wie DateAdd, und er erreicht Teile ohne eigene Funktion wie die Kalenderwoche und das Quartal, wobei seine Wochenregel standardmĂ€ĂŸig nicht ISO 8601 ist. WeekdayName und MonthName liefern Namen in der Rechnersprache, gut fĂŒr die Anzeige, aber nicht zum ZurĂŒcklesen. Diese Anleitung zeigt, wie Sie jeden Teil herausziehen und warum Montag nicht 1 ist.

Henry
VBA FreeFile & die Open-Anweisung in Excel — eine Dateinummer holen, eine Textdatei öffnen (keine Arbeitsmappe)

VBA FreeFile & die Open-Anweisung in Excel — eine Dateinummer holen, eine Textdatei öffnen (keine Arbeitsmappe)

In eingebautem VBA wird eine Textdatei ĂŒber einen nummerierten Kanal erreicht — Sie schreiben Open path For Output As #n, und die Nummer n ist ein Handle, das Sie aus FreeFile nehmen mĂŒssen, statt es von Hand zu wĂ€hlen. Hartcodieren Sie #1, und sobald zwei Dateien geöffnet sind, treffen Sie error 55 File already open; öffnen Sie eine Datei, die bereits Daten enthĂ€lt, For Output, wird sie auf leer gekĂŒrzt; vergessen Sie Close, bleibt die Datei gesperrt, bis Excel beendet wird. Diese Anleitung zeigt, warum FreeFile Ihnen eine Kanalnummer gibt, die Sie in einer Variablen auffangen, den Unterschied zwischen For Output, For Append und For Input, warum die Open-Anweisung nicht Workbooks.Open ist, und das AufrĂ€ummuster, das den Kanal immer schließt.

Henry
VBA Print # vs Write # in Excel — eine Textdatei oder CSV schreiben (und warum Ihre voller AnfĂŒhrungszeichen ist)

VBA Print # vs Write # in Excel — eine Textdatei oder CSV schreiben (und warum Ihre voller AnfĂŒhrungszeichen ist)

Print # und Write # geben gegenteilige Antworten darauf, wie die Bytes auf der Festplatte aussehen sollen. Print # schreibt Text genau so, wie er erscheint — keine AnfĂŒhrungszeichen, keine Kommas, Sie bauen das Layout —, also ist es richtig fĂŒr einen Bericht oder eine handgemachte CSV. Write # schreibt Maschinenformat — jede Zeichenfolge in AnfĂŒhrungszeichen gewickelt, Kommas zwischen den Werten, Datumsangaben in Rauten —, gedacht, um von Input # zurĂŒckgelesen zu werden, nicht von einem Menschen oder Excel. Diese Anleitung zeigt, warum Write # der Grund ist, dass Ihre CSV voller AnfĂŒhrungszeichen ist, warum ein Komma in einer Print #-Liste Druckzonen statt CSV-Kommas einfĂŒgt, wie For Output kĂŒrzt, wĂ€hrend For Append anhĂ€ngt, die Dezimalkomma-Locale-Falle, und warum das eingebaute Schreiben ANSI statt UTF-8 ist.

Henry
VBA Read Text File in Excel — Line Input vs Input #, und die EOF-Schleife, die keine Zeilen verliert

VBA Read Text File in Excel — Line Input vs Input #, und die EOF-Schleife, die keine Zeilen verliert

Eine Textdatei in VBA zu lesen hat drei Werkzeuge, und das falsche zu wĂ€hlen bringt Ihre Daten durcheinander. Line Input # liest eine rohe Zeile in eine Zeichenfolge, und Sie zerlegen sie selbst, was vorhersehbar ist. Input # parst die abgegrenzten Felder direkt in Variablen — schnell fĂŒr eine Datei, die Write # erzeugt hat, aber es verschluckt sich an nicht gequoteten Kommas und verirrten AnfĂŒhrungszeichen. Input(LOF(f), #f) schlĂŒrft die ganze Datei in eine Zeichenfolge. Diese Anleitung zeigt die EOF-Schleife, die jede Zeile genau einmal liest, warum Input # der Zwilling von Write # ist und Line Input # der Zwilling von Print #, wie man den Off-by-one vermeidet, der error 62 auslöst, und wann eine CSV besser als Arbeitsmappe geöffnet wird, als sie von Hand zu parsen.

Henry
VBA MkDir in Excel — einen Ordner erstellen und warum es keinen verschachtelten Pfad anlegen kann

VBA MkDir in Excel — einen Ordner erstellen und warum es keinen verschachtelten Pfad anlegen kann

Die VBA-Anweisung MkDir erstellt genau eine Ordnerebene, keinen ganzen Pfad — MkDir auf einen Pfad, dessen ĂŒbergeordneter Ordner nicht existiert, löst error 76 aus, und MkDir auf einen bereits existierenden Ordner löst error 75 aus, statt einfach nichts zu tun. Die alltĂ€gliche Aufgabe diesen Ordner erstellen heißt also in Wahrheit jede fehlende Ebene erstellen, und nur dort, wo sie fehlt. Diese Anleitung zeigt, warum MkDir nur eine Ebene anlegt, warum FileSystemObject.CreateFolder ebenfalls nicht rekursiv arbeitet, die existenzgeprĂŒfte Schleife, die einen vollstĂ€ndigen Pfad sicher aufbaut, und warum ein bloßer Ordnername unter CurDir statt in Ihrem Arbeitsmappenordner landet.

Henry
VBA RmDir in Excel — einen Ordner löschen, aber nur, wenn er leer ist

VBA RmDir in Excel — einen Ordner löschen, aber nur, wenn er leer ist

Die VBA-Anweisung RmDir löscht einen Ordner nur, wenn er vollstĂ€ndig leer ist — richten Sie sie auf einen Ordner, der noch Dateien oder Unterordner enthĂ€lt, und sie löst error 75 aus, das genaue Spiegelbild von Kill, das jede Datei gnadenlos löscht. Diesen Ordner löschen heißt also in Wahrheit leere ihn zuerst, dann entferne ihn. Diese Anleitung zeigt, warum RmDir einen nicht leeren Ordner verweigert, warum es Ordner, aber niemals Dateien löscht, wie Sie einen Ordner mit Kill vor RmDir leeren und wann FileSystemObject.DeleteFolder einen ganzen Baum in einem Aufruf auslöscht — ohne Papierkorb und ohne Undo.

Henry
VBA CurDir & ChDir in Excel — warum ein relativer Pfad im falschen Ordner landet

VBA CurDir & ChDir in Excel — warum ein relativer Pfad im falschen Ordner landet

In VBA hat ein relativer Pfad keine Bedeutung, bis er gegen CurDir aufgelöst wird, das aktuelle Arbeitsverzeichnis — und in Excel ist dieses Verzeichnis eine wandernde Einstellung, die Sie nicht kontrollieren, nicht der Ordner, in dem Ihre Arbeitsmappe gespeichert ist. So können MkDir Reports oder Open data.csv bei jedem Lauf woanders landen, weil ein Datei-Öffnen-Dialog CurDir still verschiebt. Diese Anleitung zeigt, warum CurDir nicht ThisWorkbook.Path ist, warum ChDir das Laufwerk nicht ohne ChDrive wechseln kann und die eine Gewohnheit, die die ganze Klasse von Falscher-Ordner-Bugs beseitigt — verankern Sie jeden Pfad an ThisWorkbook.Path.

Henry
VBA Copy File in Excel — FileCopy, FileSystemObject.CopyFile und warum es keine geöffnete Arbeitsmappe kopieren kann

VBA Copy File in Excel — FileCopy, FileSystemObject.CopyFile und warum es keine geöffnete Arbeitsmappe kopieren kann

Eine Datei in VBA zu kopieren ist eine Zeile, aber welche Zeile hĂ€ngt davon ab, ob die Datei geöffnet ist. FileCopy ist die eingebaute Anweisung ohne Verweise, und sie ĂŒberschreibt das Ziel still, kann aber keine geöffnete Datei kopieren und wirft error 70 Permission denied genau bei der Arbeitsmappe, die Sie am dringendsten sichern wollen. Diese Anleitung zieht die Grenze zwischen drei Kopierwerkzeugen fĂŒr drei Situationen — FileCopy fĂŒr geschlossene Dateien auf der Festplatte, FileSystemObject.CopyFile fĂŒr Platzhalter und ein explizites Überschreib-Flag und SaveCopyAs fĂŒr die Arbeitsmappe, die gerade jetzt geöffnet ist — und zeigt, warum das Ziel ein vollstĂ€ndiger Pfad samt Dateiname sein muss, warum der Zielordner bereits existieren muss und wie Kopieren-dann-Löschen zu einem Verschieben wird.

Henry
VBA Delete File in Excel — Kill, FileSystemObject.DeleteFile und warum es kein Undo gibt

VBA Delete File in Excel — Kill, FileSystemObject.DeleteFile und warum es kein Undo gibt

Die VBA-Anweisung Kill löscht eine Datei endgĂŒltig — kein Papierkorb, keine BestĂ€tigung, kein Undo. Diese eine Tatsache ist zugleich der ganze Sinn und die ganze Gefahr, und jede andere Regel zum Löschen von Dateien ist ein Weg, diese unumkehrbare Linie abzusichern. Diese Anleitung zeigt, warum Kill einen Fehler auslöst, statt nichts zu tun, wenn eine Datei fehlt oder geöffnet ist, wie ein Platzhalter wie Stern Punkt tmp jeden Treffer in einem Ordner auf einmal ohne RĂŒckfrage löscht, warum Kill keinen Ordner entfernen kann und wie RmDir und DeleteFolder diese Aufgabe aufteilen, und wann FileSystemObject.DeleteFile mit seinem Force-Flag die sicherere Wahl fĂŒr schreibgeschĂŒtzte Dateien ist.

Henry
VBA Rename File in Excel — die Name-Anweisung, die auch Dateien verschiebt (und sich weigert zu ĂŒberschreiben)

VBA Rename File in Excel — die Name-Anweisung, die auch Dateien verschiebt (und sich weigert zu ĂŒberschreiben)

Die VBA-Anweisung Name benennt eine Datei um, ist aber in Wahrheit eine Umbenennen-und-Verschieben-Anweisung — richten Sie den neuen Pfad auf einen anderen Ordner, verschiebt VBA die Datei dorthin, statt sie an Ort und Stelle umzubenennen. Und anders als fast alles andere auf der Festplatte weigert sich Name zu ĂŒberschreiben und löst error 58 aus, wenn das Ziel bereits existiert — das genaue Gegenteil von FileCopy, das still ĂŒberschreibt. Diese Anleitung zeigt, warum Name ebenso verschiebt wie umbenennt, warum es keine Laufwerke wechseln kann und wie FileCopy plus Kill oder FileSystemObject.MoveFile diesen Fall behandelt, und warum Sie das Ziel absichern mĂŒssen, damit ein Fehler bei einer bestehenden Datei ein unbeaufsichtigtes Makro nicht anhĂ€lt.

Henry
VBA Dir in Excel — Dateien in einem Ordner durchlaufen und der zustandsbehaftete Iterator, der Sie stolpern lĂ€sst

VBA Dir in Excel — Dateien in einem Ordner durchlaufen und der zustandsbehaftete Iterator, der Sie stolpern lĂ€sst

Dir sieht aus wie eine Funktion, verhĂ€lt sich aber wie ein Iterator mit verstecktem GedĂ€chtnis — Dir(path) liefert den ersten passenden Dateinamen, dann liefert Dir() ohne Argument den nĂ€chsten, bis eine leere Zeichenfolge kommt. Die eine Regel, die Sie rettet, lautet, rufen Sie Dir niemals erneut mitten in einer Dir-Schleife auf, denn ein zweites Dir startet eine neue Suche und setzt die erste zurĂŒck — die hĂ€ufigste Ursache fĂŒr ĂŒbersprungene Dateien und Endlosschleifen. Lernen Sie, wie Sie jede .xlsx in einem Ordner durchlaufen, warum Dir nur den Namen und nicht den Pfad liefert, warum es nicht in Unterordner absteigen kann und wann Sie die Namen erst in ein Array sammeln, bevor Sie die Dateien anfassen.

Henry
VBA FileSystemObject in Excel — CreateObject gegenĂŒber Verweis, Unterordner und warum es keine Arbeitsmappen öffnet

VBA FileSystemObject in Excel — CreateObject gegenĂŒber Verweis, Unterordner und warum es keine Arbeitsmappen öffnet

Das FileSystemObject macht die Festplatte zu einem Objektmodell — Ordner und Dateien, die Sie mit For Each durchlaufen und aus denen Sie Eigenschaften lesen, statt Dirs einzelnem versteckten Cursor. Die eine Entscheidung, die Sie rettet, ist CreateObject(Scripting.FileSystemObject) gegenĂŒber Dim fso As New FileSystemObject, denn spĂ€te Bindung braucht keinen Verweis und lĂ€uft auf jedem Rechner, wĂ€hrend die frĂŒh gebundene Variante auf einem PC ohne angehaktes Microsoft Scripting Runtime nicht kompiliert. Lernen Sie, wann FSO Dir schlĂ€gt, wie Sie mit SubFolders in Unterordner absteigen, wie Sie Size und DateLastModified lesen und warum FSO Textdateien öffnet, aber niemals eine Excel-Arbeitsmappe.

Henry
VBA prĂŒfen, ob eine Datei existiert — Dir gegenĂŒber FileSystemObject.FileExists (und die Falle in einer Dir-Schleife)

VBA prĂŒfen, ob eine Datei existiert — Dir gegenĂŒber FileSystemObject.FileExists (und die Falle in einer Dir-Schleife)

Es gibt zwei richtige Wege, in VBA zu prĂŒfen, ob eine Datei existiert, und einen falschen Reflex. Der Reflex ist, sie einfach zu öffnen und den Fehler abzufangen, was langsam ist und echte FehlschlĂ€ge verbirgt. Die richtigen Antworten sind Dir(path) (eine eingebaute Zeile) und fso.FileExists(path) (zustandslos und klarer) — und die Regel, die Sie rettet, lautet, verwenden Sie die Dir-PrĂŒfung niemals in einer Dir-Schleife, denn Dir teilt sich einen versteckten Cursor, den der Existenztest still zurĂŒcksetzt. Lernen Sie, warum FileExists der sicherere Standard ist, wie Dir einen Ordnerpfad oder einen abschließenden Backslash falsch behandelt und warum PrĂŒfen und dann Öffnen dennoch eine Fehlerabsicherung braucht.

Henry
VBA Arbeitsmappe öffnen in Excel — Workbooks.Open, den RĂŒckgabewert abfangen und warum es nicht Workbook_Open ist

VBA Arbeitsmappe öffnen in Excel — Workbooks.Open, den RĂŒckgabewert abfangen und warum es nicht Workbook_Open ist

Workbooks.Open ist eine Funktion, die die gerade geöffnete Arbeitsmappe zurĂŒckgibt — die eine Regel, die Sie rettet, lautet Set wb = Workbooks.Open(path), fangen Sie diesen RĂŒckgabewert ab und arbeiten Sie ĂŒber wb, nie ĂŒber ActiveWorkbook, das sich in dem Moment Ă€ndert, in dem irgendetwas den Fokus stiehlt. Lernen Sie den Unterschied zwischen Workbooks.Open (eine Methode, die Sie aufrufen) und Workbook_Open (ein Ereignis, das automatisch lĂ€uft), wie Sie einen fehlenden Pfad absichern, sodass Sie eine Meldung statt Laufzeitfehler 1004 erhalten, wie Sie mit einer bereits geöffneten Datei umgehen und welche Parameter still einen Dialog aufwerfen und ein unbeaufsichtigtes Makro aufhĂ€ngen.

Henry
VBA Arbeitsmappe speichern in Excel — Save vs. SaveAs, die FileFormat-Falle und warum Ihre Makros verschwinden

VBA Arbeitsmappe speichern in Excel — Save vs. SaveAs, die FileFormat-Falle und warum Ihre Makros verschwinden

Save ĂŒberschreibt die Datei, die Sie bereits haben, an Ort und Stelle und ohne Dialog. SaveAs schreibt eine neue Datei oder einen neuen Typ, und die FileFormat-Nummer ist die Falle — speichern Sie eine Makro-Arbeitsmappe als xlOpenXMLWorkbook (51, das xlsx-Format), verwirft Excel still jede Zeile Ihres VBA; fĂŒr xlsm brauchen Sie xlOpenXMLWorkbookMacroEnabled (52). Lernen Sie, wann Sie Save, SaveAs und SaveCopyAs verwenden, warum Save auf einer brandneuen Arbeitsmappe das Dialogfeld Speichern unter aufwirft und ein unbeaufsichtigtes Makro aufhĂ€ngt, wie DisplayAlerts die Überschreib-Aufforderung in eine Vorabgenehmigung verwandelt und warum wb.Saved = True eine Mappe als sauber markiert, ohne irgendetwas zu schreiben.

Henry
VBA Arbeitsmappe schließen in Excel — SaveChanges, die Aufforderung, die Ihr Makro aufhĂ€ngt, und Schließen ohne Speichern

VBA Arbeitsmappe schließen in Excel — SaveChanges, die Aufforderung, die Ihr Makro aufhĂ€ngt, und Schließen ohne Speichern

wb.Close auf einer Arbeitsmappe mit ungespeicherten Änderungen wirft den modalen Dialog Möchten Sie die Änderungen speichern auf, und in einem unbeaufsichtigten Makro wartet dieser Dialog fĂŒr immer. Sie beantworten ihn im Code mit dem SaveChanges-Argument — wb.Close SaveChanges:=False verwirft, SaveChanges:=True speichert zuerst, und lassen Sie es weg, bekommen Sie die Aufforderung. Lernen Sie, warum Schließen ohne das Argument der hĂ€ufigste Grund ist, dass ein geplantes Makro nie fertig wird, warum die Objektvariable in dem Moment tot ist, in dem Sie schließen, wie sich Close von Application.Quit unterscheidet und warum das Schließen der letzten Arbeitsmappe ein unsichtbares EXCEL.EXE laufen lassen kann.

Henry
VBA Wait in Excel — Application.Wait, warum es Excel einfriert und wann Sie stattdessen Sleep nutzen

VBA Wait in Excel — Application.Wait, warum es Excel einfriert und wann Sie stattdessen Sleep nutzen

Application.Wait ist ein Wecker, keine Stoppuhr. Sie ĂŒbergeben ihm einen Uhrzeit-Moment zum Aufwachen, keine Anzahl Sekunden zum HerunterzĂ€hlen, weshalb Application.Wait 5 fast nichts tut und die korrekte Zeile Application.Wait Now + TimeValue("0:00:05") lautet. Es löst nur auf ganze Sekunden auf und friert Excel komplett ein, wĂ€hrend es wartet, sodass es den Bildschirm nicht neu zeichnen, keine Statusleiste aktualisieren und den Benutzer nicht abbrechen lassen kann. Lernen Sie das Wecker-Modell, das Absolutzeit-Argument, ĂŒber das jeder stolpert, warum Pausen unter einer Sekunde Sleep brauchen und warum eine Pause, bei der Excel am Leben bleiben muss, stattdessen eine DoEvents-Schleife ist.

Henry
VBA Sleep in Excel — der Windows-API-Aufruf, die 64-Bit-PtrSafe-Falle und Wait vs. Sleep

VBA Sleep in Excel — der Windows-API-Aufruf, die 64-Bit-PtrSafe-Falle und Wait vs. Sleep

Sleep ist kein VBA-SchlĂŒsselwort. Es ist eine Windows-kernel32-Funktion, die Sie sich per Declare-Anweisung ausleihen, um Ihr Makro eine Anzahl von Millisekunden zu pausieren, weshalb es Ihnen die Genauigkeit unter einer Sekunde gibt, die Application.Wait nicht kann. Der Haken ist die Deklaration selbst. Alte, kopierte Declare-Sub-Sleep-Zeilen werfen auf 64-Bit-Excel einen Kompilierfehler, bis Sie das PtrSafe-Attribut in einer VBA7-Bedingungskompilierung ergĂ€nzen. Lernen Sie das Modell der geliehenen API, den genauen 64-Bit-Fix, warum Millisekunden nicht prĂ€zise sind und warum Sleep Excel dennoch einfriert, sodass eine reaktionsfĂ€hige Pause stattdessen eine DoEvents-Schleife ist.

Henry
VBA Timer in Excel — Messen, wie lange Ihr Makro braucht (und warum es kein Scheduler ist)

VBA Timer in Excel — Messen, wie lange Ihr Makro braucht (und warum es kein Scheduler ist)

Die VBA-Timer-Funktion ist eine Stoppuhr, kein Countdown-Timer. Trotz des Namens lĂ€sst sie nie etwas nach N Sekunden geschehen und pausiert Ihren Code nie. Sie gibt schlicht die Anzahl der seit Mitternacht verstrichenen Sekunden zurĂŒck, und Sie lesen sie zweimal, um zu messen, wie lange ein Codeblock gedauert hat. Damit ist sie das Werkzeug, das beweist, dass ScreenUpdating = False Ihr Makro wirklich schneller gemacht hat, statt zu raten. Lernen Sie das Stoppuhr-Modell, warum die Suche nach einem Timer meist Application.OnTime meint, den Mitternachts-Überlauf-Bug, der negative Laufzeiten erzeugt, und die Auflösung von einer Hundertstelsekunde.

Henry
VBA DoEvents in Excel — Verhindern, dass Excel nicht mehr reagiert (und warum es Ihr Makro zweimal laufen lĂ€sst)

VBA DoEvents in Excel — Verhindern, dass Excel nicht mehr reagiert (und warum es Ihr Makro zweimal laufen lĂ€sst)

DoEvents pausiert Ihr Makro fĂŒr einen Augenblick und lĂ€sst Excel die Klicks, TastenanschlĂ€ge und Neuzeichnungen abarbeiten, die sich anstauten, wĂ€hrend Ihr Code lief, und genau das verhindert, dass das Fenster grau wird und in den Zustand Keine RĂŒckmeldung fĂ€llt, und macht eine funktionierende Abbrechen-SchaltflĂ€che möglich. Doch dieselbe Abgabe der Kontrolle, die Excel am Leben hĂ€lt, gibt sie mitten im Makro auch an den Benutzer zurĂŒck, sodass er dieselbe SchaltflĂ€che erneut anklicken und eine zweite Kopie Ihres Makros innerhalb der ersten starten kann. Diese Re-Entrancy, nicht die Geschwindigkeit, ist die eigentliche Gefahr. Lernen Sie, wo Sie DoEvents platzieren, wie Sie sich mit einem Lauf-Flag gegen Re-Entrancy absichern, warum Sie es drosseln mĂŒssen und warum es kein Multithreading ist.

Henry
VBA StatusBar in Excel — Makrofortschritt ohne UserForm anzeigen (und die Nachricht, die fĂŒr immer hĂ€ngen bleibt)

VBA StatusBar in Excel — Makrofortschritt ohne UserForm anzeigen (und die Nachricht, die fĂŒr immer hĂ€ngen bleibt)

Application.StatusBar lĂ€sst Sie Ihren eigenen Text in die Leiste am unteren Rand des Excel-Fensters schreiben, was der leichteste Weg ist, den Fortschritt eines laufenden Makros ohne UserForm und ohne Flackern anzuzeigen. Die eine Zeile, die jeder vergisst, ist das ZurĂŒcksetzen. Welchen Text Sie zuletzt geschrieben haben, bleibt dort nach dem Ende des Makros angeheftet, weil Excel die Leiste erst zurĂŒcknimmt, wenn Sie Application.StatusBar gleich False setzen. Und sie aktualisiert sich in einer engen Schleife nicht sichtbar, sofern Excel keinen Moment zum Neuzeichnen bekommt, und genau hier kommt DoEvents ins Spiel. Lernen Sie das Schreib-und-ZurĂŒcksetz-Muster, warum False besser ist als ein leerer String, die Fortschritts-Prozent-Redewendung und wann eine echte Fortschrittsleiste die zusĂ€tzliche Arbeit wert ist.

Henry
VBA DisplayAlerts in Excel — BestĂ€tigungsdialoge fĂŒr unbeaufsichtigte Makros unterdrĂŒcken (und warum es die gefĂ€hrlichen automatisch bestĂ€tigt)

VBA DisplayAlerts in Excel — BestĂ€tigungsdialoge fĂŒr unbeaufsichtigte Makros unterdrĂŒcken (und warum es die gefĂ€hrlichen automatisch bestĂ€tigt)

Application.DisplayAlerts gleich False weist Excel an, seine BestĂ€tigungs- und Warndialoge wĂ€hrend des Makrolaufs nicht mehr anzuzeigen, sodass ein unbeaufsichtigtes Makro nicht wartend hĂ€ngen bleibt, bis jemand auf OK klickt. Doch es bringt die Warnung nicht so sehr zum Schweigen, als dass es sie mit Excels Standardantwort fĂŒr Sie beantwortet, und bei Aufforderungen wie dieses Blatt löschen oder diese Datei ĂŒberschreiben lautet der Standard nur zu. Es setzt sich am Ende des Makros von selbst auf True zurĂŒck, weshalb die eigentliche Falle nicht ist, es fĂŒr immer abgeschaltet zu lassen, sondern eine Warnung zu unterdrĂŒcken, die Sie geschĂŒtzt hat. Lernen Sie, wo es hilft, die Regel des schmalen Fensters, warum es nicht dasselbe wie Fehlerbehandlung ist und wie es mit ScreenUpdating und Calculation zusammenspielt.

Henry
VBA ScreenUpdating in Excel — Flackern stoppen und Makros beschleunigen (und warum es ein langsames Makro nicht rettet)

VBA ScreenUpdating in Excel — Flackern stoppen und Makros beschleunigen (und warum es ein langsames Makro nicht rettet)

Application.ScreenUpdating gleich False weist Excel an, den Bildschirm wĂ€hrend des Makrolaufs nicht mehr neu zu zeichnen und ihn erst am Ende einmal neu aufzubauen, was das Flackern beseitigt und einen moderaten Geschwindigkeitsgewinn bringt. Doch es hilft nur, wenn Ihr Code schreibt, auswĂ€hlt oder scrollt — schrauben Sie es an ein rechenlastiges Makro, gewinnen Sie nichts. Die Regel, die Sie rettet, lautet, dass ein Absturz den Bildschirm eingefroren und grau zurĂŒcklassen kann, weshalb Sie ihn in einem Fehlerhandler wiederherstellen und sich nie darauf verlassen, dass er sich selbst zurĂŒcksetzt. Lernen Sie, wo es hilft, wo nicht, die Flacker-Falle der verschachtelten Wiederherstellung und das CleanExit-Muster, das es mit Calculation und EnableEvents kombiniert.

Henry
VBA Calculation in Excel — Calculation fĂŒr Geschwindigkeit auf Manual setzen (und die stille Falle, es dort zu lassen)

VBA Calculation in Excel — Calculation fĂŒr Geschwindigkeit auf Manual setzen (und die stille Falle, es dort zu lassen)

Application.Calculation gleich xlCalculationManual weist Excel an, nach jedem Schreibvorgang nicht mehr neu zu berechnen und die Neuberechnung auf einen Durchgang zu verschieben, was der eigentliche Geschwindigkeitsgewinn bei formellastigen Arbeitsmappen ist. Doch es ist der gefĂ€hrlichste Schalter in VBA, weil sein Versagen still ist — lassen Sie es auf Manual, hören Formeln ohne sichtbaren Hinweis auf zu aktualisieren, sodass Summen veralten und es niemand bemerkt. Die Regel, die Sie rettet, lautet, den Berechnungszustand zu sichern, mit Application.Calculate eine Neuberechnung zu erzwingen, wenn ein spĂ€terer Schritt ein Ergebnis braucht, und den gesicherten Zustand in einem Fehlerhandler wiederherzustellen, statt Automatic fest zu verdrahten. Lernen Sie die Fallstricke des manuellen Modus, den error 1004 bei keiner offenen Arbeitsmappe und das CleanExit-Muster.

Henry
VBA EnableEvents in Excel — Verhindern, dass Ihr Makro seine eigenen Ereignisse auslöst (und warum ein Absturz sie tot zurĂŒcklĂ€sst)

VBA EnableEvents in Excel — Verhindern, dass Ihr Makro seine eigenen Ereignisse auslöst (und warum ein Absturz sie tot zurĂŒcklĂ€sst)

Application.EnableEvents gleich False hindert die SchreibvorgĂ€nge Ihres Makros daran, Ereignishandler wie Worksheet_Change auszulösen, und genau das durchbricht die Endlosschleife, in der ein Handler eine Zelle bearbeitet und sich selbst erneut feuert. Es ist ein Schalter fĂŒr Korrektheit, kein Geschwindigkeitsschalter. Die Regel, die Sie rettet, lautet, dass EnableEvents eine anwendungsweite Eigenschaft ist, die sich nicht von selbst zurĂŒcksetzt, sodass ein Absturz mit False jedes Ereignis ĂŒber jede offene Arbeitsmappe hinweg tot zurĂŒcklĂ€sst, bis Excel neu startet — weshalb Benutzer berichten, dass ihre SchaltflĂ€chen aufgehört haben zu funktionieren. Lernen Sie die Lösung fĂŒr das rekursive Worksheet_Change, die CleanExit-Wiederherstellung und warum dieser Schalter noch mehr zĂ€hlt als die anderen.

Henry
VBA SpecialCells in Excel — Leere Zellen, sichtbare Zellen und Konstanten auswĂ€hlen (und warum es einen Fehler wirft, wenn es nichts findet)

VBA SpecialCells in Excel — Leere Zellen, sichtbare Zellen und Konstanten auswĂ€hlen (und warum es einen Fehler wirft, wenn es nichts findet)

SpecialCells lĂ€sst Excel die Zellen nach Typ auswĂ€hlen statt nach Adresse — alle leeren Zellen, alle sichtbaren Zeilen, alle Formeln, alle Konstanten. Es ist der Code-Zwilling der Funktion Inhalte auswĂ€hlen. Die eine Regel, die Sie rettet, lautet, dass SpecialCells den error 1004 wirft, wenn es gar nichts findet, sodass ein ungeschĂŒtzter Aufruf eine Zeitbombe ist; die reife Form ist immer On Error Resume Next plus If Not result Is Nothing. Lernen Sie die wichtigen Zelltypen, die Muster zum LeerfĂŒllen und zum Kopieren sichtbarer Zeilen und warum das Ergebnis ein Bezug aus mehreren Bereichen ist.

Henry
VBA Union in Excel — Nicht benachbarte Bereiche zu einem Bezug verbinden (und warum es keine Duplikate entfernt)

VBA Union in Excel — Nicht benachbarte Bereiche zu einem Bezug verbinden (und warum es keine Duplikate entfernt)

Union verbindet verstreute Rechtecke zu einem einzigen Bezug, sodass Sie mehrere nicht benachbarte Blöcke in einer Operation einfĂ€rben, leeren oder kopieren können — die Code-Fassung davon, mehrere Bereiche mit gedrĂŒckter Strg-Taste anzuklicken. Die Regel, ĂŒber die jeder stolpert, lautet, dass Union aneinanderfĂŒgt und keine Duplikate entfernt; ĂŒberlappende Zellen werden doppelt gezĂ€hlt, also lĂŒgt .Count und Union ist eine Stapelliste, keine mathematische Vereinigung. Lernen Sie das Sammelmuster, das den Union-of-Nothing-Fehler vermeidet, warum es eine Operation pro Bezug statt einer Schleife pro Zelle ist und wie sich Union von Intersect unterscheidet.

Henry
VBA Intersect in Excel — Finden, wo sich zwei Bereiche ĂŒberschneiden (und der Worksheet_Change-Schutz, den jeder nutzt)

VBA Intersect in Excel — Finden, wo sich zwei Bereiche ĂŒberschneiden (und der Worksheet_Change-Schutz, den jeder nutzt)

Intersect gibt nur die Zellen zurĂŒck, die sich zwei Bereiche teilen, und gibt Nothing zurĂŒck, wenn sie sich nicht berĂŒhren — und dieses Nothing ist der ganze Sinn. Sein wichtigster Einsatz ist der Worksheet_Change-Schutz, If Not Intersect(Target, Range) Is Nothing, der verhindert, dass ein Ereignis bei jeder Bearbeitung auf dem Blatt feuert. Die Regel, die Sie rettet, lautet, dass keine Überschneidung Nothing zurĂŒckgibt, sodass jeder Zugriff auf eine Eigenschaft ohne Is-Nothing-PrĂŒfung mit error 91 abstĂŒrzt. Lernen Sie den vollstĂ€ndigen Ereignisschutz mit EnableEvents, wie Sie ein Makro auf einen Zielbereich beschrĂ€nken und wie sich Intersect von Union unterscheidet.

Henry
VBA Cells gegen Range in Excel — Zellen per Zahl ansprechen (und warum Cells(1, 2) B1 ist, nicht A2)

VBA Cells gegen Range in Excel — Zellen per Zahl ansprechen (und warum Cells(1, 2) B1 ist, nicht A2)

Cells ist Range per Zahl adressiert. Range(A1) zeigt auf eine Zelle mit einem String in der Lesereihenfolge, erst Spaltenbuchstabe dann Zeile; Cells(Zeile, Spalte) zeigt mit zwei Ganzzahlen in Excels Speicherreihenfolge, erst Zeile nach unten dann Spalte quer. Darum ist Cells(1, 2) gleich B1, nicht A2 — und darum ist Cells, dessen Koordinaten Sie berechnen können, der Bezug fĂŒr Schleifen. Lernen Sie, wann Sie Cells statt Range nehmen, wie Sie mit Range(Cells, Cells) einen Block aus berechneten Ecken bauen, warum ein blankes Cells das ganze Blatt meint und warum Sie Cells mit einem Arbeitsblatt qualifizieren sollten.

Henry
VBA Resize in Excel — Einen Bereich vom Anker aus umformen (und warum es eine Anzahl ist, kein Delta)

VBA Resize in Excel — Einen Bereich vom Anker aus umformen (und warum es eine Anzahl ist, kein Delta)

Resize hĂ€lt den oberen linken Anker eines Bereichs fest und zeichnet das Rechteck auf eine neue GrĂ¶ĂŸe neu. Es bewegt den Bezug nicht so wie Offset, und es wĂ€hlt nichts aus — es gibt einen neuen Bereich zurĂŒck, der an derselben Ecke beginnt. Die Regel, ĂŒber die alle stolpern, ist, dass Resize(rows, columns) eine absolute, 1-basierte Anzahl der EndgrĂ¶ĂŸe ist, kein hinzuzufĂŒgendes Delta, sodass Range(A1).Resize(5, 3) gleich A1:C5 ist und Resize(0) den Fehler 1004 auslöst. Lernen Sie, wie Sie ein Argument weglassen, um eine Dimension unverĂ€ndert zu lassen, warum der Anker immer oben links ist und die beiden Muster, die sich lohnen — eine Kopfzeile mit Offset plus Resize entfernen und ein Array in einen passenden Block schreiben.

Henry
VBA CurrentRegion in Excel — Den ganzen Datenblock in einer Zeile greifen (und was eine leere Zeile damit macht)

VBA CurrentRegion in Excel — Den ganzen Datenblock in einer Zeile greifen (und was eine leere Zeile damit macht)

CurrentRegion ist der zusammenhĂ€ngende Zellblock um eine Zelle. Excel beginnt bei Ihrer Zelle und dehnt sich nach außen aus, bis es auf eine ganz leere Zeile und eine ganz leere Spalte trifft, und gibt das kleinste Rechteck zurĂŒck, das diese ununterbrochene Insel umschließt — genau das, was Strg+Umschalt+Stern auswĂ€hlt. Sie berechnen die RĂ€nder nicht; Excel findet sie. Die Falle ist, dass eine einzelne ganz leere Zeile oder Spalte eine Wand ist, die den Block stillschweigend teilt, sodass Sie ohne Fehler die HĂ€lfte Ihrer Daten bekommen. Lernen Sie, warum CurrentRegion die Kopfzeile einschließt und wie Sie sie mit Offset und Resize entfernen, wie es sich von UsedRange und von End(xlUp) unterscheidet und wann Sie stattdessen eine echte Tabelle nehmen.

Henry
VBA Borders in Excel — Zellrahmen im Code zeichnen (und warum der ganze Block eingerahmt wurde)

VBA Borders in Excel — Zellrahmen im Code zeichnen (und warum der ganze Block eingerahmt wurde)

Ein Rahmen ist in Excel VBA eine Eigenschaft einer Kante, kein Schalter an der Zelle. Ein Bereich hat acht adressierbare Rahmen — vier Außenkanten, zwei SĂ€tze innerer Gitternetzlinien und zwei Diagonalen —, und die bloße Range.Borders-Auflistung meint alle auf einmal. Darum rahmt Range.Borders.LineStyle = xlContinuous jede einzelne Zelle ein, statt eine Kontur zu zeichnen. Lernen Sie, wann Sie BorderAround nur fĂŒr den Rahmen nehmen, wie LineStyle, Weight und Color zusammenspielen, wie Sie eine Kante mit xlEdgeBottom setzen und wie Sie Rahmen mit xlLineStyleNone entfernen.

Henry
VBA Merge Cells in Excel — Zellen im Code verbinden und trennen (und warum Sie es meist lassen sollten)

VBA Merge Cells in Excel — Zellen im Code verbinden und trennen (und warum Sie es meist lassen sollten)

Zellen in Excel VBA zu verbinden ist keine Formatierung — es ist eine strukturelle Änderung am Raster. Range(A1:C1).Merge verschmilzt drei Zellen zu einer, die drei Spalten ĂŒberspannt, und nur der Wert oben links ĂŒberlebt, wĂ€hrend die anderen gelöscht werden. Darum brechen verbundene Zellen still das Sortieren, Range-Rechnungen, SpalteneinfĂŒgungen und Schleifen. Lernen Sie Merge, UnMerge, MergeCells und MergeArea, warum Profis stattdessen zu Center Across Selection greifen und wie Sie verbundene Zellen im Code sicher finden und aufrĂ€umen.

Henry
VBA Column Width & Row Height in Excel — GrĂ¶ĂŸe Ă€ndern und AutoFit im Code (und die Einheiten, die Sie stolpern lassen)

VBA Column Width & Row Height in Excel — GrĂ¶ĂŸe Ă€ndern und AutoFit im Code (und die Einheiten, die Sie stolpern lassen)

Zellen in Excel VBA zu dimensionieren wirkt auf die ganze Spalte oder Zeile, und die zwei Dimensionen nutzen unterschiedliche Einheiten — ColumnWidth wird in Zeichen der Normal-Schrift gemessen, RowHeight in Punkt. Diese Diskrepanz ist der Grund, warum eine Breite von 10 und eine Höhe von 10 nichts miteinander gemein haben. AutoFit ist die andere Falle. Es lĂ€uft nur auf einer ganzen Spalte oder Zeile und misst den angezeigten Text, also ĂŒbergeht es verbundene Zellen still. Lernen Sie ColumnWidth gegenĂŒber dem schreibgeschĂŒtzten Width, RowHeight und Textumbruch, EntireColumn.AutoFit und warum die Breite auf null zu setzen der falsche Weg ist, eine Spalte auszublenden.

Henry
VBA Font in Excel — Farbe, Fett und GrĂ¶ĂŸe im Code setzen (und die ColorIndex-Falle)

VBA Font in Excel — Farbe, Fett und GrĂ¶ĂŸe im Code setzen (und die ColorIndex-Falle)

Das Font-Objekt ist die Textebene einer Zelle in Excel VBA — Farbe, Fett, Kursiv, GrĂ¶ĂŸe und Name, und nichts davon berĂŒhrt den Wert darunter. Der Haken ist die Farbe. Es gibt drei Wege, sie zu setzen, und sie nutzen unterschiedliche ZahlenrĂ€ume. Range.Font.Color nimmt eine 24-Bit-RGB-Zahl, Range.Font.ColorIndex nimmt einen Paletten-Index von 1 bis 56, und die beiden sind nicht austauschbar. Lernen Sie, welchen Sie nehmen, wie Sie mit Characters einen Teil einer Zelle fetten oder umdimensionieren, warum wertbasiertes FĂ€rben zur bedingten Formatierung gehört und wie Sie eine Schriftfarbe zurĂŒcklesen, ohne die falsche Zahl zu bekommen.

Henry
VBA Zellfarbe in Excel — die HintergrundfĂŒllung im Code setzen (und warum Farbe keine Daten ist)

VBA Zellfarbe in Excel — die HintergrundfĂŒllung im Code setzen (und warum Farbe keine Daten ist)

Range.Interior ist die FĂŒllebene einer Zelle in Excel VBA — die Farbe hinter dem Text. Setzen Sie sie mit Interior.Color und RGB, löschen Sie sie mit Interior.ColorIndex gleich xlNone, und wissen Sie, dass eine weiße FĂŒllung nicht dasselbe ist wie keine FĂŒllung. Der tiefere Punkt ist, dass eine gefĂ€rbte Zelle keine Daten trĂ€gt. SUM und SUMIF ignorieren sie, wenn Sie also Farbe zum Kategorisieren nutzen, verstecken Sie Informationen dort, wo Formeln sie nicht lesen können. Lernen Sie die Farb-Eigenschaften, wie Sie nach Bedingung hervorheben ohne eine Schleife, die veraltet, und wie Sie viele Bereiche schnell fĂŒllen.

Henry
VBA NumberFormat in Excel — die Anzeige einer Zahl Ă€ndern, ohne ihren Wert zu Ă€ndern

VBA NumberFormat in Excel — die Anzeige einer Zahl Ă€ndern, ohne ihren Wert zu Ă€ndern

Range.NumberFormat ist die Anzeigeebene einer Zelle in Excel VBA. Es Ă€ndert, wie eine gespeicherte Zahl auf dem Bildschirm gelesen wird, und Ă€ndert nie die Zahl selbst, eine Zelle so zu formatieren, dass sie 5 zeigt, wĂ€hrend sie 5.4999 hĂ€lt, ist also kein Runden, und die Summe nutzt weiterhin 5.4999. Hier beißt Aussehen gegenĂŒber Wert wirklich, denn ein Datum ist in Wahrheit eine Seriennummer im KostĂŒm. Lernen Sie die Sprache der Formatcodes, wie sich NumberFormat von der Format-Funktion unterscheidet, die Gebietsschema-Falle mit NumberFormatLocal, und wann Sie stattdessen Round brauchen.

Henry
VBA WorksheetFunction in Excel — Excels eigene Funktionen aus Code aufrufen (und die zwei Arten, wie sie fehlschlagen)

VBA WorksheetFunction in Excel — Excels eigene Funktionen aus Code aufrufen (und die zwei Arten, wie sie fehlschlagen)

Mit Application.WorksheetFunction leiht sich VBA Excels ĂŒber 450 eingebaute Funktionen, statt SUM, VLOOKUP oder COUNTIF als Schleife nachzubauen. Der Haken ist, dass es zwei Arten gibt, sie aufzurufen, und beide unterschiedlich fehlschlagen. WorksheetFunction.X löst einen Laufzeitfehler aus, wenn es keinen Treffer gibt, wĂ€hrend Application.X einen Fehlerwert zurĂŒckgibt, den Sie mit IsError prĂŒfen. Lernen Sie, welchen Aufrufstil Sie nehmen, warum das Ergebnis ein Variant sein muss, welche Funktionen Sie so nicht aufrufen sollten und wann Sie einen ganzen Bereich ĂŒbergeben, statt Zelle fĂŒr Zelle zu schleifen.

Henry
VBA Remove Duplicates in Excel — Duplikate in einer Zeile entfernen (und warum es ohne RĂŒckgĂ€ngig löscht)

VBA Remove Duplicates in Excel — Duplikate in einer Zeile entfernen (und warum es ohne RĂŒckgĂ€ngig löscht)

Range.RemoveDuplicates ist Excels SchaltflĂ€che Duplikate entfernen in einer einzigen Codezeile, doch es ist zerstörerisch auf eine Art, wie es eine Schleife nicht ist. Es löscht Zeilen an Ort und Stelle, behĂ€lt das erste Vorkommen und lĂ€sst sich nach einem Makrolauf nicht rĂŒckgĂ€ngig machen. Das Argument, ĂŒber das jeder stolpert, ist Columns, dessen Zahlen VersĂ€tze innerhalb des Bereichs sind, nicht Spaltenbuchstaben des Blatts. Lernen Sie die Falle der BereichsversĂ€tze, warum Header xlYes wichtig ist, wie Sie die letzte statt der ersten Zeile behalten und wann Sie stattdessen zu Advanced Filter oder einem Dictionary greifen.

Henry
VBA Advanced Filter in Excel — Eindeutige Werte extrahieren und in einen neuen Bereich filtern (ohne Schleife)

VBA Advanced Filter in Excel — Eindeutige Werte extrahieren und in einen neuen Bereich filtern (ohne Schleife)

Range.AdvancedFilter ist der einzige Filter, der Daten ausgibt statt einer Ansicht. Er kann eine eindeutige Liste oder eine per Kriterien gefilterte Zeilenmenge in einem einzigen Aufruf an einen anderen Ort holen, ohne Schleife und ohne etwas zu löschen. Der Teil, der fremd wirkt, ist, dass seine WHERE-Klausel in Zellen lebt, ein Kriterienbereich, dessen Kopfzeile exakt zu den Daten passen muss. Lernen Sie xlFilterInPlace gegenĂŒber xlFilterCopy, wie der Kriterienbereich funktioniert, wie Unique True zerstörungsfrei dedupliziert, die Kopfzeilen-Falle, die leere Ausgabe liefert, und wie es sich von AutoFilter und Remove Duplicates unterscheidet.

Henry
VBA Find in Excel — Zellen richtig durchsuchen (es liefert einen Range zurĂŒck, keine Position)

VBA Find in Excel — Zellen richtig durchsuchen (es liefert einen Range zurĂŒck, keine Position)

Die VBA-Methode Range.Find ist das Ctrl+F von Excel fĂŒr Code, und sie bringt Menschen aus dem Tritt, weil sie ein Range-Objekt zurĂŒckgibt (oder Nothing, wenn es keinen Treffer gibt) statt einer Zahl. Lernen Sie die eine PrĂŒfung, die den Absturz mit Fehler 91 verhindert, die Falle der klebrigen Argumente, die Find bei jedem Lauf anders reagieren lĂ€sst, wie LookAt xlWhole gegenĂŒber xlPart ĂŒber ganze Zelle gegenĂŒber enthĂ€lt entscheidet, und wie Sie mit FindNext schleifen, um jeden Treffer ohne Endlosschleife zu erreichen.

Henry
VBA AutoFilter in Excel — Zeilen im Code filtern (und warum ausgeblendet nicht gelöscht ist)

VBA AutoFilter in Excel — Zeilen im Code filtern (und warum ausgeblendet nicht gelöscht ist)

Die VBA-Methode AutoFilter filtert eine Tabelle im Code, doch die Zeilen, die sie ausblendet, sind weiterhin da — sie zĂ€hlen weiterhin in SUM, werden weiterhin kopiert und sitzen weiterhin in Ihrem Bereich. Lernen Sie das mentale Modell, das die klassischen Bugs verhindert, warum Sie ĂŒber SpecialCells xlCellTypeVisible gehen mĂŒssen, um nur sichtbare Zeilen anzufassen, wie Kriterien und Operatoren funktionieren, die Umschaltfalle, die Ihren Filter beim zweiten Lauf abschaltet, und das schnelle Muster aus Filtern-dann-Löschen fĂŒr das Entfernen vieler Zeilen.

Henry
VBA Sort in Excel — Range.Sort gegenĂŒber dem Sort-Objekt (und wie Sie die ursprĂŒngliche Reihenfolge zurĂŒckbekommen)

VBA Sort in Excel — Range.Sort gegenĂŒber dem Sort-Objekt (und wie Sie die ursprĂŒngliche Reihenfolge zurĂŒckbekommen)

Sortieren in VBA ist ein dauerhaftes Umordnen ohne Ctrl+Z, daher lautet die erste Regel, die ursprĂŒngliche Reihenfolge zu schĂŒtzen, bevor Sie sie anfassen. Lernen Sie das mentale Modell, das eine Ansicht von einer VerĂ€nderung trennt, warum Header xlYes wichtig ist oder Ihre Titel in den Daten landen, den Unterschied zwischen dem schnellen Range.Sort und dem unbegrenzten Sort-Objekt, die SortFields.Clear-Falle, die alte SortierschlĂŒssel erbt, und warum als Text gespeicherte Zahlen in falscher Reihenfolge sortieren.

Henry
VBA Zeilen löschen in Excel — Zeilen, Leerzeilen und Zeilen nach Bedingung löschen (rĂŒckwĂ€rts schleifen!)

VBA Zeilen löschen in Excel — Zeilen, Leerzeilen und Zeilen nach Bedingung löschen (rĂŒckwĂ€rts schleifen!)

Eine Zeile in VBA zu löschen ist eine strukturelle Bearbeitung und kein Leeren — jede Zeile darunter rutscht nach oben und fĂŒllt die LĂŒcke, weshalb eine vorwĂ€rts laufende Schleife Zeilen ĂŒberspringt. Lernen Sie die eine Regel, die das behebt (von unten nach oben schleifen oder in einem einzigen Union löschen), wie sich EntireRow.Delete vom Leeren einer Zelle unterscheidet, den schnellen Weg zum Entfernen von Leerzeilen und wie Sie Zeilen nach Bedingung löschen, ohne Ihre Daten oder Verweisformeln zu beschĂ€digen.

Henry
VBA Zeilen und Spalten einfĂŒgen in Excel — das Raster richtig verschieben (und in einer Schleife einfĂŒgen ohne Chaos)

VBA Zeilen und Spalten einfĂŒgen in Excel — das Raster richtig verschieben (und in einer Schleife einfĂŒgen ohne Chaos)

EinfĂŒgen ist der Spiegel des Löschens — es schiebt bestehende Zeilen nach unten (oder Spalten nach rechts), um Platz zu schaffen, weshalb dieselbe Verschiebung, die eine Löschschleife bricht, auch eine EinfĂŒgeschleife bricht. Lernen Sie EntireRow.Insert gegenĂŒber einem Teilbereich mit dem Shift-Argument, warum CopyOrigin entscheidet, wessen Nachbarformatierung die neue Zeile erbt, die sichere Richtung zum EinfĂŒgen in einer Schleife und den Ein-Aufruf-Weg, viele Zeilen auf einmal hinzuzufĂŒgen.

Henry
VBA Spalten und Zeilen ausblenden in Excel — ausgeblendet ist nicht gelöscht (und warum Ihre Summen sich nicht Ă€ndern)

VBA Spalten und Zeilen ausblenden in Excel — ausgeblendet ist nicht gelöscht (und warum Ihre Summen sich nicht Ă€ndern)

Eine Spalte in VBA auszublenden ist kein Löschen und kein Filtern — die Daten sind weiterhin da, weiterhin in jeder SUM, werden beim Bereichskopieren weiterhin mitkopiert, nur mit null Anzeigebreite. Lernen Sie, warum .Hidden zu EntireColumn und EntireRow gehört, warum ausgeblendete Zellen weiterhin in Formeln zĂ€hlen, die Alles-einblenden-Zeile, die ein festgefahrenes Blatt rettet, und wie sich manuell ausgeblendete Zeilen von per AutoFilter ausgeblendeten Zeilen unterscheiden, wenn Sie schleifen.

Henry
VBA Worksheet_BeforeDoubleClick in Excel — einen Doppelklick in eine Aktion verwandeln (und den Bearbeitungsmodus unterdrĂŒcken)

VBA Worksheet_BeforeDoubleClick in Excel — einen Doppelklick in eine Aktion verwandeln (und den Bearbeitungsmodus unterdrĂŒcken)

Worksheet_BeforeDoubleClick ist das Ereignis, das Excel in dem Augenblick auslöst, in dem Sie eine Zelle doppelklicken — bevor sie in den Bearbeitungsmodus wechselt — und reicht Ihnen die Zelle als Target plus ein Cancel-Flag. Setzen Sie Cancel auf True, um den Bearbeitungsmodus zu unterdrĂŒcken und stattdessen Ihre eigene Aktion auszufĂŒhren — ein HĂ€kchen umschalten, eine Zeile als erledigt markieren oder zum Detail springen. Lernen Sie, wie Sie es mit Intersect auf eine einzige Spalte eingrenzen, warum ein vergessenes Cancel die Zelle in den Bearbeitungsmodus fallen lĂ€sst und wo der Code liegen muss.

Henry
VBA Worksheet_BeforeRightClick in Excel — das Rechtsklick-MenĂŒ ersetzen (und warum es zu deaktivieren keine Sicherheit ist)

VBA Worksheet_BeforeRightClick in Excel — das Rechtsklick-MenĂŒ ersetzen (und warum es zu deaktivieren keine Sicherheit ist)

Worksheet_BeforeRightClick ist das Ereignis, das Excel in dem Augenblick auslöst, in dem Sie eine Zelle mit der rechten Maustaste anklicken, bevor das KontextmenĂŒ erscheint, und reicht Ihnen die Zelle als Target plus ein Cancel-Flag. Setzen Sie Cancel auf True, um das eingebaute MenĂŒ zu unterdrĂŒcken und stattdessen Ihre eigene Aktion auszufĂŒhren oder ein eigenes MenĂŒ zu zeigen. Lernen Sie, wie Sie es mit Intersect eingrenzen, damit Sie Kopieren und EinfĂŒgen nicht lahmlegen, warum das Deaktivieren des Rechtsklicks eher UX als Schutz ist und wo der Code liegen muss.

Henry
VBA Workbook_BeforePrint in Excel — einen Druck blockieren, eine Kopfzeile stempeln und die Druckvorschau-Falle

VBA Workbook_BeforePrint in Excel — einen Druck blockieren, eine Kopfzeile stempeln und die Druckvorschau-Falle

Workbook_BeforePrint ist das Ereignis, das Excel auslöst, bevor irgendetwas in der Arbeitsmappe gedruckt wird, und reicht Ihnen ein Cancel-Flag. Setzen Sie Cancel auf True, und der Druck wird blockiert — prĂŒfen Sie vor dem Drucken oder halten Sie einen Entwurf zurĂŒck. Lernen Sie, warum das Ereignis auch bei der Druckvorschau feuert, sodass aufwendige Arbeit die Vorschau ausbremst, warum es einmal fĂŒr die gesamte Arbeitsmappe statt je Blatt lĂ€uft, warum ein stiller Cancel ein Bug ist und wo der Code liegen muss.

Henry
VBA Workbook_BeforeClose in Excel — das Schließen abbrechen, zum Speichern auffordern und wo der Code liegen muss

VBA Workbook_BeforeClose in Excel — das Schließen abbrechen, zum Speichern auffordern und wo der Code liegen muss

Workbook_BeforeClose ist das Ereignis, das Excel in dem Moment auslöst, in dem jemand die Datei zu schließen versucht — bevor irgendetwas abgebaut wird — und reicht Ihnen ein Cancel-Flag. Setzen Sie Cancel auf True, und das Schließen wird abgeblasen. Lernen Sie, wie Sie beim Schließen aufrĂ€umen, wie Sie Excel mit der Saved-Eigenschaft davon abhalten, zweimal nach dem Speichern zu fragen, warum es bei einem Absturz nie feuert und wo der Code liegen muss.

Henry
VBA Workbook_BeforeSave in Excel — ein Speichern prĂŒfen oder blockieren, und was SaveAsUI Ihnen wirklich verrĂ€t

VBA Workbook_BeforeSave in Excel — ein Speichern prĂŒfen oder blockieren, und was SaveAsUI Ihnen wirklich verrĂ€t

Workbook_BeforeSave ist das Ereignis, das Excel in dem Moment auslöst, in dem ein Speichern angefordert wird — bevor irgendetwas auf die Festplatte geschrieben wird — und reicht Ihnen zwei Flags, SaveAsUI und Cancel. Lernen Sie, wie Sie ein Speichern blockieren, wenn eine Pflichtzelle leer ist, wie Sie automatisch stempeln, wer wann gespeichert hat, warum ein Save-Aufruf im Handler endlos schleift und wie SaveAsUI Sie einen Dateinamen erzwingen lĂ€sst.

Henry
VBA Worksheet_Activate und Deactivate in Excel — Code ausfĂŒhren, wenn Sie das Blatt wechseln (und warum Sie ein Verlassen nicht abbrechen können)

VBA Worksheet_Activate und Deactivate in Excel — Code ausfĂŒhren, wenn Sie das Blatt wechseln (und warum Sie ein Verlassen nicht abbrechen können)

Worksheet_Activate feuert, wenn ein Blatt zum aktiven wird, und Worksheet_Deactivate feuert genau dann, wenn Sie es verlassen — die Ankunfts- und Abgangsereignisse eines Blatts. Der Haken, der sie prĂ€gt — anders als BeforeClose und BeforeSave gibt Ihnen keines ein Cancel, also können Sie einen Blattwechsel beobachten, aber nicht blockieren. Lernen Sie das Aktualisieren-beim-Ansehen-Muster, den ZurĂŒckschnellen-Umweg und Handler auf Blattebene gegenĂŒber Arbeitsmappenebene.

Henry
VBA Class Module in Excel — ein eigenes Objekt bauen (Bauplan vs. Instanz und die As-New-Falle)

VBA Class Module in Excel — ein eigenes Objekt bauen (Bauplan vs. Instanz und die As-New-Falle)

Ein VBA Class module lĂ€sst Sie einen eigenen Objekttyp definieren — einen Bauplan, der Daten und Verhalten bĂŒndelt — und dann mit New unabhĂ€ngige Instanzen ausstanzen. Der Haken, ĂŒber den jeder stolpert, ist dass Objekte Referenztypen sind, sodass Set b = a beide Namen auf dieselbe Instanz zeigen lĂ€sst, und Dim x As New eine Falle der verzögerten Instanziierung verbirgt. Erfahren Sie, wie der Modulname zum Typnamen wird, wann eine Klasse einen Type schlĂ€gt und wie Sie die klassischen New-Fallstricke vermeiden.

Henry
VBA Type in Excel — verwandte Felder in einer Variablen bĂŒndeln (benutzerdefinierte Typen vs. Class module)

VBA Type in Excel — verwandte Felder in einer Variablen bĂŒndeln (benutzerdefinierte Typen vs. Class module)

Ein VBA Type — ein benutzerdefinierter Typ, deklariert mit Type ... End Type — bĂŒndelt mehrere zusammengehörige Felder in einer einzigen Variablen, sodass Name, Age und Salary zusammen reisen statt als drei parallele Arrays. Ein Type ist ein Werttyp, das heißt die Zuweisung einer Type-Variablen an eine andere kopiert jedes Feld, anders als bei Objekten, die sich teilen. Erfahren Sie, wo die Deklaration stehen muss, warum Kopieren-statt-Teilen zĂ€hlt und ab welchem Punkt Sie zu einem Class module greifen sollten.

Henry
VBA Property in Excel — Get, Let und Set (kontrollierter Zugriff auf die Felder einer Klasse)

VBA Property in Excel — Get, Let und Set (kontrollierter Zugriff auf die Felder einer Klasse)

Property Get, Let und Set verwandeln ein Klassenfeld in ein Tor — eine kleine Prozedur, die Ihren Code ausfĂŒhrt, sobald von außen gelesen oder geschrieben wird, sodass Sie Eingaben prĂŒfen, Werte im Flug berechnen oder ein Feld schreibgeschĂŒtzt machen können. Die Unterscheidung, ĂŒber die jeder stolpert, ist Let gegen Set — Let weist einen Wert zu, Set weist ein Objekt zu — und das falsche zu nehmen ist ein Compiler- oder Laufzeitfehler. Lernen Sie das Muster mit dem hinterlegten Feld, wann eine einfache Public-Variable die ehrliche Wahl ist und wie Sie eine schreibgeschĂŒtzte Property bauen.

Henry
VBA ActiveCell in Excel — die eine Zelle mit dem Cursor (ActiveCell gegen Selection, und wann es schiefgeht)

VBA ActiveCell in Excel — die eine Zelle mit dem Cursor (ActiveCell gegen Selection, und wann es schiefgeht)

ActiveCell ist ein Live-Zeiger auf die eine Zelle, die gerade den Cursor hat — immer genau eine Zelle, auf dem aktiven Blatt, innerhalb der aktuellen Selection. Erfahren Sie, wie sie sich von Selection unterscheidet, wie Sie sie mit .Value und .Offset lesen und schreiben, und den Hauptgrund, warum sie bricht — sie folgt dem Blatt und dem Cursor, die der Benutzer hinterlassen hat, und ist damit das falsche Werkzeug fĂŒr Code, der nicht davon handelt, wo der Benutzer gerade ist.

Henry
VBA Selection in Excel — mit dem arbeiten, was markiert ist (und warum es nicht immer ein Range ist)

VBA Selection in Excel — mit dem arbeiten, was markiert ist (und warum es nicht immer ein Range ist)

Selection ist ein Live-Zeiger auf das, was gerade markiert ist — meist ein Zellbereich, aber es kann auch ein Diagramm, eine Form oder gar nichts sein. Deshalb stĂŒrzt Code, der annimmt, Selection sei ein Bereich, in dem Moment ab, in dem ein Diagramm ausgewĂ€hlt wird. Erfahren Sie, wie Sie die ausgewĂ€hlten Zellen durchlaufen, Mehrbereichsauswahlen mit .Areas behandeln, mit TypeName absichern und wann Sie Selection ganz ĂŒberspringen und Ihren Bereich benennen.

Henry
VBA Select gegen Activate in Excel — brechen Sie die .Select-Gewohnheit des Makrorekorders

VBA Select gegen Activate in Excel — brechen Sie die .Select-Gewohnheit des Makrorekorders

Der Makrorekorder schreibt, was Ihre Maus tut — ein Blatt auswĂ€hlen, eine Zelle auswĂ€hlen, auf der Selection wirken — weil ein Mensch so arbeitet, nicht wie Code es sollte. Erfahren Sie den echten Unterschied zwischen Select, das eine oder viele Zellen markiert, und Activate, das die eine aktive Zelle setzt, warum fast jedes .Select ein langsamer, fragiler Umweg ist, den Sie löschen können, die seltenen FĂ€lle, in denen Sie wirklich auswĂ€hlen mĂŒssen, und wie Sie Rekorder-Code so umbauen, dass er direkt auf qualifizierten Bereichsreferenzen wirkt.

Henry
VBA Workbook_Open in Excel — ein Makro automatisch beim Öffnen der Datei ausfĂŒhren (und wo der Code liegen muss)

VBA Workbook_Open in Excel — ein Makro automatisch beim Öffnen der Datei ausfĂŒhren (und wo der Code liegen muss)

Workbook_Open ist das Ereignis, das Excel in dem Moment auslöst, in dem Ihre Datei fertig geöffnet ist — Code, der sich von selbst ausfĂŒhrt, ganz ohne SchaltflĂ€che. Doch es feuert nur, wenn es im ThisWorkbook-Objekt liegt (nicht in einem gewöhnlichen Module) und der Benutzer Makros aktiviert hat. Erfahren Sie, wo der Code liegen muss, warum er stillschweigend nie lĂ€uft, Workbook_Open gegenĂŒber Auto_Open und wie Sie ihn schnell und absturzsicher halten.

Henry
VBA Worksheet_Change in Excel — Code ausfĂŒhren, wenn eine Zelle bearbeitet wird (und die Endlosschleife, die Sie vermeiden mĂŒssen)

VBA Worksheet_Change in Excel — Code ausfĂŒhren, wenn eine Zelle bearbeitet wird (und die Endlosschleife, die Sie vermeiden mĂŒssen)

Worksheet_Change ist das Ereignis, das Excel jedes Mal auslöst, wenn ein Benutzer eine Zelle auf dem Blatt bearbeitet, und reicht Ihnen die geĂ€nderte Zelle als Target. Die Falle, in die jeder tappt — Ihr Handler schreibt in eine Zelle, dieses Schreiben löst das Ereignis erneut aus, und Excel dreht sich endlos. Lernen Sie die Application.EnableEvents-Lösung, wie Sie es mit Intersect eingrenzen, warum es Formel-Neuberechnungen ignoriert und wo der Code liegen muss.

Henry
VBA Worksheet_SelectionChange in Excel — Code ausfĂŒhren, wenn sich der Cursor bewegt (die aktive Zeile ohne Ruckeln hervorheben)

VBA Worksheet_SelectionChange in Excel — Code ausfĂŒhren, wenn sich der Cursor bewegt (die aktive Zeile ohne Ruckeln hervorheben)

Worksheet_SelectionChange ist das Ereignis, das Excel jedes Mal auslöst, wenn sich der Cursor bewegt — ein Klick, eine Pfeiltaste, ein Enter. Es reicht Ihnen die neue Auswahl als Target, was dem Cursor folgende Kniffe wie das Hervorheben der aktiven Zeile möglich macht. Doch es feuert ununterbrochen, also lĂ€sst schwerer Code das ganze Blatt ruckeln. Lernen Sie das Muster zum Hervorheben der aktiven Zeile richtig kennen, warum es in eine Schleife geraten kann und wie Sie es federleicht halten.

Henry
VBA For Each in Excel — eine Collection ohne Index durchlaufen (und die Fallen, die es verbirgt)

VBA For Each in Excel — eine Collection ohne Index durchlaufen (und die Fallen, die es verbirgt)

For Each sagt „mach das mit jedem Element“ und ĂŒberlĂ€sst VBA die Reihenfolge und die Grenzen — kein ZĂ€hler, kein Off-by-one. Doch diese Bequemlichkeit verbirgt drei harte Regeln: die Schleifenvariable muss ein Objekt oder eine Variant sein, das Durchlaufen eines Arrays ist schreibgeschĂŒtzt, und Sie dĂŒrfen niemals aus einer Collection löschen, die Sie gerade durchlaufen. Erfahren Sie, wann For Each das For
Next schlĂ€gt und wann es Sie klammheimlich im Stich lĂ€sst.

Henry
VBA Collection in Excel — die geordnete, wachsende Liste (und warum sie kein Dictionary ist)

VBA Collection in Excel — die geordnete, wachsende Liste (und warum sie kein Dictionary ist)

Eine VBA Collection ist eine geordnete Liste, die wĂ€chst, wĂ€hrend Sie mit Add hinzufĂŒgen — kein ReDim, kein GrĂ¶ĂŸenraten. Doch sie hat vier scharfe Kanten, die AnfĂ€nger jedes Mal treffen: sie ist 1-basiert statt 0-basiert, Sie können ein Element nicht ĂŒberschreiben (nur Add/Remove), doppelte SchlĂŒssel werfen Fehler 457, und es gibt keine eingebaute Exists-PrĂŒfung. Erfahren Sie, wann eine Collection ein Array oder ein Dictionary schlĂ€gt und wann sie Sie klammheimlich Zeit kostet.

Henry
VBA With-Anweisung in Excel — das Objekt einmal schreiben (und der fĂŒhrende Punkt, der alles entscheidet)

VBA With-Anweisung in Excel — das Objekt einmal schreiben (und der fĂŒhrende Punkt, der alles entscheidet)

Die With-Anweisung benennt ein Objekt einmal und lĂ€sst Sie seine Member mit einem nackten fĂŒhrenden Punkt ansprechen — weniger Tippen, schnellerer Code, sauberere Blöcke. Doch dieser fĂŒhrende Punkt ist das ganze Spiel: vergessen Sie ihn und aus .Font wird Font, das sich klammheimlich an das aktive Blatt statt an Ihr Objekt bindet. Erfahren Sie, was With wirklich optimiert, die Falle des fehlenden Punkts und wie With mit For Each zusammenspielt.

Henry