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

The ExcelMaster.ai Blog

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