Excel VBA Programmieren lernen – Die Grundlagen einfach erklärt

In diesem Artikel werden die Grundlagen der Excel VBA Programmierung einfach erklärt.

Inhaltsverzeichnis

Kurs in der Volkshochschule Reutlingen als Dozent für Microsoft Excel VBA war Anstoß für YouTube-Videos und Blogartikel

Der Volkshochschule Reutlingen ist die Gleichstellung von behinderten Menschen und die Inklusion sehr wichtig. Deswegen stehe ich seit mehreren Jahren als Dozent im Programm der Volkshochschule Reutlingen mit mehreren Kursen. Vor 4 Wochen bekam ich eine Mail von der Volkshochschule Reutlingen, dass mein Kurs „Programmieren mit MS-Excel VBA“ stattfindet. Da ich für die Kurteilnehmer Kursunterlagen erstellen musste, hatte ich jetzt genug Material um YouTube-Videos und einen Blogartikel über Programmieren mit Excel VBA zu erstellen. Wegen Corona, fand mein Kurs über Zoom statt und war somit auch eine Art Online-Kurs!

Ziel dieses Online Kurs

Ob Sie diesen Blogartikel mit den dazugehörigen Videos VBA Online Kurs oder VBA Kurs nennen ist egal. Leider hat es sich eingebürgert, dass englische Begriffe, also Tutorial, sich besser anhören wie deutsche, hier Kurs oder Online Kurs. Ich nenne ich diesen Blogartikel mit Lernvideos Visual Basic for Applications Online Kurs, sie dürfen aber auch das Ganze als VBA Kurs betiteln. Ziel dieses Online Kurses ist es, Ihnen zu zeigen, es sich lohnt, die Programmiersprache Visual Basic for Applications zu lernen. Ebenso möchte ich Ihnen zeigen, dass mit Microsoft Excel VBA nicht nur Abläufe automatisiert werden können, sondern dass es möglich ist richtige professionelle Office-Anwendungen zu programmieren. Durch das programmieren von Office-Anwendungen ist es möglich, dass Anwender Funktionalitäten von Excel nutzen können, ohne dass sie Ahnung von Excel haben müssen. Durch die Verwendung von Userforms und dem gleichzeitigen verstecken von den Excel Menüs können Sie Office-Anwendungen die wie echte Windows-Anwendungen aussehen und funktionieren.

Die Entwicklung von Office-Anwendungen benötigt sehr viel weniger Zeit als die Entwicklung von Windows-Anwendungen mit den Programmiersprachen Java, C# oder Python.

Wenn Sie es durchhalten alle Codebeispiele zu testen und zu verstehen, sind Sie am Schluss dieses VBA-Tutorials ein professioneller Entwickler für Office-Anwendungen mit Visual Basic for Applications. Professionelle Entwickler für Excel VBA sind noch immer sehr gefragt und können richtig gutes Geld verdienen.

Programmierung mit VBA kann sehr unterschiedlich aussehen. Die Programmierung von Makros welche Excel-Arbeiten ausführen die auch von „Hand“ erledigt werden können, ist ein sehr großer Bereich. Durch die Programmierung von solchen Makros kann sehr viel Zeit gespart werden.

Die Programmierung von „Tools“ die zur Erledigung bestimmter Aufgaben genutzt werden können, ist ein weitere Anwendungsfall.

Ebenso ist die Programmierung von richtigen professionellen Anwendungen, wie zum Beispiel Adressenverwaltung, Auftragsverwaltung oder Angebots-und Rechnungsstellung möglich.

Nun wünsche ich Ihnen viel Spaß und Erfolg mit meinem Excel Visual Basic for Applications Online-Kurs und bin gespannt was für tolle Office-Anwendungen Sie entwickeln werden.

Excel VBA programmieren lernen für Anfänger

Mein Excel VBA Kurs in der Volkshochschule Reutlingen war für Menschen die keine Programmiererfahrung und keine Behinderung haben. Deswegen ist dieser Blogartikel und meine YouTube-Videos, dieser Online-Kurs, auch für Anfänger. Ich möchte mit dem Vorurteil aufräumen, dass programmieren lernen nur was für Menschen ist, die Informatik studiert haben. Psst … nicht verraten … ich habe auch nicht Informatik studiert! Deswegen lade ich ausdrücklich alle diejenigen ein die kein Informatik-Studium besitzen, aber trotzdem Lust haben Visual Basic for Applications programmieren zu lernen. Excel VBA kann für Anfänger etwas Einschüchternd sein, aber ich möchte an dieser Stelle Mut machen sich auch als Anfänger mit Microsoft Excel Visual Basic for Applications zu beschäftigen. Meine Codebeispiele sind mit Absicht möglichst kurz, so dass Anfänger Lust bekommen diese Programmiersprache zu lernen. Als Anfänger ist es wichtig Geduld zu haben. Das Lernen einer Programmiersprache dauert Zeit. Aber ich verspreche es lohnt sich.

Der inklusive Programmierkurs – Excel VBA programmieren lernen

Inklusion bedeutet, wenn Menschen ohne Behinderung und Menschen mit Behinderungen etwas gemeinsam machen. Die Inklusion ist in den Landkreisen Reutlingen und Tübingen im Bundesland Baden-Württemberg noch nicht wirklich angekommen. In Sachen Inklusion am Arbeitsplatz gibt es in ganz Deutschland, aber auch speziell in den Landkreisen Tübingen und Reutlingen noch viel zu tun und ich wünsche mir, dass dieser Blogartikel dazu beiträgt, dass Menschen mit Behinderungen Arbeitsplätze im IT-Bereich, natürlich zunächst in ganz Deutschland, aber auch in den Landkreisen Reutlingen und Tübingen bekommen. Deswegen möchte ich mit meinen Programmierkursen zeigen wie es geht. Dieser Blogartikel und meine Lernvideos sollen dazu beitragen dass Menschen mit und ohne Behinderung, gerne auch aus den Landkreisen Reutlingen und Tübingen, gemeinsam die Script-Sprache Excel VBA lernen.

Schulungen und Seminare für Excel VBA

Grundsätzlich bin ich großer Fan von Seminaren und Schlungen. Deswegen biete ich für andere Bereiche meines IT-Internehmens auch Seminare und Schulungen an. Momentan biete ich für Microsoft Visual Basic for Applications keine Schulungen und Seminare an. Wenn ich viele Anfragen zwecks Schulungen oder Seminare bekomme, kann sich das ändern. Aber ehrlich gesagt ist meine Hoffnung, dass mein Kurs bei der Volkshochschule Reutlingen und hier mein Online-Kurs so gut sind, dass danach niemand eine Schulung oder ein Seminar für Microsoft Excel VBA benötigt!

Excel VBA barrierefrei lernen

Menschen mit unterschiedlichen Behinderungen haben es nicht leicht eine Programmiersprache zu lernen. Blinde Menschen haben es besonders schwer, weil für sie Youtube-Videos nicht nutzbar sind. Deswegen möchte ich einen Beitrag dazu leisten, dass Menschen mit unterschiedlichen Behinderungen Programmiersprachen lernen können. Die Kombination Lernvideos mit Untertitel sind für Menschen die sehen können und gehörlose Menschen gut. Menschen ohne Behinderungen lernen auch gerne Programmiersprachen auf Youtube. Für blinde Menschen sind Blogartikel besser um eine Programmiersprache zu lernen. Menschen mit körperlich eingeschränkten Händen die sehen können, schauen sich zum lernen von Programmiersprachen gerne Lernvideos. Code von Programmiersprachen in Lernvideos abtippen ist aber für Sie sehr mühsam. Lernvideos zum lernen anschauen und den Code von einem Blogartikel per Copy Paste (=Kopieren und einfügen) übernehmen zu können, ist die optimale Lösung. Dieser Programmierkurs soll zeigen wie barrierefreies E-Learning funktionieren kann. E-Learning bedeutet elektronisches Lernen. Vereinfacht gesagt: Es geht um Visual Basic for Applications barrierefrei lernen. In Zeiten der Inklusion ist barrierefreies Lernen von Programmiersprachen sehr wichtig. Die Webseiten Youtube und Udemy sind gute Beispiele für E-Learning. Barrierefreies E-Learning bedeutet, dass auch Menschen mit Behinderungen das E-Learning nutzen können. Ich bin sehr großer Fan von E-Learning.

Was benötigen Sie, um Microsoft Excel VBA programmieren zu können?

Sie benötigen die Software Excel von Microsoft. Ich habe Microsoft Office Professional Plus 2019 installiert. Sie benötigen Geduld! Entwickler, egal welche Programmiersprache, wird niemand sofort. Auch wenn Sie mit diesem Blogartikel nicht sofort ein guter Excel Visual Basic for Applications Entwickler werden. Ich verspreche Ihnen, dass wenn Sie sehr viel Geduld haben und diesen Artikel ganz durcharbeiten, haben Sie die Grundlagen um ein sehr guter Entwickler zu werden. Aber der Artikel alleine reicht nicht aus. Sie müssen viel programmieren. Um ein sehr guter Entwickler zu werden benötigt jeder Programmierpraxis. Wenn Sie alle Codebeispiele in diesem Artikel nach programmieren, haben Sie Programmierpraxis. Um aber ein richtig guter Entwickler zu werden, sollten Sie sich Programme ausdenken, die für Sie sinnvoll sind und Ihnen Freude machen diese Programme zu entwickeln.

Um es nochmal kurz und knapp auf den Punkt zu bringen:

Um ein guter Entwickler zu werden, benötigen Sie:

  1. Die Software Microsoft Excel
  2. sehr viel Geduld
  3. Programmierpraxis

Was ist Excel VBA?

VBA ist die Abkürzung für Visual Basic for Applications. Visual Basic for Applications ist eine Skriptsprache, die ursprünglich für die Steuerung von Abläufen der Microsoft-Office-Programmfamilie entwickelt wurde. Sie wurde aus dem von Microsoft entwickelten BASIC-Dialekt Visual Basic abgeleitet. VBA gibt es auch in anderen Microsoft Office-Programmen.

Arbeitsmappen mit Makros speichern

Damit Sie mit Excel VBA programmieren können, muss Ihre Arbeitsmappe die Dateierweiterung .xlsm enthalten. Beispiel: Adressen_Verwaltung.xlsm
Das m in der Dateierweiterung steht für Makro.

Register Entwicklertools anzeigen

Um mit Excel Visual Basic for Applications programmieren zu können, müssen Sie dafür sorgen, das Register „Entwicklertools“ anzeigen. Dieses Register ist standardmäßig nicht sichtbar. Wählen Sie zu das Menü „Datei“, „Optionen“ und danach „Menüband anpassen“. Aktivieren Sie hier in der rechten Liste unterhalb von „Hauptregisterkarten“ das Kontrollkästchen der Registerkarte „Entwicklertools und übernehmen Sie die Einstellung mit „OK“.

In Microsoft Excel in den Optionen bei "Menüband anpassen" die Entwicklertools aktivieren
In der Software Microsoft Excel in den Optionen bei „Menüband anpassen“ die Entwicklertools aktivieren

In folgendem Video zeige ich, wie es geht:

Heruntersetzen der Sicherheitsstufe

Um zu verhindern, dass sich Makrovieren verbreiten, gibt es in Microsoft Excel Sicherheitseinstellungen. Damit Sie Visual Basic for Applications  programmieren können, müssen Sie die Sicherheitseinstellungen anpassen. Wählen Sie das Register „Datei“, „Optionen“ und dann den „Trust Center“. Jetzt auf „Einstellungen für das Trust Center“. Wählen Sie in „Makroeinstellungen“, „Alle Makros mit Benachrichtigung deaktivieren“. Anmerkung: Im Video habe ich es leider falsch erklärt. Tut mir leid. Trotzdem, hier das Video:

Makros aufzeichnen

Das Aufzeichnen von Befehlsfolgen wird als Makro bezeichnet. Mit Microsoft Excel VBA können Makros programmiert werden. Klicken Sie auf das Register „Entwicklertools“. Klicken Sie auf der linken Seite auf die Schaltflächen „Makro aufzeichnen“. Jetzt können Sie ihrem Makro noch einen Namen geben, zum Beispiel „VBABefehle“ und klicken auf die Schaltfläche „OK“. Erstellen Sie jetzt einen Kalender für den aktuellen Monat. In Spalte A das Datum von 1 bis .. 28, 30 oder 31. In Spalte B den Namen des Wochentags. Danach klicken Sie im Register „Entwicklertools“ auf die Schaltfläche „Aufzeichnung beenden“. Klicken Sie auf die Schaltfläche „Makros“. Suchen Sie in der Liste der Makros, das Makro welches Sie gerade aufgenommen haben. Klicken Sie auf das Makro. Klicken Sie auf die Schaltfläche „Bearbeiten“. Jetzt sind Sie in dem Makro, dass Sie gerade aufgezeichnet haben und können sich die Excel VBA Befehle anschauen. In folgendem Video zeige ich oben beschriebenen Schritte:

Visual Basic Editor öffnen

Der Visual Basic Editor wird auch VBE abgekürzt. Es gibt folgende Möglichkeiten, den Visual Basic Editor zu öffnen

  • Klicken Sie auf das Register „Entwicklertools“ und danach auf die Schaltfläche „Code Anzeigen“
  • Klicken Sie auf das Register „Entwicklertools“ und danach auf die Schaltfläche „Visual Basic“
  • Tastenkombination Alt + F11

In folgendem Video zeige ich, wie Sie den Editor öffnen:

Visual Basic Editor – Anleitung

Hier gibt es eine Anleitung zum Visual Basic Editor. Leider hat das Unternehmen Microsoft diesen Editor in den letzten Jahren nicht weiter entwickelt. 

Microsoft Excel VBA-Editor
So sieht der Microsoft Excel VBA-Editor aus.

Menü

Im Menüpunkt „Bearbeiten“ gibt es die Menüs:

  • Ausschneiden
  • Kopieren
  • Einfügen
  • Löschen
  • Suchen
  • Ersetzen

die auch aus Textverarbeitungsprogrammen bekannt sind.

Im Menüpunkt „Ansicht“ können folgende Fenster eingeblendet werden:

    • Code
    • Direktfenster
    • Lokalfenster
    • Überwachungsfenster
    • Projekt-Fenster
    • Eigenschaftenfenster
    • Symbolleisten

Im Codefenster können Sie Ihren Microsoft Excel-Visual Basic for Applications-Code tippen. Im Projektfenster wird die geöffnete Excel-Arbeitsmappe angezeigt und die Tabellenblätter. Wenn Sie im Projektfenster etwas anklicken, wird im Eigenschaftenfenster angezeigt welche Eigenschaften das markierte Objekt hat.

Menüpunkt „Einfügen“

Hier können Sie folgendes einfügen:

  • Prozedur
  • UserForm
  • Modul
  • Klassenmodul
  • Datei

Menüpunkt „Debuggen“

Debuggen bedeutet Fehler suchen. Dieses Menü hilft Ihnen beim Suchen von Programmierfehler. Wichtig ist der Untermenüpunkt „Kompilieren von VBAProject“. Dieses Kompilieren sollten Sie regelmäßig machen, um zu überprüfen, ob ihr Visual Basic for Applications-Code Fehler hat.

Menüpunkt „Ausführen“

Hier können Sie ein Makro, eine Prozedur oder ein UserForm ausführen.

In folgendem YouTube-Video erkläre ich den Visual Basic Editor:

Visual Basic Editor – Barrierefreiheit

Ich habe den Visual Basic Editor (=VBE) erfolgreich mit dem Screenreader NVDA getestet, das bedeutet, blinde Menschen können Excel VBA programmieren. Der Visual Basic Editor lässt sich komplett per Tastatur bedienen. Das Menü „Ansicht“ ist hierfür ganz wichtig und der Visual Basic Editor (=VBE) hat auch viele Tastenkürzel. Blinde und sehbehinderte Menschen profitieren davon, dass der Visual Basic Editor komplett per Tastatur bedienbar ist. Die Schriftgröße des Visual Basic Editor (=VBE) ist im Menü „Extras“, „Optionen“, im Register „Editorformat“ anpassbar. Das hilft Menschen mit einer Sehbehinderung. În den „Optionen“ im Register „Editorformat“ können Menschen mit einer Farbfehlsichtigkeit Farbanpassungen vornehmen. Der Visual Basic Editor (=VBE) ist barrierefrei. In folgendem Video zeige ich die Barrierefreiheit des Visual Basic Editor (=VBE):

Hinweise für Blinde Menschen zur Tastaturbedienung

Damit blinde Menschen es einfacher haben, die Codebeispiele nachzuprogrammieren, hier ein paar wichtige Anleitungen zur Tastaturbedienung.

Visual Basic Editor (=VBE) öffnen

Es gibt mehrere möglichkeiten den Visual Basic Editor (=VBE) zu öffnen.

Tastaturkürzel

Die erste Möglichkeit den Visual Basic Editor zu öffnen ist per Tastenkürzel. Mit der Tastenkombination Alt + F11 geht es am schnellsten.

Menü

Die zweite Möglichkeit den Visual Basic Editor zu öffnen ist über das Menüband. Über das Menüband, Register Entwicklertools Schaltfläche „Code anzeigen“ oder Schaltfläche „Visual Basic“.

Code in „DieseArbeitsmappe“ eintragen

Fenster „Projekt – VBAProject“ aktivieren mit Tastenkürzel Strg + R. Mit Cursortaste hoch oder herunter „DieseArbeitsmappe“ markieren. Mit Taste „Enter“ Codefenster aktivieren.

Alternativ zum Tastenkürzel kann das Fenster „Projekt – VBAProject“ über das Menü „Ansicht“, „Projekt-Explorer“ aktiviert werden.

Code in ein Arbeitsblatt / Tabellenblatt eintragen

Angenommen Sie möchten in das Arbeitsblatt Tabelle1 Code eintragen. Dann gehen Sie wie folgt vor: Fenster „Projekt – VBAProject“ aktivieren mit Tastenkürzel Strg + R. Mit Cursortaste hoch oder herunter „Tabelle1 (Tabelle1)“ markieren. Mit Taste „Enter“ Codefenster aktivieren.

Alternativ zum Tastenkürzel kann das Fenster „Projekt – VBAProject“ über das Menü „Ansicht“, „Projekt-Explorer“ aktiviert werden.

Eigenschaften Festlegen

DieseArbeitsmappe, Arbeitsblätter und Module haben Eigenschaften. Angenommen Sie haben ein Modul eingefügt und möchten dessen Namen ändern. Das machen Sie per Tastatur wie folgt: Fenster „Projekt – VBAProject“ aktivieren mit Tastenkürzel Strg + R. Mit Cursortaste herunter bis ihr eingefügtes Modul markiert ist. Jetzt aktivieren Sie mit Taste F4 das Fenster „Eigenschaften“. Nun drücken Sie die Taste Tabulator. Jetzt können Sie einen Namen für ihr eingefügtes Modul tippen. Wenn Sie fertig sind, bestätigen Sie die Eingabe mit der Taste „Enter“.

Arbeitsmappen – Alles was wichtig ist zum Thema Arbeitsmappe

Eine Arbeitsmappe ist eine Exceldatei. Excel Arbeitsmappen haben die Dateierweiterung .xls . Excel Arbeitsmappen in den VBA-Code gespeichert werden kann haben die Dateierweiterung .xlsm . Arbeitsmappen sind in Excel-VBA Worksbooks. Workbook ist ein Objekt. Das Workbook-Objekt hat Ereignisse und Methoden. Was das genau ist, werde ich später erklären. Das Workbook-Objekt ist ein sehr wichtiges Objekt. Deswegen sollten Sie sich sehr gründlich mit dem Workbook-Objekt beschäftigen Im lauf dieses Tutorial wird das Workbook-Objekt immer wieder auftauchen. Hier folgen die wichtigsten Aufgaben, die Sie mit Excel VBA und Arbeitsmappen erledigen können.

Was sind Add-Ins?

Excel-Add-Ins sind versteckte Arbeitsmappen, die bei jedem Öffnen von Microsoft Excel geöffnet werden. Die Add-Ins können VBA-Code (Makros) und andere Berechnungen enthalten, die Sie bei der Arbeit in anderen Arbeitsmappen verwenden können. Mit einem Excel-Add-In können Sie die Funktionalität von Excel-Anwendungen auf mehrere Plattformen erweitern, einschließlich Windows, Mac, iPad und in einem Browser.

Pfad anzeigen von der geöffneten Arbeitsmappe

Der Pfad einer Excel Arbeitsmappe ist das Verzeichnis in dem sie gespeichert ist.

Um den Excel VBA Editor zu öffnen, klicken Sie auf das Menüband „Entwicklertools“ und danach auf die Schaltfläche „Code anzeigen“.

Mit folgendem Code können Sie den Pfad de geöffneten Arbeitsmappe anzeigen:

Sub DieseArbeitsmappePfad()
  MsgBox ThisWorkbook.Path
End Sub

Erklärung zum Excel VBA Code

Der Excel VBA-Befehl MsgBox zeigt ein Meldungsfenster an, mit einem Text. Das Meldungsfenster kann mit bestätigen des OK-Schalters geschlossen werden. ThisWorkbook ist die Arbeitsmappe in der Sie sich gerade befinden. Path ist das Verzeichnis in dem sich die Arbeitsmappe befindet.

Pfad und Dateiname anzeigen von der geöffneten Arbeitsmappe

Um den Microsoft Excel Visual Basic for Applications Editor zu öffnen, klicken Sie auf das Menüband „Entwicklertools“ und danach auf die Schaltfläche „Code anzeigen“.

Mit folgendem Code können Sie den vollständigen Pfad, Verzeichnis und Dateiname der geöffneten Arbeitsmappe anzeigen:

Sub DieseArbeitsmappePfadundDateiname()
  MsgBox ThisWorkbook.FullName
End Sub

Erklärung zum Excel VBA Code

ThisWorkbook ist die Arbeitsmappe in der Sie sich gerade befinden. FullName ist das Verzeichnis und der Dateiname von dieser Arbeitsmappe.

Um den Microsoft Excel VBA Editor zu öffnen, klicken Sie auf das Menüband „Entwicklertools“ und danach auf die Schaltfläche „Code anzeigen“.

Pfad und Dateiname anzeigen von der aktiven Arbeitsmappe

Mit folgendem Code können Sie den Pfad de aktiven Arbeitsmappe anzeigen:

Sub ZuleztAktiveArbeitsmappePfadundDateiname()
  MsgBox ActiveWorkbook.FullName
End Sub

Erklärung zum Excel VBA Code

ActiveWorkbook ist die Arbeitsmappe Ist die Arbeitsmappe, die zu Letzt aktiv war. FullName ist das Verzeichnis und der Dateiname von dieser Arbeitsmappe.

Um den Microsoft Excel VBA Editor zu öffnen, klicken Sie auf das Menüband „Entwicklertools“ und danach auf die Schaltfläche „Code anzeigen“.

Arbeitsmappe öffnen

Mit folgendem Code können eine Arbeitsmappe öffnen:

Sub arbeitsmappeOeffnen()
  Workbooks.Open Filename:="C:\Projekte\Youtube\zumzeigen.xlsm"
End Sub

Erklärung zum Excel VBA Code

Mit dem Excel VBA-Befehl Workbooks.Open können Sie jede x-beliebige Arbeitsmappe öffnen,die auf Ihrem Computer gespeichert ist. Mit dem Parameter Filename können Sie angeben, welche Excel Arbeitsmappe geöffnet wird. Sie schreiben Filename:= und dann in Anführungszeichen das Verzeichnis und den Dateinamen von der Arbeitsmappe die geöffnet werden soll. Im obigen Beispiel gibt es eine Arbeitsmappe mit dem Namen „zumzeigen.xlsm“. Sie befindet sich im Verzeichnis C:\Projekte\Youtube\. Diese Arbeitsmappe wird mit Workbooks.Open geöffnet.

Zugriff auf andere Arbeitsmappe

Um den Excel VBA Editor zu öffnen, klicken Sie auf das Menüband „Entwicklertools“ und danach auf die Schaltfläche „Code anzeigen“.

Sub zugriffAufAndereArbeitsmappe()
  Range("A1").Value = Workbooks("zumzeigen.xlsm").FullName
End Sub

Erklärung zum Excel VBA Code

Mit Range können Sie einen Bereich festlegen. Der Bereich kann aus einer Zelle oder aus mehreren Zellen bestehen. Im Obigen Beispiel ist es die Zelle A1. Mit Value können Sie auf den Inhalt (=Wert) einer Zelle zugreifen der wie oben, Sie können einer Zelle einen neuen Wert zuweisen. Workbooks sind in Excel VBA Arbeitsmappen. Im Code greife ich auf eine Arbeitsmappe mit dem Dateinamen „zumzeigen.xlsm“ zu. FullName ist das Verzeichnis und der Dateiname von dieser Arbeitsmappe. Der obige Code schreibt in die Excel-Zelle A1 den Verzeichnis und Dateinamen der Arbeitsmappe „zumzeigen.xlsm“.

Arbeitsmappe Schließen

Um den Excel VBA Editor zu öffnen, klicken Sie auf das Menüband „Entwicklertools“ und danach auf die Schaltfläche „Code anzeigen“.

Sub arbeitsmappe_schließen()
  Workbooks("zumzeigen.xlsm").Close savechanges:=True
End Sub

Erklärung zum Excel VBA Code

Workbooks sind in Excel VBA Arbeitsmappen. Im Code greife ich auf eine Arbeitsmappe mit dem Dateinamen „zumzeigen.xlsm“ zu. Mit der Methode Close schließe ich die Arbeitsmappe. Der Parameter savechanges von der Methode Close sorgt dafür, dass beim Schließen der Arbeitsmappe eventuelle Änderungen sofort gespeichert werden ohne dass der Anwender einen Speichern-Dialog bestätigen muss. Obiger Code speichert Änderungen bei der Excel-Arbeitsmappe „zumzeigen.xlsm“.

Arbeitsmappe speichern

Um den Excel VBA Editor zu öffnen, klicken Sie auf das Menüband „Entwicklertools“ und danach auf die Schaltfläche „Code anzeigen“.

Sub arbeitsmappe_speichern()
  Workbooks("zumzeigen.xlsm").SaveAs Filename:="C:\Projekte\Youtube\zumzeigen2.xlsm"
End Sub

Erklärung zum Excel VBA Code

Mit der Methode SaveAs und dem Parameter Filename ist es möglich einer Excel-Arbeitsmappe beim Speichern einen anderen Dateinamen zu vergeben. Oben gezeigter Code speichert die Excel-Arbeitsmappe „zumzeigen.xlsm“ unter dem Dateinamen „zumzeigen2.xlsm“.

Arbeitsmappe erstellen

Sub arbeitsmappe_erstellen()
  Dim NewBook As Workbook
  Set NewBook = Workbooks.Add
End Sub

Erklärung zum Excel VBA Code

Mit dem Excel VBA Befehl Dim wird eine Variable NewBook erstellt vom Typ Workbook. Mit dem Excel VBA Befehl Set wird der Variable NewBook der Wert Workbooks.Add erstellt wird. Die erstellten Excel Arbeitsmappen bekommen den Namen „Mappe“ und danach eine Zahl. Beispiele:

  • Mappe1
  • Mappe2

Hier das Video zum Thema Arbeitsmappen:

Arbeitsblätter / Tabellenblätter – Alles was wichtig ist

Wenn Excel geöffnet ist, sehen wir ein weißes Raster, das Arbeitsblätter genannt wird. Der Name des Arbeitsblatts steht weiter unten am Bildschirm auf dem Register. In einer neuen Excel Arbeitsmappe gibt es zunächst nur 1 Arbeitsblatt. Mit Hilfe des Plus-Zeichens können weitere Arbeitsblätter angelegt werden. Leider gibt es für Arbeitsblätter auch den Begriff Tabellenblätter. In meinen Lernvideos habe ich den Begriff Tabellenblätter verwendet. Arbeitsblätter wäre eigentlich besser. In Excel VBA heißen Tabellenblätter Worksheets, was auf Deutsch Arbeitsblätter heißt. Aber es gibt auf Youtube sehr viel Videos in den von Tabellenblätter die Gesprochen wird. Deswegen ist es für Sie wichtig zu wissen, Arbeitsblätter und Tabellenblätter sind das gleiche.

Ein Arbeitsblatt. Unten im Blattregister steht der Name des Arbeitsblatts
Ein Arbeitsblatt. Unten im Blattregister steht der Name des Arbeitsblatts. Mit Excel Ein Arbeitsblatt. Unten im Blattregister steht der Name des Arbeitsblatts. Mit Excel VBA kann dieser Name geändert werden.

Aktuelles Arbeitsblatt ansprechen

Sub aktuelles_arbeitsblatt()
  ActiveSheet.Range("A1").Value = "VBA ist cool"
End Sub

Erklärung zum Excel VBA Code

ActiveSheet ist das aktive Arbeitsblatt. Mit Range wird der Bereich festgelegt. Mit Value kann einer Excel-Zelle Inhalt (=Text oder Zahl) zugewiesen werden. Der obige Code schreibt in die Zelle A1 des aktiven Arbeitsblattes den Text „VBA ist cool“ hinein.

Arbeitsblatt mit dem Namen ansprechen

Sub arbeitsblatt_name()
  Worksheets("Kein Codename").Range("A1").Value = "Kein Codename"
End Sub

Erklärung zum Excel VBA Code

Mit Worksheets(„Kein Codename“) wird der Name des Arbeitsblattes verwendet. Mit Range wird der Bereich festgelegt. Mit Value kann einer Excel-Zelle Inhalt (=Text oder Zahl) zugewiesen werden. Der obige Code schreibt in die Zelle A1 des aktiven Arbeitsblattes den Text „Kein Codename“ hinein.

Arbeitsblatt mit dem Index ansprechen

Sub arbeitsblatt_erstes()
  Worksheets(1).Range("A1").Value = "Index"
End Sub

Erklärung zum Excel VBA Befehle

Mit Worksheets(1) wird der Name des Arbeitsblattes verwendet. Mit Range wird der Bereich festgelegt. Mit Value kann einer Excel-Zelle Inhalt (=Text oder Zahl) zugewiesen werden. Der obige Code schreibt in die Zelle A1 des aktiven Arbeitsblattes den Text „Index“ hinein. Der Zugriff auf ein Arbeitsblatt über den Index ist möglich ist aber keine gute Idee. Wenn ein Arbeitsblatt ganz vorne hinzugefügt wird, verändert sich der Index von allen Arbeitsblättern die danach kommen. Das sorgt dafür, dass Ihre Zugriffe auf andere Tabellenblätter nicht mehr stimmen und Ihr Programm auf einmal sehr viele Fehlermeldungen produziert.

Tabellenblatt mit dem Codenamen ansprechen

Sub arbeitsblatt_CodeName()
  CodeName.Range("A1").Value = "CodeName"
End Sub

Erklärung zum Excel VBA Code

Der Codename ist um auf ein Tabellenblatt zu zugreifen die beste Idee. Er kann nicht so einfach verändert werden. Wenn Sie im Editor ein Tabellenblatt anklicken, dann können Sie im Fenster „Eigenschaften“, die Eigenschaften anschauen und festlegen. Der Name des Arbeitsblattes wird ohne Klammern dargestellt: Name. Der Codename wird mit Klammern dargestellt: (Name) . Der obige Code greift über den Codenamen eines Arbeitsblattes auf die Zelle A1 zu und ändert ihren Inhalt.

Tabellenblatt umbenennen

Sub arbeitsblatt_umbennen()
  Worksheets("Kein Codename").Name = "To Do Liste"
End Sub

Erklärung zum Excel VBA Code

Mit Worksheets(„Kein Codename“).Name wird auf den Namen des Arbeitsblattes zugegriffen. Das Arbeitsblatt „Kein Codename“ wird umbenannt in „To Do Liste“. Die Umbenennung ist im Arbeitsblatt der Excel-Arbeitsmappe sichtbar.

Tabellenblatt hinzufügen

Sub arbeitsblatt_hinzufuegen()
  Worksheets.Add
End Sub

Erklärung zum Excel VBA Befehle

Mit der Methode Add kann einen Tabelleblatt (=Worksheet) hinzugefügt werden in einer Excel Arbeitsmappe.

In folgendem Video erkläre ich alles, was Sie über Arbeitsblätter wissen müssen:

Zellen – Alles was wichtig ist zum Thema Zellen

Die Rechtecke in einem Excel Arbeitsblatt heißen Zellen. In diesem Abschnitt geht es darum was Sie mit Excel VBA und Excel Zellen alles machen können.

Excel-Zellen von Spalte A bis D und Zeile 1 bis 7. Die Excel-Zelle A1 hat eine rote Hintergrundfarbe,
Das Rechteck, welches eine rote Hintergrundfarbe hat, ist eine Excel-Zelle.

Einer Zelle eine Zahl zuweisen


Sub zelle_eine_zahl_zuweisen()
  Range("A1").Value = 1
End Sub

Erklärung zum Excel VBA Code

Mit Range wird festgelegt, dass der Zelle A1 einen Wert zugewiesen werden soll. .Value ist eine Eigenschaft einer Zelle. Hier wird .Value die Zahl 1 zugewiesen. Das bedeutet, nach ausführen des Codes steht in Zelle A1 eine 1.

Einer Zelle eine Text zuweisen


Sub zelle_einen_text_zuweisen()
  Cells(2, 1).Value = "Excel VBA"
End Sub

Erklärung zum Excel VBA Code

Mit Range wird festgelegt, dass der Zelle A1 einen Wert zugewiesen werden soll. .Value ist eine Eigenschaft einer Zelle. Hier wird .Value der Text „Excel VBA“ zugewiesen. Das bedeutet, nach ausführen des Codes steht in Zelle A1 der Text Excel VBA.

Den Inhalt einer Zelle in eine andere Zelle Eintragen mit Range


Sub zelle_den_inhalt_einer_zelle_zuweisen()
  Range("B1").Value = Range("A2").Value
End Sub

Erklärung zum Excel VBA Code

Mit Range werden die Zellen B1 und A2 angesprochen. Der obige Code weist der Zelle B1 den Inhalt der Zelle A2 zu. Um einen Wert (=Text oder Zahl) in eine Zelle einzutragen wird immer das = Zeichen verwendet.

Einen Text in mehrere Zellen eintragen


Sub ein_wert_in_mehrere_zellen()
  Range("A10, B7, C4").Value = "Zwei"
End Sub

Erklärung zum Excel VBA Befehle

Mit Range werden die Zellen A1, B7, C4 angesprochen. Über die Eigenschaft .Value wird in allen 3 Zellen der Text „Zwei“ eingetragen. Der obige Code trägt in die Excel-Zellen A10, B7 und C4 den Text Zwei ein. Um einen Wert (=Text oder Zahl) in eine Zelle einzutragen wird immer das = Zeichen verwendet.

Eine Zahl in einen Zellbereich eintragen


Sub werte_in_zellbereich()
  Range("E6:F9").Value = 3
End Sub

Sub werte_in_zellbereich2()
  Range("E" & 6, "F" & 9).Value = 3
End Sub

Erklärung zum Excel VBA Code

Mit Range wird der Zellbereich von Zelle E6 bis F9 festgelegt. Der obige Code zeigt zwei unterschiedliche Schreibweisen, wie mit Range ein Zellbereich festgelegt werden kann. Über die Eigenschaft .Value wird die Zahl 3 in den Zellbereich eingetragen. Um einen Wert (=Text oder Zahl) in eine Zelle einzutragen wird immer das = Zeichen verwendet. Nach ausführen von obigen Code steht in den Zellen E6, F6, E7, F7, E8, F8, E9 und F9 die Zahl 3.

Einen Text in eine ganze Spalte eintragen


Sub Spalte()
  Range("B:B").Value = "Vier"
End Sub
Sub Spalte2()
  Columns(2).Value = "Vier"
End Sub

Erklärung zum Excel VBA Code

Mit Range wird der Zellbereich von Zelle B bis B festgelegt. Diese Schreibweise sorgt dafür, dass Excel weiss, die kommende Aktion betrifft eine Spalte. In jede Zelle der Spalte B wird das Wort „Vier“. Im Code darunter wird genau das gleiche gemacht, aber nicht über Range, sondern über Columns. Column sind Spalten.

Einer Zeile eine Zahl zuweisen


Sub Zeile()
  Range("2:2").Value = 5
End Sub
Sub Zeile2()
  Rows(2).Value = 5
End Sub

Erklärung zum Excel VBA Befehle

Im obigen Beispiel wird die ganze Excel-Zeile mit Range festgelegt. Im unteren Beispiel wird die ganze Excel-Zeile mit Rows festgelegt. Beide Codebeispiele sorgen dafür das in allen Excel-Zellen der Spalte 3 die Zahl 5 eingetragen wird. Oben gezeigte Möglichkeiten zeige ich in folgendem Video:

Eine Zelle auswählen


Sub zelle_auswaehlen()
  Range("A3").Select
End Sub

Erklärung zum Code

Mit Range(„A3“) wird die Zelle A3 als Bereich festgelegt. Die Methode Select wählt die Zelle A3 aus.

Aktuelle Zelle – Spalte und Zeile herausfinden


Sub aktive_zelle()
  MsgBox "Spalte: " + CStr(ActiveCell.Column)
  MsgBox "Zeile: " + CStr(ActiveCell.Row)
End Sub

Erklärung zum Code

Mit dem Excel VBA-Befehl CStr wird eine Integer in einen String umgewandelt. Ein Integer ist eine ganze Zahl. Ein String ist eine Zeichenkette. Das Thema Variablen und Typen kommt später noch. ActiveCell ist die Zelle die gerade markiert ist. Column ist eine Eigenschaft von ActiveCell und gibt die Spalte zurück in der sich die markierte Zelle befindet. Row ist eine Eigenschaft von ActiveCell und gibt die Zeile zurück in der sich die markierte Zelle befindet. MitMsgBox wird ein Meldungsfenster angezeigt mit einem „OK“-Schalter. Der obige Code gibt zeigt zwei Meldungsfenster an, welche die Spalte und die Zeile der markierten Zelle ausgeben.

Den Inhalt von Zellen in die Zwischenablage kopieren und wieder einfügen


Sub zellen_kopieren_einfuegen()
  Range("A2:B3").Copy Destination:=Range("A4")
End Sub

Erklärung zum Code

Mit Range(„A2:B3“) wird der Zellenbereich A2 bis B3 festgelegt. Mit der Methode Copy wird der Inhalt (= Wert) des Zellenbereichs in die Zwischenablage kopiert. Mit Destination:=Range(„A4“) wird festgelegt, das der Wert der Zwischenablage ab Zelle A4 eingefügt wird.

Den Inhalt von Zellen ausschneiden und wieder einfügen


Sub zellen_ausschneiden_einfuegen()
  Range("A2:B3").Cut Destination:=Range("A6")
End Sub

Erklärung zum Code

Mit Range(„A2:B3“) wird der Zellenbereich A2 bis B3 festgelegt. Mit der Methode Cut wird der Inhalt (=Wert) des Zellenbereichs ausgeschnitten. Mit Destination:=Range(„A4“) wird festgelegt, das der Wert der Zwischenablage ab Zelle A4 eingefügt wird.

In einem Zellbereich die Schriftart, Schriftgröße, Schriftfarbe ändern und Fettdruck aktivieren

Sub schrift_formatierung()
 With Range("A3:B3")
   .Font.Name = "Arial"
   .Font.Size = 16
   .Font.Bold = True
   .Font.Color = vbBlack
 End With
End Sub

Erklärung zum Code

Die With-Anweisung führt eine Reihe von Anweisungen für ein einzelnes Objekt oder einen benutzerdefinierten Typ aus. Im Code ist das Objekt Range(„A3:B3“). .Font.Name legt den Schrftnamen fest. .Font.Size legt die Schriftgröße fest. .Font.Bold setzt den Fettdruck. .Font.Color legt die Schriftfarbe auf Schwarz fest.

Hintergrundfarbe einer Zelle ändern


Sub hintergrund_farbe()
  With Range("A3:B3")
        .Interior.Color = vbYellow
End Sub

Erklärung zum Code

Die With-Anweisung führt eine Reihe von Anweisungen für ein einzelnes Objekt oder einen benutzerdefinierten Typ aus. Im Code ist das Objekt Range(„A3:B3“). .Interior.Color = vbYellow setzt die Hintergrundfarbe des Bereichs von A3 bis B3 auf Gelb.

Alle Zellinhalte löschen


Sub zellen_loeschen()
  Range("A3:B3").Clear
End Sub

Erklärung zum Code

Range(„A3:B3“) legt den Bereich A3 bis B3 fest. .Clear löscht Zellinhalte, Hintergrundfarbe und Rahmen. Oben gezeigte Möglichkeiten zeige ich in folgendem Video:

Objekt orientierte Programmierung – Was ist das?

In diesem Abschnitt wird erklärt was Objekt orientierte Programmierung ist und warum diese für die Programmierung mit Excel VBA wichtig ist. Die Objekt orientierte Programmierung gibt es bei allen Programmiersprachen. Die Objekt orientierte Programmierung ist bei Excel VBA sehr wichtig. Einige Programmieraufgaben lassen sich mit der Objekt orientierte Programmierung sehr elegant lösen.

Objekte Hierarchie

In Visual Basic for Application gibt es Objekte. Was das genau ist erkläre ich noch. Als erstes gebe ich die Objekte Hierarchie wieder. 1 ist in der Objekte Hierarchie ganz oben, 5 ist in der Objekte Hierarchie ganz unten.

  • Application
  • Workbook
  • Worksheet
  • Range
  • Cell

Das Workbook-Objekt, das Worksheet-Objekt, das Range und Cell-Objekt sind sehr wichtige Objekte. Im laufe dieses Tutorials werde ich immer wieder auf diese Objekte zu sprechen kommen.

Objektorientierte Programmierung erklärt am Beispiel einer Flasche

Die objektorientierte Programmierung kommt aus der realen Welt. Als Beispiel nehme ich eine Flasche. Eine Flasche ist rund und durchsichtig. Das sind Eigenschaften. Den Deckel einer Flasche kann ich drehen (auf und zu). Drehen ist eine Methode. Wenn eine Flasche herunterfällt gibt es einen Aufprall auf dem Boden. Der Aufprall ist ein Ereignis. VBA-Objekte besitzen Eigenschaften, Methoden und Ereignisse

Excel VBA Objekte: Eigenschaften

Folgende Eigenschaften gibt es:

  • Sheets(„Excel VBA Demo“).Range(„A1“).Value
  • ActiveSheet.Name = „Adressenverwaltung“

Excel VBA Objekte: Methoden

  • Worksheets(„Adressenverwaltung“).Select
  • Worksheets(„Adressenverwaltung“).Activate
  • Worksheets.Add
  • Worksheets.Move
  • Worksheets(„Excel VBA Demo“).Range(„A1:A2“).Clear

Excel VBA Objekte: Ereignisse

  • Private Sub Workbook_Open()
  • Private Sub UserForm_Initialize()
  • Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

In folgendem Video wird erklärt, was objektorientierte Programmierung bei Excel VBA ist:

Ereignisse schreiben im VBA-Editor

Im Fenster Projekt – VBAProject auf DieseArbeitsmappe oder ein Tabellenblatt mit der Computermaus einen Doppelklick machen. Alternativ kann auch DieseArbeitsmappe oder ein Tabellenblatt mit den Cursortasten ausgewählt werden und dann die Taste „Enter“ drücken. Menschen die eine Computermaus bedienen können, können jetzt in der linken aufklappbaren Liste, diese heißt Objekt, ein Objekt auswählen, zum Beispiel Workbook. Nun legt der VBA-Editor eine Ereignis-Prozedur an, die zum ausgewählten Objekt passt. Menschen die keine Computermaus bedienen können, haben leider nicht die Möglichkeit die aufklappbare Liste zu bedienen. Sie müssen die Ereignis-Prozeduren schreiben mit der Tastatur. Das Standard-Ereignis für DieseArbeitsmappe heißt Workbook_Open(). Hier der leere Prozedurrumpf:


Private Sub Workbook_Open()
End Sub

Zwischen Private Sub Workbook_Open() und End Sub schreiben Sie den Code der ausgeführt werden soll, wenn das Ereignis Workbook_Open() ausgeführt wird. Das Standard-Ereignis für ein Arbeitsblatt oder Tabellenblatt heißt Worksheet_SelectionChange(ByVal Target As Range). Hier der leere Prozedurrumpf:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub

Zwischen Private Sub Worksheet_SelectionChange(ByVal Target As Range) und End Sub schreiben Sie den Code der ausgeführt werden soll, wenn das Ereignis Worksheet_SelectionChange(ByVal Target As Range) ausgeführt wird.

Ereignis der Arbeitsmappe Workbook_Open()

Die Arbeitsmappe ist ein Objekt. In Excel VBA heißt die Arbeitsmappe Workbook. Das Objekt Workbook hat Ereignisse. Ein Ereignis heißt Workbook_Open(). Dieses Ereignis wird ausgeführt, wenn eine Arbeitsmappe geöffnet wird.

Wie können Sie im VBA-Editor ein Ereignis für eine Arbeitsmappe schreiben? Sie markieren im Fenster „Projekt – VBAProject“ DieseArbeitsmappe . Dann machen Sie einen Doppeklick mit der Computermaus auf DieseArbeitsmappe oder Sie drücken die Taste Enter. Sie können jetzt in der Linken oberen Aufklappbaren Liste „Workbook“ auswählen. Jetzt wird sofort der Prozedurrumpf für das Ereignis Workbook_Open() geschrieben. Sie können aber auch den Prozedurrumpf selbst schreiben:


Private Sub Workbook_Open()
End Sub

Zwischen Private Sub Workbook_Open() und End Sub können Sie jetzt den Excel VBA Code tippen, der ausgeführt werden soll, wenn das Ereignis Workbook_Open() ausgeführt wird.


Private Sub Workbook_Open()
  Range("A1").Value = "Zahl 1"
  Range("B1").Value = "Rechenoperator"
  Range("C1").Value = "Zahl 2"
  Range("D1").Value = "Ergebnis"
  
  Range("A1:D1").Font.Bold = True
  Range("A1:D1").Font.Size = 14
  Range("A1:D1").Font.Name = "Arial"
  
  Range("A2:D2").Font.Size = 14
  Range("A2:D2").Font.Name = "Arial"
  Range("A2:D2").HorizontalAlignment = xlCenter
  Range("A1:D1").EntireColumn.AutoFit
  
  Range("A2").Select
End Sub

Erklärung zum Excel VBA Code

In den ersten 4 Zeilen wird mit Range eine einzelne Zelle ausgewählt und dann mit der Eigenschaft Value ein Text in die Zelle eingetragen. Mit Font.Bold wird in den Zellen A1 bis D1 Fettdruck aktiviert. Mit Font.Size = 14 wird in den Zellen von A1 bis D2 die Schriftgröße auf 14 gesetzt. Mit Font.Name wird in den Zellen von A1 bis D2 die Schriftart „Arial“ gesetzt. Mit EntireColumn.AutoFit wird die Spaltenbreite optimal angepasst.

In folgendem Video erkläre ich das Arbeitsmappen-Ereignis Workbook_Open():

Ereignis des Arbeitsblattes Worksheet_SelectionChange

Das Ereignis Worksheet_SelectionChange wird aufgerufen, wenn sich die Markierung in einem Arbeitsblatt ändert. Mit dem Ereignis Worksheet_SelectionChange können Sie viele interessante Funktionalitäten programmieren. Im folgenden Codebeispiel wird dafür gesorgt, dass die ganze Excel-Zeile in der sich der Textcursor befindet eine Gelbe Hintergrundfarbe zugewiesen bekommt:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Cells.Interior.ColorIndex = xlNone
   Target.EntireRow.Interior.ColorIndex = 6
End Sub

Erklärung zum Excel VBA Code

Cells sind die Zellen. Interior ist die Hintergrundfarbe. ColorIndex ist eine ganze Zahl die für einen bestimmten Farbwert steht. Target ist die Zelle in der gerade der Textcursor steht. EntireRow gibt ein Range-Objekt zurück, das eine oder mehrere ganze Zeilen darstellt, die den angegebenen Bereich enthalten. Der Excel VBA-Code löscht die Hintergrundfarbe und setzt die Hintergrundfarbe in der Excel-Zeile in welcher der Textcursor steht auf Gelb.

In folgendem Video erkläre ich das Arbeitsblatt-Ereignis Worksheet_SelectionChange:

Zellen / Tabellen / Tabellenblätterinhalte sortieren

Das Sortieren von Zellen und Tabellen ist sehr wichtig. Deswegen werden hier die Grundlagen erklärt. Das Objekt Range hat eine Methode Sort. Dieser Methode kann als Parameter (Key1, Key2 usw. ) mitgeben werden, welche Spalten sortiert werden sollen. Mit dem Parameter „Header“ kann angegeben werden, ob der zu sortierende Bereich Spaltenüberschriften hat oder nicht.

Einen Bereich mit Kopfzeile sortieren nach Spalte A


Sub sortieren_nach_einer_spalte()
  Range("A1:C4").Sort Key1:=Range("A2"), Header:=xlYes
End Sub

Erklärung zum Excel VBA Code

Mit Range wird festgelegt, dass der Zellbereich A1 bis C4 sortiert werden soll. Die Methode Sort startet den Sortiervorgang. Mit dem Parameter Key1:=Range(„A2“) wird festgelegt, dass die Spalte A sortiert werden soll. Header:=xlYes gibt an, dass der Range-Bereich eine Kopfzeile enthält. Die Prozedur sortieren_nach_einer_spalte sortiert die Zellen A1 bis C4 nach der Spalte A.

Einen Bereich mit Kopfzeile sortieren nach Spalte C und B


Sub sortieren_nach_zwei_spalten()
  Range("A1:C4").Sort Key1:=Range("C2"), Key2:=Range("B2"), Header:=xlYes
End Sub

Erklärung zum Excel VBA Befehle

Mit Range wird festgelegt, dass der Zellbereich A1 bis C4 sortiert werden soll. Die Methode Sort startet den Sortiervorgang. Mit Key1:=Range(„C2“) wird festgelegt, dass als erstes nach Spalte C sortiert werden soll. Mit Key2:=Range(„B2“) wird festgelegt, dass als zweites nach Spalte B sortiert werden soll. Header:=xlYes gibt an, dass der Range-Bereich eine Kopfzeile enthält.

Einen Bereich ohne Kopfzeile sortieren nach Spalte A


Sub sortieren_nach_einer_spalte_ohnekopfzeile()
  Range("A2:C4").Sort Key1:=Range("A2"), Header:=xlNo
End Sub

Erklärung zum Excel VBA Code

Mit Range wird festgelegt, dass der Zellbereich A2 bis C4 sortiert werden soll. Die Methode Sort startet den Sortiervorgang. Mit Key1:=Range(„A2“) wird festgelegt, dass nach Spalte A sortiert werden soll. Header:=xlNo gibt an, dass der Range-Bereich keine Kopfzeile enthält.

Einen Bereich mit Kopfzeile sortieren nach Spalte C


Sub sortieren_ganze_spalte()
  Columns("A:C").Sort Key1:=Range("C1"), Header:=xlYes
End Sub

Erklärung zum Excel VBA Code

Mit Columns(„A:C“) wird festgelegt, dass die Spalten A bis C sortiert werden soll. Die Methode Sort startet den Sortiervorgang. Mit Key1:=Range(„C1“) wird festgelegt, dass nach Spalte C sortiert werden soll. Header:=xlYes gibt an, dass der Range-Bereich eine Kopfzeile enthält.

In folgendem Youtube-Video zeige ich die unterschiedliche Möglichkeiten Excel-Zellen zu sortieren:

Suchen

Das Suchen in Zellen ist sehr wichtig. In diesem Abschnitt zeige ich unterschiedliche Möglichkeiten.

Die Excel-Suche aufrufen

Mit der Tastenkombination Strg + f ist es möglich, das Suchfenster von Excel aufzurufen. Dies kann auch mit Excel VBA simuliert werden. Das zeigt folgender Code:

Sub suchen_mit_excel_funktion()
  Worksheets("Tabelle 1").Select
  Range("A1").Select
  Application.SendKeys ("^f"), True
End Sub

Als Erstes wird das Tabellenblatt „Tabelle 1“ selektiert. Danach wird die Excel-Zelle A1 selektiert. Dann wird die Methode Sendkeys des Application-Objekt aufgerufen. Das Problem ist, wenn dieser Code im Editor aufgerufen wird, kann nur im Editor und nicht in der Excel-Arbeitsmappe gesucht werden. Damit die Suche in der Excel-Arbeitsmappe aufgerufen werden kann, kann wie folgt vorgegangen werden:

  • Band Entwickler-Tools aktivieren
  • Schalter Makros anklicken oder Tastenkombination Alt + F8 ausführen
  • Das Makro „suchen_mit_excel_funktion“ auswählen per Maus oder Tastatur
  • Rechts oben den Schalter „Ausführen“ aktivieren.

Jetzt wird das Makro ausgeführt.

Suchen mit Find

Das Range-Objekt hat eine Methode Find. Mit dieser kann auch gesucht werden. Es folgt ein einfaches Beispiel:


Sub suchen_mit_find()
 Dim gefunden As Range
 Set gefunden = Range("A1:C4").Find(what:="Ute")
 Cells(gefunden.Row, gefunden.Column).Interior.ColorIndex = 6
End Sub

Erklärung zum Excel VBA Code

Mit Dim wird eine Variable gefunden deklariert, die vom Typ Range ist. Mit Range(„A1:C4“) wird der Bereich festgelegt, in dem gesucht wird. Die Methode Find hat einen Parameter what. hier wird anggeben nach welchem Suchbegriff gesucht wird. Wenn es den Suchbegriff gibt, wird mit der Methode Cells, dafür gesorgt, dass die Zelle in der sich der Suchbegriff befindet eine Gelbe Hintergrundfarbe bekommt. Interior ist die Hintergrundfarbe und ColorIndex = 6 ist die Farbe Gelb.

Suchen mit Autofilter

Was ist ein Filter in Excel? Stellen Sie sich vor, Sie haben eine Exceltabelle mit Adressen. Die Exceltabelle hat die Spalten Vorname, Nachname, Strasse, Postleitzahl, Ort. Sie möchten jetzt, dass nur die Excel-Zeile angezeigt wird in welcher in der Spalte Nachname „Lemcke“ steht. Diese Aufgabe löst man in Excel über einen Filter. Wenn Sie in Ihrer Excel-Tabelle mehrere Personen eingetragen haben, die den Nachnamen „Lemcke“ besitzen, dann werden alle Excelzeilen angezeigt in denen in der Spalte Nachname „Lemcke“ eingetragen ist. Sie können auch in mehreren Spalten einen Filter setzen. Sie können einen Filter setzen der alle Excel-Zeilen anzeigt in denen in der Spalte Vorname „Markus“ eingetragen ist und in der Spalte Nachname „Lemcke“ eingetragen ist. Wenn Sie mit Excel VBA professionelle Anwendungen entwickeln möchten, dann müssen Sie Autofilter verstehen. Deswegen gibt es über dieses Thema noch ein eigenes Video und im Blogartikel einen eigenen Abschnitt.


Sub autofilter_setzen_loeschen()
  Worksheets("Tabelle1").Range("A1").autofilter
End Sub

Erklärung zum Excel VBA Befehle

Worksheets(„Tabelle1“) legt fest, dass auf das Arbeitsblatt Tabelle1 zugegriffen wird. Range(„A1“) legt einen Bereich fest. .autofilter aktiviert den Autofilter. Aber nicht nur für Spalte A, sondern für alle Spalten in denen in Zeile 1 etwas eingetragen ist. Ob das „Etwas“ ein Text, eine Zahl Text und Zahlen ist, das ist egal. Wenn Sie obige Prozedur zum zweiten Mal aufrufen, wird der Autofilter wieder gelöscht.

In folgendem Youtube-Video erkläre ich die unterschiedlichen Möglichkeiten mit Excel VBA in Zelle zu suchen:

Suchen mit Autofilter

Was ist ein Filter in Excel? Stellen Sie sich vor, Sie haben eine Exceltabelle mit Adressen. Die Exceltabelle hat die Spalten Vorname, Nachname, Strasse, Postleitzahl, Ort. Sie möchten jetzt, dass nur die Excel-Zeile angezeigt wird in welcher in der Spalte Nachname „Lemcke“ steht. Diese Aufgabe löst man in Excel über einen Filter. Wenn Sie in Ihrer Excel-Tabelle mehrere Personen eingetragen haben, die den Nachnamen „Lemcke“ besitzen, dann werden alle Excelzeilen angezeigt in denen in der Spalte Nachname „Lemcke“ eingetragen ist. Sie können auch in mehreren Spalten einen Filter setzen. Sie können einen Filter setzen der alle Excel-Zeilen anzeigt in denen in der Spalte Vorname „Markus“ eingetragen ist und in der Spalte Nachname „Lemcke“ eingetragen ist. Wenn Sie mit Excel VBA professionelle Anwendungen entwickeln möchten, dann müssen Sie Autofilter verstehen. Deswegen gibt es über dieses Thema noch ein eigenes Video und im Blogartikel einen eigenen Abschnitt. Damit Ihnen das Nachprogrammieren Spaß macht, bereiten wir erst die Tabelle vor:


Private Sub tabelle_befuellen()
  Range("A1").Value = "Nummer"
  Range("B1").Value = "Vorname"
  Range("C1").Value = "Nachname"
  Range("A2").Value = 3
  Range("B2").Value = "Ute"
  Range("C2").Value = "Diegute"
  Range("A3").Value = 1
  Range("B3").Value = "Markus"
  Range("C3").Value = "Musterbau"
  Range("A4").Value = 2
  Range("B4").Value = "Annette"
  Range("C4").Value = "Musterbau"
  Range("E1").Value = "Suchwert für Nachname"
  Range("A1:D1").Font.Bold = True
  Range("A1:D4").Font.Size = 12
  Range("A1:D4").Font.Name = "Arial"
  Range("A1:E1").EntireColumn.AutoFit
End Sub

Erklärung zum Excel VBA Code

Ich habe diesen Code im Objekt „DieseArbeitsmappe“ gespeichert. Mit Taste F5 können Sie in ausführen und schon stehen Daten in Ihrer Excel-Tabelle. Der obige Code trägt Daten in Excel-Zellen ein. Aktiviert in den Zellen A1 bis D1 den Fettdruck. Setzt in den Zellen A1 bis D4 die Schriftgröße 12. Setzt in den Zellen A1 bis D4 die Schriftart Arial. Setzt die optimale Spaltenbreite für die Spalten A bis E. Legen Sie ein Modul „AutoFilter“ an. Menü „Einfügen“, „Modul“. Eingefügtes Modul markieren und im Eigenschaften-Fenster umbenennen.


Sub filtern_nach_wert(ByVal filterWert As String)
    Dim personenSheet As Worksheet
    Dim lastRow As Long
    Set personenSheet = ActiveSheet
    lastRow = personenSheet.Cells(Rows.Count, "B").End(xlUp).Row
    personenSheet.AutoFilterMode = False
    personenSheet.Range("A1:C" & lastRow).autofilter Field:=3, Criteria1:=filterWert
End Sub

Erklärung zum Excel VBA Befehle

Die Prozedur FilternNachWert hat einen Parameter: ByVal filterWert As String Das bedeutet, der Prozedur muss beim Aufruf ein Wert vom Typ String mitgeben werden. Beispiel: FilternNachWert („Musterbau“) Mit Dim wird eine Variable personenSheet vom Typ Worksheet deklariert. Mit Dim wird eine Variable lastRow vom Typ Long deklariert. Mit Set personenSheet = ActiveSheet speichern wird das aktive Tabellenblatt auf die Variable personenSheet gespeichert. End(xlUp).Row wird gerne verwendet um die letzte Excel-Zeile herauszufinden in der Text oder Zahlen stehen. lastRow = personenSheet.Cells(Rows.Count, „B“).End(xlUp).Row speichert in der Variable lastRow die Zeilennummer von der letzten Excel-Zeile in der was steht. personenSheet.AutoFilterMode = False deaktiviert den Autofilter personenSheet.Range(„A1:C“ & lastRow).autofilter Field:=3, Criteria1:=filterWert setzt den Autofilter für den Bereich A1 bis C& lastRow in Spalte C. Suchkriterium für den Autofilter ist der Parameter filterWert der Prozedur FilternNachWert.


Sub autofilter_mit_paremter()
  filtern_nach_wert ("Musterbau")
End Sub

Erklärung zum Excel VBA Code

Die Prozedur autofilter_mit_paremter hat nur den Zweck, zu zeigen wie die Prozedur filtern_nach_wert aufgerufen wird. Der Aufruf filtern_nach_wert („Musterbau“) filtert die Spalte C nach dem Wert „Musterbau“. Das bedeutet, nach Aufruf der Prozedur filtern_nach_wert werden nur Excel-Zeilen angezeigt in denen in Spalte C der Wert Musterbau eingetragen wurde. Folgender Aufruf ist ebenso erfolgreich:


Sub autofilter_mit_paremter()
  filtern_nach_wert ("Diegute")
End Sub

Erklärung zum Excel VBA Befehle

Es werden alle Excel-Zeilen angezeigt in denen in Spalte C der Wert Diegute eingetragen wurde.


Sub AutofilterAufheben()
    Dim addressSheet As Worksheet
    Set addressSheet = ActiveSheet
    If addressSheet.FilterMode = True Then
        addressSheet.ShowAllData
    End If
End Sub

Erklärung zum Excel VBA Code

Damit wieder die ganze Excel-Tabelle angezeigt wird, muss der Autofilter aufgehoben werden. Die Prozedur AutofilterAufheben zeigt wie dies programmiert werden kann. Dim addressSheet As Worksheet deklariert eine Variable addressSheet vom Typ Worksheet. Worksheet ist das Arbeitsblatt. Set addressSheet = ActiveSheet weist der Variable addressSheet als Wert das aktive Arbeitsblatt zu. If addressSheet.FilterMode = True Then fragt ab ob bei addressSheet ein Filter gesetzt ist. addressSheet.ShowAllData Wenn ein Filter gesetzt ist, wird dieser aufgehoben und es werden alle Excel-Zeilen wieder angezeigt. Diese Vorgehensweise, erst abfragen ob ein Filter gesetzt ist und wenn ja, dann mit ShowAllData alle Excel-Zeilen anzeigen funktioniert bei allen Filtern.

In diesem Video erkläre ich alles wichtige zum Thema Autofilter:

VBA-Programm: Taschenrechner

Genug der grauen Theorie. Jetzt programmeren wir mit Excel VBA einen sehr einfachen Taschenrechner, also ein richtiges Programm. Die Programmierung dieses Taschenrechners ist sehr einfach gehalten. Später werden wir noch einen richtigen Taschenrechner programmieren. Der Taschenrechner benötigt 4 Excel-Zellen. A1 und C1 für die beiden Zahlen. B1 für den Rechenoperator. D1 für die Anzeige des Rechenergebnisses. Der Taschenrechner beherscht nur die Grundrechenarten: Plus, Minus, Mal und geteilt.

Sie machen im Fenster VBAProject einen Doppeklick auf DieseArbeitsmappe oder Sie markieren DieseArbeitsmappe per Tastatur und drücken danach die Taste „Enter“. Jetzt tippen Sie folgenden Excel VBA-Code rechts ins Codefenster:


Private Sub Workbook_Open()
  Range("A1").Value = "Zahl 1"
  Range("B1").Value = "Rechenoperator"
  Range("C1").Value = "Zahl 2"
  Range("D1").Value = "Ergebnis"

  Range("A1:D1").Font.Bold = True
  Range("A1:D1").Font.Size = 14
  Range("A1:D1").Font.Name = "Arial"
  
  Range("A2:D2").Font.Size = 14
  Range("A2:D2").Font.Name = "Arial"
  Range("A2:D2").HorizontalAlignment = xlCenter
  Range("A1:D1").EntireColumn.AutoFit
  
  Range("A2").Select
End Sub

Speichern Sie die Excel-Arbeitsmappe. Das Ereignis Workbook_Open() wird erst ausgeführt, wenn Sie die Excel-Arbeitsmappe geschlossen und wieder geöffnet haben.

Erklärung zum Excel VBA Code

In den ersten 4 Zeilen wird mit Range eine einzelne Zelle ausgewählt und dann mit der Eigenschaft Value ein Text in die Zelle eingetragen. Mit Font.Bold wird in den Zellen A1 bis D1 Fettdruck aktiviert. Mit Font.Size = 14 wird in den Zellen von A1 bis D2 die Schriftgröße auf 14 gesetzt. Mit Font.Name wird in den Zellen von A1 bis D2 die Schriftart „Arial“ gesetzt. Mit EntireColumn.AutoFit wird die Spaltenbreite optimal angepasst.

Wie funktioniert dieser Taschenrechner

Um den Taschenrechner zu programmieren wird das Ereignis SelectionChange des Arbeitsblattes verwendet. Immer wenn eine andere Excel-Zelle markiert wird, wird geprüft ob in den Zellen A2 und C2 eine Zahl ist und ob in Zelle B2 ein Rechenoperator ist. Wenn alle 3 Bedingungen erfüllt sind, wird geprüft welcher Rechenoperator ( +-*/ ) in Excel-Zelle B2 eingetragen wurde. Je nach Rechenoperator wird die entsprechende Rechnung durchgführt und das Ergebnis der Rechnung wird in Excel-Zelle D2 eingetragen.

Anleitung für das Ereignis Worksheet_SelectionChange

Sie machen jetzt im Fenster VBAProject einen Doppeklick auf Tabelle1. Alternativ markieren Sie Tabelle1 und drücken die Taste „Enter“. Schreiben Sie folgenden VBA-Code ins Codefenster:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Dim allowedSymbols As String
   allowedSymbols = "+-*/:"
   
   If IsNumeric(Range("A2").Value) And IsNumeric(Range("C2").Value) And InStr(allowedSymbols, Range("B2").Value) > 0 Then
     If Range("B2").Value = "+" Then
       Range("D2").Value = Range("A2").Value + Range("C2").Value
     ElseIf Range("B2").Value = "-" Then
       Range("D2").Value = Range("A2").Value - Range("C2").Value
     ElseIf Range("B2").Value = "*" Then
       Range("D2").Value = Range("A2").Value * Range("C2").Value
     ElseIf Range("B2").Value = "/" Then
       Range("D2").Value = Range("A2").Value / Range("C2").Value
     ElseIf Range("B2").Value = ":" Then
       Range("D2").Value = Range("A2").Value / Range("C2").Value
     End If
   End If
End Sub

Erklärung zum Excel VBA Befehle

Dim allowedSymbols As String deklariert die Variable allowedSymbols vom Typ String. String ist eine Zeichenkette.

allowedSymbols = „+-*/:“ speichert die 4 Rechenoperatoren auf die Variable allowedSymbols.

IsNumeric(Range(„A2“).Value und IsNumeric(Range(„C2“).Value überprüfen ob in den Excel-Zellen A2 und C2 Zahlen eingetragen wurden.

InStr(allowedSymbols, Range(„B2“).Value) > 0 überprüft ob in Excel-Zelle B2 ein Rechenoperator eingetragen wurde.

If IsNumeric(Range(„A2“).Value) And IsNumeric(Range(„C2“).Value) And InStr(allowedSymbols, Range(„B2“).Value) > 0 Then. Wenn in Zelle A2 und C2 eine Zahl eingetragen wurde und in Zelle B2 ein Rechenoperator eingetragen, dann wird überprüft welche Rechenoperation durchgeführt werden muss.

If Range(„B2“).Value = „+“ Then Range(„D2“).Value = Range(„A2“).Value + Range(„C2“).Value Wenn in Excel-Zelle B2 ein + eingetragen wurde, wird in Excel-Zelle D2 das Ergebnis von A2 + C2 eingetragen.

ElseIf Range(„B2“).Value = „-“ Then Range(„D2“).Value = Range(„A2“).Value – Range(„C2“).Value Sonst wenn in Excel-Zelle B2 ein – eingetragen wurde, wird in Excel-Zelle D2 das Ergebnis von A2 – C2 eingetragen.

ElseIf Range(„B2“).Value = „*“ Then Range(„D2“).Value = Range(„A2“).Value * Range(„C2“).Value Sonst wenn in Excel-Zelle B2 ein * eingetragen wurde, wird in Excel-Zelle D2 das Ergebnis von A2 * C2 eingetragen.

ElseIf Range(„B2“).Value = „:“ Then Range(„D2“).Value = Range(„A2“).Value / Range(„C2“).Value Sonst wenn in Excel-Zelle B2 ein : eingetragen wurde, wird in Excel-Zelle D2 das Ergebnis von A2 / C2 eingetragen.

Taschenrechner testen

Speichern Sie die Excel Arbeitsmappe. Schließen Sie die Excel Arbeitsmappe und öffnen Sie diese wieder. In der Zelle A1 sollte das Wort „Zahl 1“ stehen. In Zelle B1 das Wort „Rechenoperator“. In Zelle C1 das Wort „Zahl 2“ und in Zelle D1 das Wort „Ergebnis“.

Geben Sie in Zelle A2 die Zahl 5 ein.
Geben Sie in Zelle B2 das Zeichen * ein und bestätigen Sie die Eingabe mit der Taste Enter.
Geben Sie in Zelle C2 die Zahl 5 ein.
Jetzt sollte in Zelle D2 die Zahl 25 stehen. Gratulation! Sie haben mit Excel VBA einen Taschenrechner programmiert.

Variablen – Was ist das eigentlich?

Variablen sind bei der Programmierung von Software sehr wichtig. Eine Variable ist ein Speicherplatz mit Namen.
Eine Variable kann unterschiedliche Datentypen haben.
Es folgen Codebeispiele wie Sie in Excel-VBA Variablen deklarieren
und den Inhalt einer Variablen einer Excelzelle zuweisen:

Variablen „anlegen“ bzw. deklarieren

Um eine Variable zu deklaren benötigen Sie den VBA-Befehl Dim. Sie müssen auch angeben welchen Datentyp die Variable hat. Hier ein Codebeispiel:


Dim l As Long

Erklärung zum Excel VBA Code

Der Excel VBA-Befehl Dim wird verwendet um eine Variable zu deklarieren. l ist der Name der Variable. Den Namen können Sie frei wählen. Variablen die öfters in Ihrem Programm auftauchen sollten Sie sprechende Namen geben. Beispiel:


Dim letze_zeile As Long

Ich verwende in diesem Abschnitt kurze Namen, weil die Variablennamen etwas aussagen sollen über den Typ der Variablen.

Datentypen um Zahlen auf Variablen zu speichern

  • Integer
  • Long
  • Single
  • Double

Warum soviele Datentypen? Als die Programmierung begonnen hat, war Speicherplatz immer knapp! Es gab noch keine Computer mit 16 GigaByte Hauptspeicher, sondern es gab Computer mit 2-4 MegaByte Hauptspeicher. Deswegen haben die Erfinder von Programmiersprachen beschlossen, dass bei Variablen Datentypen gibt die weniger Speicherplatz benötigen als andere. Der Hauptunterschied der oben aufgelisteten Datentypen ist: Integer und Long ist für die Speicherung von ganzen Zahlen. Single und Double ist für die Speicherung von Dezimalzahlen. Hier nun Codebeispiele für jeden Zahlentyp:


Dim l As Long
l = 1000000
ActiveSheet.Range("A2").Value = l
Range("A1").EntireColumn.AutoFit

Erklärung zum Excel VBA Code

Mit Dim wird eine Variable l deklariert vom Typ Long. Anschließend mit auf dem aktiven Arbeitsblatt (=ActiveSheet) in die Zelle A2 der Wert bzw. der Inhalt der Variable l eintragen. Mit EntireColumn.AutoFit wird dafür gesorgt, dass Spalte A so breit ist, dass die Zahl vollständig dargestellt wird.


Dim s As Single
s = 3.14159
ActiveSheet.Range("A3").Value = s
Range("A1").EntireColumn.AutoFit

Erklärung zum Excel VBA Befehle

Mit Dim wird eine Variable s deklariert vom Typ Single. Anschließend mit auf dem aktiven Arbeitsblatt (=ActiveSheet) in die Zelle A3 der Wert bzw. der Inhalt der Variable s eintragen. Mit EntireColumn.AutoFit wird dafür gesorgt, dass Spalte A so breit ist, dass die Zahl vollständig dargestellt wird.


Dim d As Double
d = 3.14159265358979
ActiveSheet.Range("A4").Value = d
Range("A1").EntireColumn.AutoFit

Erklärung zum Excel VBA Code

Mit Dim wird eine Variable d deklariert vom Typ Double. Anschließend mit auf dem aktiven Arbeitsblatt (=ActiveSheet) in die Zelle A4 der Wert bzw. der Inhalt der Variable d eintragen. Mit EntireColumn.AutoFit wird dafür gesorgt, dass Spalte A so breit ist, dass die Zahl vollständig dargestellt wird.

Datentyp um Zeichenketten auf Variablen zu speichern

Eine Zeichenkette kann aus Buchstaben, Zahlen und Sonderzeichen bestehen. Hier ein Codebeispiel:


Dim str As String
str = "Hello World"
ActiveSheet.Range("A5").Value = str
Range("A1").EntireColumn.AutoFit

Erklärung zum Excel VBA Befehle

Mit Dim wird eine Variable str deklariert vom Typ String. Anschließend mit auf dem aktiven Arbeitsblatt (=ActiveSheet) in die Zelle A5 der Wert bzw. der Inhalt der Variable str eintragen. Mit EntireColumn.AutoFit wird dafür gesorgt, dass Spalte A so breit ist, dass der String vollständig dargestellt wird.

Datentyp um Wahrheitswerte auf Variablen zu speichern

Ein Wahrheitswert kann falsch oder wahr sein. In Englisch False oder True. Hier ein Codebeispiel:


Dim b As Boolean
b = True
ActiveSheet.Range("A6").Value = b
Range("A1").EntireColumn.AutoFit

Erklärung zum Excel VBA Code

Mit Dim wird eine Variable str deklariert vom Typ Boolean. Anschließend mit auf dem aktiven Arbeitsblatt (=ActiveSheet) in die Zelle A6 der Wert der Variable b eintragen. Mit EntireColumn.AutoFit wird dafür gesorgt, dass Spalte A so breit ist, dass die Wahrheitswert vollständig dargestellt wird.

Datentyp um Datumswerte auf Variablen zu speichern

Wenn Sie ein Datum auf eine Variable speichern möchten, sehen Sie hier, wie das gemacht werden kann:


Dim dt As Date
dt = DateSerial(2023, 3, 7)
ActiveSheet.Range("A7").Value = dt
Range("A1").EntireColumn.AutoFit

Erklärung zum Excel VBA Code

Mit Dim wird eine Variable str deklariert vom Typ Date. DateSerial gibt einen Variant-Wert (Date) für ein bestimmtes Jahr, einen bestimmten Monat und einen bestimmten Tag zurück. Anschließend mit auf dem aktiven Arbeitsblatt (=ActiveSheet) in die Zelle A7 der Wert der Variable dt eintragen. Mit EntireColumn.AutoFit wird dafür gesorgt, dass Spalte A so breit ist, dass die Datumswert vollständig dargestellt wird.

Datentyp um alle Datentypen auf Variablen zu speichern

Der Datentyp Variant ist der Datentyp für alle Variablen, die nicht explizit als anderer Typ deklariert werden (mit Anweisungen wie Dim, Private, Public oder Static). Der Einsatz von Variant hat Nachteile, deswegen sollten Sie ihn möglichst vermeiden. wie das gemacht werden kann:


Dim v As Variant
v = "Hello World"
ActiveSheet.Range("A8").Value = v
Range("A1").EntireColumn.AutoFit

Erklärung zum Excel VBA Code

Mit Dim wird eine Variable str deklariert vom Typ Variant. Anschließend mit auf dem aktiven Arbeitsblatt (=ActiveSheet) in die Zelle A8 der Wert der Variable v eintragen. Mit EntireColumn.AutoFit wird dafür gesorgt, dass Spalte A so breit ist, dass die Datumswert vollständig dargestellt wird.

Die If-Abfrage

Programme laufen nie von oben nach unten durch. Bei der Programmierung ist es wichtig das Programme Entscheidungen treffen können. Eine Möglichkeit dies zu tun, ist die If-Abfrage. Mit If beginnt die If-Abfrage. End If beendet eine If-Abfrage. Nach Then folgenden die Anweisungen, die ausgeführt werden sollen, wenn die Bedingung nach If wahr, also True ist. Nach Else können Anweisungen folgenden die ausgeführt werden, wenn die If-Bedingung nicht wahr ist. Mit ElseIf kann eine neue Bedingung festgelegt werden, wenn die vorherige Bedingung nicht zu trifft.

Die einseitige If-Abfrage


Sub wie_alt_bist_du_einseitig()
    Dim alter As Integer
    alter = 19 'Beispielwert für das Alter'
    If alter > 18 Then
        MsgBox "Die Person ist volljährig."
    End If
End Sub

Erklärung zum Excel VBA Befehle

Mit Dim wird eine Variable alter vom Typ Integer deklariert. Integer ist eine ganze Zahl.
Der Variable alter wird der Wert 19 zugewiesen. Der Text in ‚ ist ein VBA-Kommentar.
If alter > 18 Then überprüft über der Wert der Variable alter größer ist, als 18.
MsgBox „Die Person ist volljährig.“ zeigt ein Meldungsfenster an mit dem Text Die Person ist volljährig.
End If beendet die If-Abfrage.

Auf den Punkt gebracht: Der obige Code fragt ab, ob der Wert der Variable alter größer ist wie 18. Wenn ja, wird eine Meldung angezeigt: Die Person ist volljährig.

Die zweiseitige If-Abfrage


Sub wie_alt_bist_du_zweiseitig()
    Dim alter As Integer
    alter = 17 'Beispielwert für das Alter'
    If alter > 18 Then
        MsgBox "Die Person ist volljährig."
    Else
        MsgBox "Die Person ist minderjährig."
    End If
End Sub

Erklärung zum Excel VBA Code

Mit Dim wird eine Variable alter vom Typ Integer deklariert. Integer ist eine ganze Zahl.
Der Variable alter wird der Wert 17 zugewiesen. Der Text in ‚ ist ein VBA-Kommentar.
If alter > 18 Then überprüft über der Wert der Variable alter größer ist, als 18.
MsgBox „Die Person ist volljährig.“ zeigt ein Meldungsfenster an mit dem Text
Else wenn der Wert der Variable alter nicht größer als 18 ist, wird der Text „Die Person ist minderjährig.“ angezeigt. End If beendet die If-Bedingung.

Auf den Punkt gebracht: Der obige Code fragt ab, ob der Wert der Variable alter größer ist wie 18. Wenn ja, wird eine Meldung angezeigt: Die Person ist volljährig. Wenn der Wert der Variable nicht größer ist als 18, wird eine Meldung angezeigt: Die Person ist minderjährig.

Die mehrstufige If-Abfrage


Sub wie_alt_bist_du_mehrstufig()
    Dim alter As Integer
    alter = 19 'Beispielwert für das Alter'
    If alter > 18 Then
        MsgBox "Die Person ist volljährig."
    ElseIf alter = 18 Then
        MsgBox "Die Person ist gerade volljährig geworden."
    Else
        MsgBox "Die Person ist minderjährig."
    End If
End Sub

Erklärung zum Excel VBA Code

Mit Dim wird eine Variable alter vom Typ Integer deklariert. Integer ist eine ganze Zahl.
Der Variable alter wird der Wert 19 zugewiesen. Der Text „Beispielwert für das Alter“ ist ein VBA-Kommentar.

If alter > 18 Then überprüft über der Wert der Variable alter größer ist, als 18.
MsgBox „Die Person ist volljährig.“ zeigt ein Meldungsfenster an mit dem Text
Mit ElseIf alter = 18 Then wird überprüft ob die Variable alter den Wert 18 hat. Wenn ja, wird der Text „Die Person ist gerade volljährig geworden.“ angezeigt. Else wenn der Wert der Variable alter nicht größer als 18 und nicht gleich 18 ist, wird der Text „Die Person ist minderjährig.“ angezeigt. End If beendet die If-Bedingung.

Auf den Punkt gebracht: Der obige Code fragt ab, ob der Wert der Variable alter größer ist wie 18. Wenn ja, wird eine Meldung angezeigt: Die Person ist volljährig. Wenn der Wert der Variable gleich 18, wird eine Meldung angezeigt: Die Person ist gerade volljährig geworden. Ansonsten wird eine Meldung angezeigt: Die Person ist minderjährig

In diesem Video erkläre ich die If-Abfrage mit Excel VBA:

Select Case

Mit Select Case können Sie abfragen ob ein bestimmter Ausdruck oder eine Variable einen bestimmten Wert hat.


Sub wie_alt_bist_du()
Dim alter As Integer
alter = 19 'Beispielwert für das Alter'

Select Case alter
    Case Is < 18
        MsgBox "Die Person ist minderjährig."
    Case 18
        MsgBox "Die Person ist gerade volljährig geworden."
    Case Else
        MsgBox "Die Person ist volljährig."
End Select
End Sub

Erklärung zum Excel VBA Code

Dim alter As Integer Es wird eine Variable vom Typ Integer deklariert. Integer ist eine ganze Zahl.
Select Case alter legt fest, dass die Variable alter auf unterschiedliche Werte überprüft wird. Case Is < 18 Überprüft ob der Wert der Variable alter kleiner ist als 18 MsgBox „Die Person ist minderjährig.“. Wenn das der Fall ist, wird diese Meldung angezeigt.
Case 18 Überprüft ob der Wert der Variable alter gleich 18 ist.
Case Else Wenn obige Bedingungen nicht zu treffen wird die Meldung
„Die Person ist volljährig.“ angezeigt.
Nochmal kurz zusammengefasst:
Mit Select Case wird überprüft welchen Wert die Variable alter hat. Je nach Wert wird
eine bestimmte Meldung angezeigt.

In diesem Video erkläre ich die Select Case Anweisung:

Schleife beim Programmieren – Was ist das?

Was ist eine Schleife? Eine Schleife sorgt dafür, das bestimmter Code-Zeilen mehrfach ausgeführt wird. Warum macht dies Sinn? Folgendes Codebeispiel:


Sub a1a7()
    MsgBox "Der Wert der Zelle A1" & " ist " & ActiveSheet.Range("A1").Value
    MsgBox "Der Wert der Zelle A2" & " ist " & ActiveSheet.Range("A2").Value
    MsgBox "Der Wert der Zelle A3" & " ist " & ActiveSheet.Range("A3").Value
    MsgBox "Der Wert der Zelle A4" & " ist " & ActiveSheet.Range("A4").Value
    MsgBox "Der Wert der Zelle A5" & " ist " & ActiveSheet.Range("A5").Value
    MsgBox "Der Wert der Zelle A6" & " ist " & ActiveSheet.Range("A6").Value
    MsgBox "Der Wert der Zelle A7" & " ist " & ActiveSheet.Range("A7").Value
End Sub

Erklärung zum Excel VBA Code

Mit MsgBox wird ein Fenster angezeigt in dem Text enthalten ist und ein Schalter „OK“. ActiveSheet.Range(„A1“).Value gibt den Inhalt der Zelle A1 zurück. Dies wiederholt sich für die Zellen A2 bis A7. Auf den Punkt gebracht: Der Code gibt die Zellinhalte von A1 bis A7 zurück. Puh … ganz schön viel zu tippen … Programmieren ist anstrengend!

Hier das Video zum Thema „Schleife beim Programmieren – Was ist das?“:

Die For … Next Schleife

Nein, Programmieren ist nicht anstrengend. Die For … Next Schleife löst obiges Problem. Die nachfolgende For-Schleife macht genau das gleiche wie die Prozedur Sub a1a7().


Sub fornext()
Dim i As Integer
For i = 1 To 7
    MsgBox "Der Wert der Zelle A" & i & " ist " & ActiveSheet.Range("A" & i).Value
Next i
End Sub

Erklärung zum Excel VBA Befehle

Mit Dim wird eine Variable i vom Typ Integer angelegt. Integer ist eine ganze Zahl. For i = 1 To 7 bedeutet, der nachfolgende Code wird so oft ausgeführt bis die Variable i den Wert 7 hat. MsgBox „Der Wert der Zelle A“ & i & “ ist “ & ActiveSheet.Range(„A“ & i).Value Zeigt den Inhalt der jeweiligen Zelle in einer MsgBox an.

Für Programmieranfänger ist dieser Code nicht einfach zu verstehen:
ActiveSheet.Range(„A“ & i).Value
Wenn ich i = 1 ist, dann steht hier:
ActiveSheet.Range(„A1“).Value

Wenn ich i = 2 ist, dann steht hier:
ActiveSheet.Range(„A2“).Value

Wenn ich i = 3 ist, dann steht hier:
ActiveSheet.Range(„A3“).Value
usw.

Next i . Zählt i um 1 nach oben.
i hat beim ersten Schleifen den Wert 1. Nach dem Aufruf von Next i hat i den Wert 2 usw.

Der Vorteil von Schleifen an einem Beispiel

Angenommen Sie möchten den Zelleninhalt der Zellen A1 bis 20 mit einer Messagebox ausgeben, dann funktioniert folgender Code:


Sub fornext()
Dim i As Integer
For i = 1 To 20
    MsgBox "Der Wert der Zelle A" & i & " ist " & ActiveSheet.Range("A" & i).Value
Next i
End Sub

Was hat sich geändert?
For i = 1 To 20 . Statt wie oben 7 steht nach To 20.
Das ist alles!
Mit Schleifen sparen Sie richtig viel Tipparbeit.

In diesem Video erkläre ich die For Next Schleife:

Die For Each Schleife

Für Objektauflistungen gibt es in Excel VBA die For Each-Schleife. Hier legt die vorhandene Anzahl der Objekte die Anzahl der Wiederholungen fest.


Sub ForEach()
    Dim cell As Range
    For Each cell In Range("A1:A7")
        MsgBox "Der Wert der Zelle " & cell.Address & " ist " & cell.Value
    Next cell
End Sub

Erklärung zum Excel VBA Code

Zunächst das wichtigste: Diese For Each Schleife macht ganz genau das gleiche wie die For Next Schleife. Sie zeigt den Inhalt der Excel-Zellen A1 bis A7 in einer Messagebox an. Dim cell As Range deklariert eine Variable cell vom Typ Range.
For Each cell In Range(„A1:A7“) Die Schleife durchläuft den Bereich A1 bis A7 und speichert die einzelnen Excel-Zellen auf die Variable cell.
cell.Address gibt die Adresse der Zelle an. Zum Beispiel „$A$1“.
cell.Value gibt den Inhalt der Excel-Zelle an. Zum Beispiel: „A1“.
Next cell speichert die nächste Excel-Zelle auf die Variable cell.

In diesem Video erkläre ich die For Each Schleife:

Die Do While Schleife

Bei der Do While Schleife, soll eine bestimmte Befehlsfolge so lange ausgeführt werden, wie eine bestimmte Bedingung erfüllt ist.


Sub do_while_loop()
    Dim i As Integer
    i = 1
    Do While i <= 7
      MsgBox "Der Wert der Zelle A" & i & " ist " & ActiveSheet.Range("A" & i).Value
      i = i + 1
    Loop
End Sub

Erklärung zum Excel VBA Code

Dim i As Integer eine Variable i vom Typ Integer wird deklariert.
Integer ist eine ganze Zahl.
i = 1 Der Variable i wird der Wert 1 zugewiesen.
Do While i <= 7 So lange i kleiner oder gleich 7 ist, führe folgenden Code aus.
MsgBox „Der Wert der Zelle A“ & i & “ ist “ & ActiveSheet.Range(„A“ & i).Value Zeigt eine Meldung an.
A“ & i & „ gibt die Adresse der Zelle an.
ActiveSheet.Range(„A“ & i).Value zeigt den Inhalt der Zelle an.
i = i + 1 Erhöht den Wer der Variable i um 1.
Loop ruft auf zum nächsten Schleifendurchlauf.

In folgendem Video erkläre ich die Do While-Schleife:

Die With-Anweisung

Die With-Anweisung erlaubt es mehrere Eigenschaften eines Objektes in einer verkürzten Schreibweise nacheinander festzulegen. Damit Sie den Sinn der With-Anweisung verstehen, mache ich zwei Code-Beispiele. Einmal ohne With-Anweisung und einmal mit With-Anweisung.

Codebeispiel ohne With-Anweisung


Sub ohneWithBeispiel()
  ActiveSheet.Range("A1:A2").Font.name = "Arial"
  ActiveSheet.Range("A1:A2").Font.Size = 12
  ActiveSheet.Range("A1:A2").Font.Bold = False
  ActiveSheet.Range("A1:A2").Font.Underline = False
End Sub

Codebeispiel mit With-Anweisung


Sub mitWithBeispiel()
  With ActiveSheet.Range("A1:A2").Font
    .name = "Arial"
    .Size = 16
    .Bold = True
    .Underline = True
  End With
End Sub

Erklärung zum Excel VBA Befehle

ActiveSheet ist das aktive Arbeitsblatt.
Mit Range(„A1:A2“) wird der Bereich von Zelle A1 bis Zelle A2 festgelegt.
Mit Font.name wird die Schriftart gesetzt.
Mit Font.Size wird die Schriftgröße gesetzt.
Mit Font.Bold wird festgelegt Fettdruck Ja oder Nein.
Mit Font.Underline wird festgelegt ob ein Text unterstrichen werden soll oder nicht.

Die With-Anweisung sollten Sie immer dann verwenden, wenn Sie mehrere Eigenschaften eines Objektes festlegen möchten.

In diesem Video erkläre ich die With-Anweisung:

Prozeduren – Was ist das?

Wir haben jetzt sehr oft sub und einen Namen und () geschrieben ohne uns zu fragen was das ist. Zeit dies zu ändern. Sub ist eine Prozedur. Prozeduren werden benötigt um Excel VBA Code zu schreiben, der eine bestimmte Aufgabe erledigt. Der Vorteil von Prozeduren ist, wenn Sie eine Prozedur geschrieben haben, können Sie diese Prozedur beliebig oft in ihrem Excel VBA Programm aufrufen. Das spart Ihnen jede Menge Tipparbeit und macht Ihren Excel VBA Code übersichtlicher. Eine Prozedur darf auch Parameter besitzen. Parameter sind Werte die man beim Aufruf der Prozedur angeben kann und die innerhalb der Prozedur weiterverwendet werden.


Sub rechne(zahl1 As Integer, rechenoperator As String, zahl2 As Integer)
    Dim ergebnis As Double
    
    Select Case rechenoperator
        Case "+": ergebnis = zahl1 + zahl2
        Case "-": ergebnis = zahl1 - zahl2
        Case "*": ergebnis = zahl1 * zahl2
        Case "/": ergebnis = zahl1 / zahl2
    End Select
    
    ActiveSheet.Range("C7").Value = zahl1
    ActiveSheet.Range("D7").Value = rechenoperator
    ActiveSheet.Range("E7").Value = zahl2
    ActiveSheet.Range("F7").Value = "="
    ActiveSheet.Range("G7").Value = ergebnis
End Sub

Erklärung zum Excel VBA Code

Sub rechne ist eine Prozedur mit Parameter. Parameter sind Werte die Sie beim Aufruf einer Prozedur angeben können. Damit die Prozedur rechne unterschiedliche Rechenaufgaben lösen kann, hat sie 3 Parameter. Zahl1 ist die erste Zahl mit der gerechnet werden soll. Rechenoperator ist die Rechenoperatoren: + – * / . Was macht der obige Code?

Mit Select Case wird herausgefunden, welcher Rechenoperator in der Variable rechenoperator gespeichert ist. Danach wird die entsprechende Rechenaufgabe ausgeführt und das Ergebnis der Rechenaufgabe in die Variable ergebnis gespeichert. Anschließend wird Rechenaufgabe inklusive Rechenergebnis in die Excel-Zellen C7 bis G7 eingetragen.
Mit ActiveSheet.Range(„C7“).Value = zahl1 wird in Excel-Zelle C7 der Wert der Variable zahl1 eingetragen.
Mit ActiveSheet.Range(„D7“).Value = rechenoperator wird in Excel-Zelle D7 der Wert der Variable rechenoperator eingetragen.
Mit ActiveSheet.Range(„E7“).Value = zahl2 wird in Excel-Zelle E7 der Wert der Variable zahl2 eingetragen.
Mit ActiveSheet.Range(„F7“).Value = „=“ wird in Excel-Zelle F7 das = Zeichen eingetragen.
Mit ActiveSheet.Range(„G7“).Value = ergebnis wird in Excel-Zelle G7 der Wert der Variable ergebnis eingetragen.


Sub programm()
  rechne 5, "*", 5
  rechne 5, "/", 5
  rechne 5, "+", 5
  rechne 5, "-", 5
End Sub

Erklärung zum Excel VBA Code

Sub programm() ist auch eine Prozedur. Diese Prozedur hat keine Parameter. Es ist also möglich Prozeduren mit oder ohne Parameter zu erstellen. Die Prozedur programm ruft die Prozedur rechne 4 mal auf mit unterschiedlichen Rechenoperatoren. Das ich immer die Zahl 5 genommen habe ist nicht zwingend. Folgendes Funktioniert genauso:


Sub programm1()
  rechne 5, "*", 7
End Sub

oder:


Sub programm2()
  rechne 8, "*", 8
End Sub

Sie können die Prozedur rechne ganz flexibel einsetzen!

In folgendem Video erkläre ich was Prozeduren sind und warum diese wichtig sind:

Funktionen – Was ist das?

Die Grundidee einer Funktion ist die gleiche wie bei einer Prozedur: Sie können Excel VBA-Code schreiben, der eine bestimmte Aufgabe erledigt und diesen Code mit dem Namen der Funktion in Ihrem Programm beliebig aufrufen. Das spart Ihnen jede Menge Tipparbeit und macht Ihren Excel VBA Code übersichtlicher. Aber was ist nun der Unterschied zwischen einer Prozedur und einer Funktion? Die Prozedur rechne, löst eine Rechenaufgabe und schreibt das Ergebnis in die Excel-Zelle G7. Wenn ich nun möchte, dass das Ergebnis der Rechenaufgabe in der Excel-Zelle J7 eingetragen wird, muss ich den Excel-VBA-Code der Prozedur rechne ändern. Das ist sehr ungeschickt. Eine Funktion hat einen Rückgabewert. Sie gibt immer einen Wert zurück. Das bedeutet, die Funktion kann einen Wert nach Außen geben. Wenn wir rechne als Funktion schreiben, können wir das Rechenergebnis in jede beliebige Excel-Zelle eintragen ohne den Code der Funktion ändern zu müssen. Die zeigt folgendes Codebeispiel:


Function rechne(zahl1 As Double, rechenoperator As String, zahl2 As Double) As Double
    Select Case rechenoperator
        Case "+": rechne = zahl1 + zahl2
        Case "-": rechne = zahl1 - zahl2
        Case "*": rechne = zahl1 * zahl2
        Case "/": rechne = zahl1 / zahl2
        Case Else: rechne = Null 'Fehlerfall
    End Select
End Function

Erklärung zum Excel VBA Code

Function rechne ist eine Funktion mit Parameter. Parameter sind Werte die Sie beim Aufruf einer Funktion angeben können. Damit die Funktion rechne unterschiedliche Rechenaufgaben lösen kann, hat sie 3 Parameter. Zahl1 ist die erste Zahl mit der gerechnet werden soll. Rechenoperator ist die Rechenoperatoren: + – * / . Was macht der obige Code? Mit Select Case rechenoperator wird abgefragt welches Zeichen auf der Variable rechenoperator gespeichert ist. Das Eregbnis der Rechnung wird auf keine Variable gespeichert, sondern auf die Funktion. Dieses Speichern auf die Funktion sorgt dafür, dass der Rückgabewert der Funktion das Ergebnis der jeweiligen Rechnung ist.


Sub programm()
    ActiveSheet.Range("A7").Value = rechne(10, "+", 5)
    ActiveSheet.Range("B7").Value = rechne(10, "-", 5)
    ActiveSheet.Range("C7").Value = rechne(10, "*", 5)
    ActiveSheet.Range("D7").Value = rechne(10, "/", 5)
End Sub

Erklärung zum Excel VBA Code

Der Rückgabewert der Funktion Rechne wird in die Excel-Zellen A7 bis D7 eingetragen. Die Funktion rechne hat gegenüber der Prozedur rechne den Vorteil, dass das Ergebnis der durchgeführten Rechnung in jede Excel-Zelle eingetragen werden kann. Das ist ganz generell bei Funktionen so. Funktionen eignen sich perfekt dazu ein VBA-Script auszuführen und einen Rückgabewert in eine Excel-Zelle eintragen.

Zellen – Werte eintragen und lesen – Welche Methode ist die beste?

Es gibt unterschiedliche Methoden Werte in Excel-Zellen einzutragen und zu lesen. In diesem Abschnitt finden wir heraus welches die Beste Methode ist.


Sub zellen_leeren()
  Range("A1:C1").Clear
End Sub

Erklärung zum Excel VBA Code

Mit dieser Prozedur können Sie den Inhalt der Excel-Zellen A1 bis C1 immer wieder löschen. Die Methode Clear löscht den Zellinhalt und die Formatierung.

Methode 1: Mit der Methode Select


Sub schreiben_lesen_select()
  Range("A1").Select
  ActiveCell.Value = "Markus"
  Range("C1").Select
  ActiveCell.Value = Range("A1").Value
End Sub

Erklärung zum Excel VBA Code

Mit Range(„A1“).Select wird die Excel-Zelle A1 selektiert.
Mit ActiveCell.Value = „Markus“ wird der Text „Markus“ in die Excel-Zelle A1 eingetragen. ActiveCell ist die aktive bzw. gerade selektierte Excel-Zelle.
Mit Range(„C1“).Select wird die Excel-Zelle C1 selektiert.
Mit ActiveCell.Value = Range(„A1“).Value wird der Excel-Zelle C1 der Inhalt von der Excel-Zelle A1 zugewiesen. Das bedeutet, in der Excel-Zelle C1 steht das Wort „Markus“.

Methode 2: Mit der Methode Select und der Eigenschaft Offset


Sub schreiben_lesen_offset()
  Range("A1").Select
  ActiveCell.Value = "Markus"
  Range("A1").Offset(0, 2).Select
  ActiveCell.Value = Range("A1").Value
End Sub

Erklärung zum Excel VBA Code

Mit Range(„A1“).Select wird die Excel-Zelle A1 selektiert.
Mit ActiveCell.Value = „Markus“ wird der Text „Markus“ in die Excel-Zelle A1 eingetragen. ActiveCell ist die aktive bzw. gerade selektierte Excel-Zelle.
Mit Range(„A1“).Offset(0, 2).Select wird die Excel-Zelle C1 selektiert.
Mit ActiveCell.Value = Range(„A1“).Value wird der Excel-Zelle C1 der Inhalt von der Excel-Zelle A1 zugewiesen. Das bedeutet, in der Excel-Zelle C1 steht das Wort „Markus“.

Methode 3: Mit der Eigenschaft Value


Sub schreiben_lesen_value()
  Range("A1").Value = "Markus"
  Range("C1").Value = Range("A1").Value
End Sub

Erklärung zum Excel VBA Code

Mit Range(„A1“).Value = „Markus“ wird in Excel-Zelle A1 der Text „Markus“ eingetragen.
Mit Range(„C1“).Value = Range(„A1“).Value wird der Inhalt der Excel-Zelle A1 in die Excel-Zelle C1 eingetragen.

Welches ist die beste Methode?

Das selektieren von Zellen, egal ob mit Select oder Offset kostet Zeit. Der direkte Weg über die Eigenschaft Value ist der beste und der schnellste.

In diesem Video wird gezeigt, welches die beste Methode ist um in Excel-Zellen Werte einzutragen oder Werte auszulesen:

Module – VBA-Code übersichtlich schreiben

Bisher haben wir unseren Code in die Arbeitsmappe oder in ein Arbeitsblatt geschrieben. Wenn Sie größere VBA-Programme programmieren möchten, ist es wichtig den Code etwas zu strukturieren. In Arbeitsmappen und Arbeitsblätter bzw. Tabellenblätter sollten nur Ereignisse programmiert werden. Modul anlegen Um ein Modul anzulegen wählen Sie das Menü „Einfügen“, „Modul“.

Modulnamen ändern

Wählen Sie mit dem Menü „Ansicht“, „Projekt-Explorer“ oder der Tastenkombination Strg + R das Fenster „Projekt – VBAProject“. Bewegen Sie sich mit den Cursortasten zum eingefügten Modul. Aktivieren Sie mit dem Menü „Ansicht“, „Eigenschaftenfenster“ oder mit dem Tastenkürzel F4 das Eigenschaftenfenster. Falls Ihr Textcursor noch nicht im Eingabefeld für „(Name)“ ist, drücken Sie die Taste Tabulator. Geben Sie jetzt einen Namen für Ihr neues Modul ein und schließen Sie Ihre Eingabe ab, mit dem Drücken der Taste Enter.

Excel VBA Code ins neue Modul schreiben

Um in das neu angelegte Modul Excel VBA Code schreiben zu können, klicken Sie mit der linken Maustaste in das Codefenster oder wählen Sie das Menü „Ansicht“, „Code“. Alternativ können Sie auch die Taste F7 drücken. Jetzt können Sie VBA-Code in das neu angelegte Modul schreiben.

Modul exportieren

Sie können ein Modul als .bas-Datei auf Ihre Festplatte speichern. Wählen Sie im Menü „Datei“, „Datei exportieren …“ oder das Tastenkürzel Strg + E . Achten Sie darauf, dass bei Datei „Basic-Dateien (*.bas) ausgewählt ist. Vergeben Sie einen Dateinamen und aktivieren Sie den Schalter „Speichern“ entweder mit der Computermaus oder dem Tastenkürzel Alt + s. Jetzt ist ihr Modul auf der Festplatte gespeichert.

Modul importieren

Ein exportiertes Modul können Sie wieder importieren. Auf diese Weise ist es möglich, bestimmte Prozeduren und Funktionen in mehrere Arbeitsmappen zu verwenden. Wählen Sie im Menü „Datei“, „Datei importieren …“ oder das Tastenkürzel Strg + M. Wählen Sie eine Datei aus und aktivieren Sie den Schalter „Öffnen“. Wählen Sie das Modul aus entweder mit der Computermaus oder den Cursortasten und drücken danach die Taste „Enter“. Jetzt wird der komplette Excel VBA Codes des importierten Moduls im Codefenster angezeigt.

Modul löschen

Wenn Sie ein Modul löschen möchten, markieren Sie das Modul mit der Computermaus oder mit den Cursortasten. Wählen Sie das Menü „Datei“ und wählen Sie dann den Menüpunkt der mit den Worten „Entfernen von“ beginnt und danach kommt der Name des Moduls welches Sie markiert haben. Leider gibt es für diesen Menüpunkt kein Tastenkürzel. Nach wählen dieses Menüpunktes werden Sie gefragt ob Sie das Modul vor dem Löschen das Modul exportieren möchten. Wenn Sie den Schalter „Ja“ betätigen, erscheint das gleiche Fenster wie bei „Modul exportieren“. Sie können einen Dateinamen für das Modul angeben und das Modul auf Ihrer Festplatte speichern. Danach wird das Modul gelöscht. In diesem Video wird erklärt was Sie zum Thema Module wissen müssen:

Intelligente Tabelle – Alles was wichtig ist

Intelligente Tabellen besitzen einige Sonderfunktionen. Sie besitzen einen Autofilter. Intelligente Tabellen können schnell und einfach sortiert werden. Wenn neue Zeilen in intelligente Tabellen hinzugefügt werden, dann übernehmen diese die Formatierung und Formeln der vorherigen Zeile. Um mit intelligenten Tabellen in Excel VBA arbeiten zu können, wird das ListObject verwendet. Deswegen zeige ich in diesem Abschnitt die wichtigsten Funktionen des Listobjects. Listobjects ist eine Auflistung aller Listobject-Objekte auf einem Arbeitsblatt. Jedes Listobject-Objekt stellt eine Tabelle auf dem Arbeitsblatt dar.

Intelligente Tabelle – Daten generieren

Damit Sie alle Möglichkeiten von intelligenten Tabellen kennen lernen können, schreiben Sie zunächst Daten in Ihre Excel-Tabelle:


Sub intelligente_daten_vorbereiten()
  Range("A1").Value = "Vorname"
  Range("B1").Value = "Nachname"
  Range("C1").Value = "Strasse"
  Range("D1").Value = "PLZ"
  Range("E1").Value = "Ort"
  
  Range("A2").Value = "Markus"
  Range("B2").Value = "Lemcke"
  Range("C2").Value = "Bahnhofstrasse 17"
  Range("D2").Value = "72144"
  Range("E2").Value = "Dußlingen"
  
  Range("A3").Value = "Max"
  Range("B3").Value = "Mustermann"
  Range("C3").Value = "Musterstrasse 99"
  Range("D3").Value = "00000"
  Range("E3").Value = "Musterhausen"
  
  With Range("A1:E3")
   .Font.Name = "Arial"
   .Font.Size = 16
   .Font.Bold = False
   .Font.Color = vbBlack
  End With
  
  With Range("A1:E1")
   .Font.Bold = True
   .EntireColumn.AutoFit
  End With
  
End Sub

Erklärung zum Excel VBA Code

Mit Range(„xx“).Value werden Texte in Excel-Zellen eingetragen.
Mit .Font.Name wird die Schriftart festlegt.
Mit .Font.Size wird die Schriftgröße festgelegt.
Mit .Font.Bold wird festgelegt ob Fettdruck aktiviert wird oder nicht.
Mit .Font.Color wird die Schriftfarbe festgelegt.
Mit .EntireColumn.AutoFit wird die optimale Spaltenbreite gesetzt.

Intelligente Tabelle – Erstellen

Eine intelligente Tabelle erstellen können Sie mit folgendem Code:


Sub intelligente_tabelle_anlegen()
  Tabelle1.ListObjects.Add xlSrcRange, Range("A1:E2"), , xlYes
End Sub

Erklärung zum Excel VBA Code

Tabelle1 ist der Codename des Excel-Arbeitsblattes.
ListObjects ist die Sammlung aller intelligenten Tabellen auf diesem Arbeitsblatt / Tabellenblatt
Add ist eine Methode mit der eine intelligente Tabelle hinzugefügt werden kann.
xlSrcRange ist ein Range-Objekt , das die Datenquelle darstellt.
Range(„A1:E2“) ist der Bereich welcher in eine intelligente Tabelle umgewandelt werden soll.
xlYes bedeutet, dass wir Spaltenüberschriften haben.

Intelligente Tabelle – Umbennen

Eine intelligente Tabelle umbenennen können Sie mit folgendem Code:


Sub intelligente_tabelle_umbnennen()
  Tabelle1.ListObjects("Tabelle1").Name = "Adressen"
End Sub
Sub intelligente_tabelle_umbnennen_zurueck()
  Tabelle1.ListObjects("Adressen").Name = "Tabelle1"
End Sub

Intelligente Tabelle – Ansprechen

Es gibt mehrere Möglichkeiten intelligente Tabelle anzusprechen.

Komplette intelligente Tabelle ansprechen


Sub intelligente_tabelle_komplett_ansprechen()
  Tabelle1.ListObjects("Tabelle1").Range.Select
End Sub

intelligente Tabelle – Inhalt ansprechen


Sub intelligente_tabelle_inhalt_ansprechen()
  Tabelle1.ListObjects("Tabelle1").DataBodyRange.Select
End Sub

intelligente Tabelle – Tabellenkopf ansprechen


Sub intelligente_tabelle_kopf_ansprechen()
  Tabelle1.ListObjects("Tabelle1").HeaderRowRange.Select
End Sub

intelligente Tabelle – Eine Zelle ansprechen


Sub intelligente_tabelle_zelle_ansprechen()
  Tabelle1.ListObjects("Tabelle1").Range(2, 1).Select
End Sub

intelligente Tabelle – Eine Spalte ansprechen


Sub intelligente_tabelle_spalte_ansprechen()
  Tabelle1.ListObjects("Tabelle1").ListColumns("Vorname").DataBodyRange.Select
End Sub

intelligente Tabelle – Eine Zeile ansprechen


Sub intelligente_tabelle_zeile_ansprechen()
  Tabelle1.ListObjects("Tabelle1").ListRows(1).Range.Select
End Sub

intelligente Tabelle – Eine Zeile hinzufügen


Sub intelligente_tabelle_zeile_hinzufuegen()
  Tabelle1.ListObjects("Tabelle1").ListRows.Add
End Sub

intelligente Tabelle – Die letzte Zeile löschen


Sub intelligente_tabelle_letzte_zeile_loeschen()
  Tabelle1.ListObjects("Tabelle1").ListRows(Tabelle1.ListObjects("Tabelle1").ListRows.Count).Delete
End Sub

intelligente Tabelle löschen


Sub intelliegente_tabelle_loeschen()
  Tabelle1.ListObjects("Tabelle1").Range.Delete
End Sub

In diesem Video erkläre ich alles wichtige zum Thema intelligente Tabelle:

Option Explicit – Warum sollte es unbedingt verwendet werden?

Eigentlich hätte ich das Thema schon bei dem Thema „Variablen – Was ist das eigentlich?“ behandeln sollen. Da mir wichtig ist, dass Ihnen das Lernen von Excel VBA Spaß macht wollte ich Sie nicht gleich überfluten mit Informationen. Im Excel VBA-Editor können Sie im Menü „Extras“, „Optionen…“ im Register „Editor“ einen Haken setzen bei „Variablendeklaration erforderlich“. Wenn Sie jetzt ein Modul einfügen über das Menü „Einfügen“, „Modul“ steht rechts im Code-Editor Option Explicit . Was das bedeutet, finden wir jetzt heraus. Schreiben Sie folgende Prozedur:


Sub variable_deklarieren_test()
  Zahl = 1
  MsgBox Zahl
End Sub

Führen Sie die Prozedur aus mit Taste F5. Sie bekommen eine Fehlermeldung: „Variable nicht definiert“. Bestätigen Sie den Okay-Schalter. Sie entfernen Sie den Text Option Explicit im Codefenster. Führen Sie die Prozedur aus mit Taste F5. Juhu, der Code wird ausgeführt, aber ist das wirklich gut? Ändern Sie den Code wie folgt ab:


Sub variable_deklarieren_test()
  Zahl = 1
  MsgBox zahl1
End Sub

Führen Sie die Prozedur aus mit Taste F5. Der Code wird noch immer ausgeführt, obwohl es die Variable zahl1 gar nicht gibt. Wenn in den Optionen des VBA Editors bei „Variablendeklaration erforderlich“ kein Haken gesetzt ist bzw. Option Explicit nicht in der ersten Zeile des Editors vorhanden ist, können richtig schwere Fehler passieren, die Ihnen das fehlerfreie Programmieren sehr erschweren. Gut, wir setzen einen Haken bei „Variablendeklaration erforderlich“ und sorgen somit dafür, dass im Codefenster in der ersten Zeile ganz oben immer „Option Explicit“ vorhanden ist. Aber wie müssen wir unsere Prozedur programmieren, damit diese ausgeführt wird? Hier die Lösung:


Option Explicit
Sub variable_deklarieren_test()
  Dim Zahl As Integer
  Zahl = 1
  MsgBox Zahl
End Sub

Variablendeklaration bedeutet, dass Sie eine Variable mit Dim deklarieren müssen. Wenn Sie das regelmäßig umsetzen sparen Sie sich viel Zeit, weil Sie keine Fehlermeldungen bekommen, dass eine Variable nicht deklariert ist.

In diesem Video erläre ich Ihnen Option Explicit:

Excel wie eigenständige Software aussehen lassen

Wenn Sie mit Excel Software entwickeln möchten die nicht nach Excel aussieht, dann stören die Menüs, Symbolleisten, Statusleisten usw. In diesem Abschnitt zeige ich Ihnen wie Sie alles was nach Excel aussieht ausblenden können. Damit Ihnen dieser Abschnitt etwas Spaß macht, können Sie ja den Taschenrechner programmieren und dann Excel ausblenden.

Wichtiger Hinweis!

Nach dem ausblenden aller Excel-Menüs ist es nicht mehr so einfach in den VBA-Editor zu kommen. Deswegen ist es wichtig, dass Sie wissen, dass mit der Tastenkombination Alt+F11 der VBA-Editor geöffnet werden kann. Folgende Prozedur blendet alles was nach Excel aussieht aus:


Sub excel_als_anwendung()
  Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"
  Application.DisplayFormulaBar = False
  Application.DisplayStatusBar = False
  ActiveWindow.DisplayWorkbookTabs = False
  ActiveWindow.DisplayHeadings = False
  ActiveWindow.DisplayGridlines = False
End Sub

Erklärung zum Excel VBA Code

Application.ExecuteExcel4Macro „SHOW.TOOLBAR(„“Ribbon““,False)“ Enternt das Menüband
Application.DisplayFormulaBar = False  blendet die Bearbeitungsleiste aus.
Application.DisplayStatusBar = False blendet die Statusbar ganz unten aus.
  ActiveWindow.DisplayWorkbookTabs = False blendet die Tabellenblattleiste aus. 
ActiveWindow.DisplayHeadings = False Blendet die Zeilen und Spaltenüberschriften aus.
ActiveWindow.DisplayGridlines = False blendet die Gitternetzlinien aus.

Folgende Prozedur blendet alles was nach Excel aussieht wieder ein:


Sub EntwicklerModus()
   Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
   Application.DisplayFormulaBar = True
   Application.DisplayStatusBar = True
   ActiveWindow.DisplayWorkbookTabs = True
   ActiveWindow.DisplayHeadings = True
   ActiveWindow.DisplayGridlines = True
End Sub

Erklärung zum Excel VBA Code

Application.ExecuteExcel4Macro „SHOW.TOOLBAR(„“Ribbon““,True)“ Blendet das Menüband ein. 
Application.DisplayFormulaBar = True  blendet die Bearbeitungsleiste ein.
Application.DisplayStatusBar = True blendet die Statusbar ganz unten ein. 
ActiveWindow.DisplayWorkbookTabs = True blendet die Tabellenblattleiste ein. 
ActiveWindow.DisplayHeadings = True Blendet die Zeilen und Spaltenüberschriften ein.
ActiveWindow.DisplayGridlines = True blendet die Gitternetzlinien ein.
Jetzt muss noch dafür gesorgt werden, dass bei dem Öffnen der Excel Arbeitsmappe die Excel-Menüs ausgeblendet werden. Dies erledigen wir mit dem Arbeitsmappen-Ereignis Private Sub Workbook_Open(). Hier der Code:


Private Sub Workbook_Open()
  excel_als_anwendung
End Sub

Wenn Sie, wie ich oben empfohlen habe, den Taschenrechner programmieren, muss in das Ereignis noch der Code um den Taschenrechner vorzubereiten:


Private Sub Workbook_Open()
  excel_als_anwendung
  Range("A1").Value = "Zahl 1"
  Range("B1").Value = "Rechenoperator"
  Range("C1").Value = "Zahl 2"
  Range("D1").Value = "Ergebnis"
 
  Range("A1:D1").Font.Bold = True
  Range("A1:D1").Font.Size = 14
  Range("A1:D1").Font.Name = "Arial"
  
  Range("A2:D2").Font.Size = 14
  Range("A2:D2").Font.Name = "Arial"
  Range("A2:D2").HorizontalAlignment = xlCenter
  Range("A1:D1").EntireColumn.AutoFit
  
  Range("A2").Select
End Sub

Mit der Prozedur excel_als_anwendung und deren Aufruf im Ereignis Private Sub Workbook_Open() können Sie dafür sorgen, dass Ihre Anwendung wie eine richtige Software aussieht. In diesem Video erkläre ich, was Sie tun müssen, damit Ihre Excel VBA-Anwendung wie eine richtige Software aussieht:

Tastaturkürzel von Excel anpassen

Meine rechte Hand ist durch meine Körperbehinderung so stark eingeschränkt, dass Tasten drücken auf der Hardware-Tastatur sehr anstrengend ist. Den VBA-Editor öffnen mit der Tastenkombination Alt + F11 ist für mich sehr sehr sehr anstrengend. Da ist es eine Super Sache, dass ich mit Excel VBA die Tastasturkürzel anpassen kann.

Wichtig: Es gibt Tastenkürzel die können Sie nicht verwenden, weil sie von Excel genutzt werden. Hier eine Liste von Microsoft, welche Tasten Sie wie ansprechen können:
Application.OnKey-Methode (Excel) | Microsoft Learn

Empfehlung:
Die Strg-Taste + Buchstabe oder Strg-Taste + Zahl funktioniert gut.


Sub tastenkurzel_setzen()
  Application.OnKey "^1", "intellegente_tabelle.intelligente_tabelle_zeile_hinzufuegen"
  Application.OnKey "^2", "intellegente_tabelle.intelligente_tabelle_aktuell_markierte_zeile_loeschen"
  Application.OnKey "^3", "kombinationsfeld_fokus_geben"
  Application.OnKey "^4", "suche_nachname"
  Application.OnKey "^5", "intellegente_tabelle.intelliegente_tabelle_drucken"
End Sub

Folgender Code zeigt, wie der VBA-Editor statt mit Alt + F11 mit der Taste F2 aufgerufen werden kann. Legen Sie ein Modul „editor_aufruf_barrierefrei“ an. In diesem Modul schreiben Sie folgende Prozedur:


Sub editor_aufrufen_barrierefrei()
  SendKeys "%{F11}", True
End Sub

Erklärung zum Excel VBA Code

Mit Sendkeys können Tastendrucke simuliert werden. Hier wird der Tastenkürzel Alt + F11 simuliert.
Bei dem Wert True wartet Microsoft Excel auf die zu verarbeitenden Tasten bevor wieder an das Makro übergeben wird.

Damit die Tastaturumbelegung in der Arbeitsmappe funktioniert, nutzen Sie das Ereignis Private Sub Workbook_Open().


Private Sub Workbook_Open()
  Application.OnKey "{F2}", "editor_aufruf_barrierefrei.editor_aufrufen_barrierefrei"
End Sub

Erklärung zum Excel VBA Code

Application.OnKey führt eine angegebene Prozedur aus, wenn eine bestimmte Taste oder Tastenkombination gedrückt wird.
Hier wird, wenn die Taste F2 gedrückt wird, die Prozedur editor_aufrufen_barrierefrei im Modul editor_aufruf_barrierefrei aufgerufen.

In diesem Video erkläre ich wie Sie mit Excel VBA Tastaturkürzel in Excel anpassen können:

Reihe berechnen

Angenommen Sie möchten in Excel einen Kalender programmieren. Sie benötigen dafür die Zahlen 1-28, 1-30 und 1-31. Ebenso benötigen Sie die Wochentage von Montag bis Sonntag. Als drittes benötigen Sie die Namen der Monate von Januar bis Dezember. Wenn Sie wissen, dass es in Excel die Möglichkeit gibt Reihen zu berechnen, dann ist diese Aufgabe ganz schnell programmiert!

Das Prinzip der Reihe berechnen ist wie folgt:
Sie tragen in zwei Excel-Zellen, die sich in der gleichen Spalte befinden und direkt untereinander sind, jeweils einen Wert ihrer gewünschten Reihe ein. Danach selektieren Sie diese zwei Excel-Zellen und lassen dann die Reihe berechnen für weitere Excel-Zellen die sich in der gleichen Spalte befinden.

Eine Zahlenreihe berechnen

Im folgenden Codebeispiel wird in den Excel-Zellen A1 bis A31 die Zahlen von 1 bis 31 eingetragen. Es wird also eine Reihe von Zahlen berechnet.


Sub reihe_berechnen_zahlen()
    Range("A1").Value = 1
    Range("A2").Value = 2
    Range("A1:A2").Select
    Selection.AutoFill Destination:=Range("A1:A31")
End Sub

Erklärung zum Excel VBA Code

In Excel-Zelle A1 und A2 werden 2 Zahlen eingetragen die nacheinander folgen.
Mit Range(„A1:A2“).Select werden die Excel-Zellen A1 bis A2 selektiert oder markiert.
Selection.AutoFill Destination:=Range(„A1:A31“) sorgt dafür, dass von Excel-Zelle A1 bis Excel-Zelle A31 eine Zahlenreihe eingetragen wird von 1 bis 31.

Eine Reihe Wochentage berechnen

Im folgenden Codebeispiel wird in den Excel-Zellen B1 bis B31 die Namen der Wochentage von „Montag“ bis „Sonntag“ eingetragen. Nach „Sonntag“ geht es dann wieder von vorne mit „Montag“ weiter. Es wird also eine Reihe von Wochentagen berechnet.


Sub reihe_berechnen_tage()
    Range("B1").Value = "Montag"
    Range("B2").Value = "Dienstag"
    Range("B1:B2").Select
    Selection.AutoFill Destination:=Range("B1:B31")
End Sub

Erklärung zum Excel VBA Code

In Excel-Zelle B1 und B2 werden 2 Namen von Wochentagen eingetragen die nacheinander folgen.
Mit Range(„B1:B2“).Select werden die Excel-Zellen B1 bis B2 selektiert oder markiert.
Selection.AutoFill Destination:=Range(„B1:B31“) sorgt dafür, dass von Excel-Zelle B1 bis Excel-Zelle B31 eine Reihe von Wochentagen eingetragen wird von „Montag“ bis „Sonntag“ und danach wird die Reihe wiederholt.

Eine Reihe Monate berechnen

Im folgenden Codebeispiel wird in den Excel-Zellen C1 bis C12 die Namen der Monate von „Januar“ bis „Dezember“ eingetragen. Es wird also eine Reihe von Monaten berechnet.


Sub reihe_berechnen_monate()
    Range("C1").Value = "Januar"
    Range("C2").Value = "Februar"
    Range("C1:C2").Select
    Selection.AutoFill Destination:=Range("C1:C12")
End Sub

Erklärung zum Excel VBA Code

In Excel-Zelle C1 und C2 werden 2 Namen von Monaten eingetragen die nacheinander folgen.
Mit Range(„C1:C2“).Select werden die Excel-Zellen C1 bis C2 selektiert oder markiert.
Selection.AutoFill Destination:=Range(„C1:C12“) sorgt dafür, dass von Excel-Zelle C1 bis Excel-Zelle C12 eine Reihe von Monatsnamen eingetragen wird von „Januar“ bis „Dezember“.

In folgendem Video erkläre ich, wie Sie mit Excel VBA eine Reihe berechnen können:

Zahlen in Zellen eintragen und formatieren

Zahlen sind in Excel sehr wichtig. Texte bzw. Strings werden mit Anführungszeichen in Excel-Zellen eingetragen. Zahlen werden ohne Anführungszeichen in Excel-Zelleneingetragen.

Mit der Eigenschaft NumberFormat können Formatierung von Einträgen in Excel-Zellen in denen Zahlen stehen vorgenommen werden. Es kann zum Beispiel festgelegt werden ob eine Zahl mit Tausenderpunkt, Prozentangabe oder Währungsangabe dargestellt wird. Ebenso kann festgelegt werden, wieviel Nachkommastellen bei einer Zahl angezeigt werden.


Range("B3").Value = 7
Range("D3").Value = 0.4

Erklärung zum Excel VBA Code

Mit Range(„B3“).Value = 7 wird in Excel-Zelle B3 die Zahl 7 eingetragen.
Mit Range(„D3“).Value = 0.4 wird in Excel-Zelle D3 die Zahl 7 eingetragen.
Zahl dürfen nicht in Anführungszeichen angegeben werden, weil sie sonst als String, Zeichenkette, interpretiert werden.

Oft ist es wichtig, dass Zahlen mit 2 Nachkommastellen dargestellt werden. Das kann wie folgt umgesetzt werden:


Sub zahlen_formatieren_dezimal()
  Range("B2:B3").NumberFormat = "0.00"
  Range("D2:D3").NumberFormat = "0.00"
  Range("E2:E7").NumberFormat = "0.00"
End Sub

Erklärung zum Excel VBA Code

Mit Range werden die Excel-Zellen B2 bis B3, D2 bis D3 und E2 bis E7 mit der Eigenschaft NumberFormat formatiert.
Mit NumberFormat = „0.00“ wird dafür gesorgt, dass Zahlen in oben genannten Excel-Zellen mit 2 Nachkommastellen dargestellt werden.

Wenn nach Zahlen eine Währungseinheit angezeigt werden soll, dann kann das folgendermaßen realisiert werden:


Sub zahlen_formatieren_dezimal_waehrung()
  Range("D2:D3").NumberFormat = "0.00 $"
  Range("E2:E7").NumberFormat = "0.00 $"
End Sub

Erklärung zum Excel VBA Code

Mit Range werden die Excel-Zellen B2 bis B3, D2 bis D3 und E2 bis E7 mit der Eigenschaft NumberFormat formatiert.
Mit NumberFormat = „0.00 $“ wird dafür gesorgt, dass Zahlen in oben genannten Excel-Zellen mit 2 Nachkommastellen dargestellt werden.
Das $-Zeichen sorgt dafür, dass nach den Zahlen ein Währungszeichen dargestellt wird. In meinem Fall, Deutschland, ist es das Euro Zeichen.

Vorlage für Angebote oder Rechnungen

In diesem Abschnitt zeige ich Ihnen eine Vorlage die für Angebote oder Rechnungen genutzt werden kann. Hier die Hauptprozedur:


Sub leistungsverzeichnis_erstellen()
  Range("A1").Value = "Produkt"
  Range("B1").Value = "Menge"
  Range("C1").Value = "Einheit"
  Range("D1").Value = "E-Preis"
  Range("E1").Value = "G-Preis"
    
  Range("A2").Value = "Brezeln"
  Range("B2").Value = 7
  Range("C2").Value = "Stk"
  Range("D2").Value = 0.9
  
  Range("A3").Value = "Brötchen"
  Range("B3").Value = 7
  Range("C3").Value = "Stk"
  Range("D3").Value = 0.4
  
  
  Range("A1:E1").Font.Bold = True
  
  With Range("A1:E10")
    .Font.Name = "Arial"
    .Font.Size = 14
  End With
  
  berechnungen
  
  zahlen_formatieren_dezimal_waehrung
  Range("A:E").EntireColumn.AutoFit
End Sub

Erklärung zum Excel VBA Code

In die Excel-Zellen A1 bis E1 werden Spaltenüberschriften als Text eingetragen.
In die Excel-Zellen A2 und A3 werden Artikel als Text eingetragen.
In die Excel-Zellen B2 und B3 werden Mengen-Angaben als Zahl eingetragen
In die Excel-Zellen C2 und C3 wwird die Einheit als Text eingetragen.
In die Excel-Zellen D2 und D3 wwird der Einzelpreis als Zahl eingetragen.
Mit Range(„A1:E1“).Font.Bold = True wird in den Excel-Zellen A1 bis E1 der Fettdruck aktiviert.
Mit Aufruf der Prozedur berechnungen wird in Spalte E der G-Preis berechnet.
Der Aufruf der Prozedur zahlen_formatieren_dezimal_waehrung sorgt dafür das der E-Preis und G-Preis immer wird 2 Nachkommastellen angezeigt wird und danach das Euro-Zeichen ausgegeben wird.

Hier die Prozedur zahlen_formatieren_dezimal_waehrung:


Sub zahlen_formatieren_dezimal_waehrung()
  Range("D2:D3").NumberFormat = "0.00 $"
  Range("E2:E7").NumberFormat = "0.00 $"
End Sub

Erklärung zum Excel VBA Code

Die Zahlen in den Excel-Zellen D2,D3,E2 bis E7 werden mit 2 Nachkommastellen und dem Währungszeichen angezeigt.

Hier die Prozedur berechnungen:


Sub berechnungen()
  Range("E2").Value = Range("B2").Value * Range("D2").Value
  Range("E3").Value = Range("B3").Value * Range("D3").Value
End Sub

Erklärung zum Excel VBA Code

Hier wird in Spalte E der G-Preis berechnet. Warum das funktioniert, erkläre ich im Abschnitt Formeln.

In folgendem Video erkläre ich wie Sie mit Excel VBA Zahlen in Excel-Zellen eintragen und diese Formatieren können:

Formeln in Excel-Zellen eintragen

Damit Sie in Excel rechnen können, müssen Sie Formeln verwenden. In diesem Abschnitt zeige ich Ihnen die wichtigsten Formeln zum Rechnen. Im Objekt WorksheetFunction gibt es fertige Funktionen die Sie verwenden können. Leider gibt es nicht für jede Grundrechenart eine fertige Funktion.

Excel-Tabelle für Formeln vorbereiten

Als erstes tragen wir Zahlen in die Excel-Tabelle ein, damit wir Formeln anwenden können:


Sub tabelle_vorbereiten()
  Range("A1").Value = 25
  Range("B1").Value = 4
  Range("C1").Value = 0
    
  With Range("A1:C1")
    .Font.Name = "Arial"
    .Font.Size = 14
  End With
  
 Range("A1:C1").NumberFormat = "0.00"
 Range("A:C").EntireColumn.AutoFit
 Range("C1").ColumnWidth = 10
End Sub

Erklärung zum Excel VBA Code

Range(„A1“).Value = 25 trägt in die Excel-Zelle A1 die Zahl 25 ein.
Range(„B1“).Value = 4 trägt in die Excel-Zelle B1 die Zahl 4 ein.
Range(„C1“).Value = 0 trägt in die Excel-Zelle C1 die Zahl 0 ein.
Mit .Font.Name = „Arial“ und .Font.Size = 14 wird die Schriftart und die Schriftgröße gesetzt.
Range(„A1:C1“).NumberFormat = „0.00“ legt das Zahlenformat für die Excel-Zellen von A1 bis C1 auf 2 Nachkommastellen fest.
Range(„A:C“).EntireColumn.AutoFit setzt die optimale Spaltenbreite für die Spalten A bis C.
Mit Range(„C1“).ColumnWidth = 10 wird dafür gesorgt, dass die Spalte C breit genug ist um die errechneten Zahlen darstellen zu können.

Addition


Sub summieren()
  Range("C1").Value = WorksheetFunction.Sum(Range("A1:B1"))
End Sub

Erklärung zum Excel VBA Code

Mit der Methode Sum können beliebig viele Excel-Zellen in den Zahlen eingetragen wurden summiert werden. Hier wird in Excel-Zelle C1 die Summe von Excel-Zelle A1 bis B1 eingetragen.

Subtraktion


Sub subtrahieren()
  Range("C1").Value = Range("A1").Value - Range("B1").Value
End Sub

Erklärung zum Excel VBA Code

Für die Subtraktion gibt es im Objekt WorksheetFunction kein fertige Methode. Deswegen wird auf die Excel-Zellen mit Range und der Eigeschaft Value zugegriffen.
In Excel-Zelle C1 wird das Ergebnis von A1 – B1 eingetragen.

Multiplikation


Sub multiplikation()
   Range("C1").Value = WorksheetFunction.Product(Range("A1").Value, Range("B1").Value)
End Sub

Erklärung zum Excel VBA Code

Mit der Methode Product wird der Inhalt der Excel-Zellen A1 und B1 multipliziert und das Ergebnis in Excel-Zelle C1 eingetragen.

Division


Sub dividieren()
   Range("C1").Value = Range("A1").Value / Range("B1").Value
End Sub

In diesem Video wird erklärt wie Sie Formeln in Excel eintragen:

Messagebox – Dem Anwender etwas mitteilen

Mit einer Messagebox können dem Anwender Hinweistexte angezeigt werden. Es ist aber auch möglich dem Anwender Fragen zu stellen und auf seine Antwort entsprechend reagieren.

Eine einfache Meldung anzeigen

Eine einfache Meldung kann so angezeigt werden:


Sub einfache_meldung()
   MsgBox "Das ist eine einfache Meldung!"
End Sub

Erklärung zum Excel VBA Code

MsgBox ist der Excel VBA-Befehl.
„Das ist eine einfache Meldung!“ ist der Text der angezeigt wird.

Meldung anzeigen mit Ja, Nein und Abbruch-Button

Dem Anwender einen Ja-Button, Nein-Button und einen Abbruch-Button zur Verfügung stellen kann mit folgendem Code erledigt werden:


Sub ja_nein_abruch_meldung()
    Dim rueckgabe As Integer
    rueckgabe = MsgBox("Soll das Programm weiter machen?", vbYesNoCancel + vbQuestion + vbDefaultButton1, "Ja / Nein oder Abruch")
    
    If rueckgabe = vbYes Then
        MsgBox "In Ordnung, das Programm wird weiter ausgeführt!"
    
    ElseIf rueckgabe = vbNo Then
        MsgBox "In Ordnung, das Programm wird NICHT weiter ausgeführt!"
        
    ElseIf rueckgabe = vbCancel Then
        MsgBox "Es wurde abgebrochen"
    End If
End Sub

Erklärung zum Excel VBA Code

Dim rueckgabe As Integer Eine Variable rueckgabe vom Typ ganze Zahl wird deklariert.
rueckgabe = MsgBox(„Soll das Programm weiter machen?“, vbYesNoCancel + vbCritical + vbDefaultButton1, „Ja / Nein oder Abruch“) Auf die Variable rueckgabe wird gespeichert welchen Schalter der Anwender betätigt hat.
vbYesNoCancel bedeutet, es werden die Schalter „Ja“, „Nein“, „Abbrechen“ angezeigt.
vbQuestion bedeutet, dass ein Fragezeichen angezeigt wird.
vbDefaultButton1 bedeutet, dass beim Anzeigen der Messagebox der erste Schalter, also der Schalter „Ja“ der aktive Schalter ist.
If rueckgabe = vbYes Then MsgBox „In Ordnung, das Programm wird weiter ausgeführt!“. Wenn der Schalter „Ja“ betätigt wurde, wird eine einfache Messagebox angezeigt mit dem Text „In Ordnung, das Programm wird weiter ausgeführt!“
ElseIf rueckgabe = vbNo Then MsgBox „In Ordnung, das Programm wird NICHT weiter ausgeführt!“ Wenn der Schalter „Nein“ betätigt wurde, wird eine einfache Messagebox angezeigt mit dem Text „In Ordnung, das Programm wird NICHT weiter ausgeführt!“
ElseIf rueckgabe = vbCancel Then MsgBox „Es wurde abgebrochen“ Wenn der Schalter „Abbrechen“ betätigt wurde, wird eine einfache Messagebox angezeigt mit dem Text „Es wurde abgebrochen“

In diesem Video erkläre ich die Messagebox:

Inputbox – Anzeigen eines Dialogfensters zur Anwendereingabe

Mit der Inputbox können Sie Daten erhalten die der Anwender eingeben kann.


Sub inputbox_testen()
  Dim vorname, nachname As String
  
  vorname = InputBox("Wie lautet Dein Vorname?")
  nachname = InputBox("Wie lautet Dein Nachname?")
  Range("A1").Value = "Vorname: "
  Range("A2").Value = "Nachname: "
  
  Range("B1").Value = vorname
  Range("B2").Value = nachname
  
  With Range("A1:B2").Font
       .Name = "Arial"
       .Size = 12
  End With
  Range("A1:A2").Font.Bold = True
  
  Range("A1:B1").EntireColumn.AutoFit
End Sub

Erklärung zum Excel VBA Code

Der obige Code fragt den Anwender mit Hilfe einer InputBox nach Vor- und Nachname und trägt beide Eingaben in die Excel-Zellen B1 und B2 ein.
Dim vorname, nachname As String . Deklariert die Variablen vorname und nachname als String. String ist eine Zeichenkette die aus Buchstaben, Sonderzeichen und Zahlen bestehen kann.
vorname = InputBox(„Wie lautet Dein Vorname?“) . Zeigt ein Dialogfeld an mit dem Text: Wie lautet Dein Vorname? Unter diesem Text ist ein Eingabefeld in das der Anwender seinen Vornamen eingeben kann. Rechts sind die Schalter „OK“ und „Abbrechen“. Die Eingabe des Anwenders wird auf die Variable vorname gespeichert.
nachname = InputBox(„Wie lautet Dein Nachname?“) . Zeigt ein Dialogfeld an mit dem Text: Wie lautet Dein Nachname? Unter diesem Text ist ein Eingabefeld in das der Anwender seinen Vornamen eingeben kann. Rechts sind die Schalter „OK“ und „Abbrechen“. Die Eingabe des Anwenders wird auf die Variable nachname gespeichert.
Range(„A1“).Value = „Vorname:“ . Trägt in die Excel-Zelle A1 den Text Vorname: ein.
Range(„A2“).Value = „Nachname:“ . Trägt in die Excel-Zelle A2 den Text Nachname: ein.
With Range(„A1:B2“).Font … Den Excel-Zellen A1 bis B2 wird die Schriftart Arial und die Schriftgröße 12 zugewiesen.
Range(„A1:A2“).Font.Bold = True . Formatiert die Excel-Zellen A1 bis A2 mit Fettdruck.
Range(„A1:B1“).EntireColumn.AutoFit . Setzt bei Spalte A und B die optimale Spaltenbreite

In folgendem Video erkläre ich die Inputbox:

Vergleichsoperatoren – Was ist das und wann sollte man sie einsetzen?

Folgende Vergleichsoperatoren gibt es in Excel VBA:

  • =
  • <>
  • >
  • <
  • >=
  • <=
  • Like

Zahlen vergleichen

Als erstes zeige ich wie Zahlen verglichen werden. Das Ergebnis eines Vergleichs ist WAHR oder FALSCH. In der Prozedur zahlen_vergleichen werden Zahlen miteinander verglichen. Das Ergebnis des Vergleichs wird in eine Excel-Zelle eingetragen.


Sub zahlen_vergleichen()
  'Gleich
  Range("A1").Value = "30 = 25.5"
  Range("B1").Value = 30 = 25.5

  'Gleich
  Range("A2").Value = "30 = 30"
  Range("B2").Value = 30 = 30

  'Ungleich
  Range("A3").Value = "30 <> 25.5"
  Range("B3").Value = 30 <> 25.5

  'Größer
  Range("A4").Value = "30 > 25.5"
  Range("B4").Value = 30 > 25.5

  'Kleiner
  Range("A5").Value = "30 < 25.5"
  Range("B5").Value = 30 < 25.5

  'Größer-Gleich
  Range("A6").Value = "30 >= 25.5"
  Range("B6").Value = 30 >= 25.5

  'Kleiner-Gleich
  Range("A7").Value = "30 <= 25.5"
  Range("B7").Value = 30 <= 25.5

End Sub

Erklärung zum Excel VBA Code

Range(„B1“).Value = 30 = 25.5 . Vergleicht ob 30 gleich 25.5 ist. Das Ergebnis ist falsch.
Range(„B2“).Value = 30 = 30 . Vergleicht ob 30 gleich 30 ist. Das Ergebnis ist wahr.
Range(„B4“).Value = 30 > 25.5 . Vergleicht ob 30 größer ist als 25.5. Das Ergebnis ist wahr.
Range(„B5“).Value = 30 < 25.5 . Vergleicht ob 30 kleiner ist als 25.5. Das Ergebnis ist falsch.
Range(„B6“).Value = 30 >= 25.5 . Vergleicht ob 30 größer oder gleich 25.5 ist. Das Ergebnis ist wahr.
Range(„B7“).Value = 30 <= 25.5 . Vergleicht ob 30 kleiner oder gleich 25.5 ist. Das Ergebnis ist falsch.

Strings vergleichen

Strings sind Zeichenketten. Zeichenketten können aus Buchstaben, Zahlen und Sonderzeichen bestehen. Das Ergebnis eines Vergleichs ist WAHR oder FALSCH. In der Prozedur strings_vergleichen werden Strings miteinander verglichen. Das Ergebnis des Vergleichs wird in eine Excel-Zelle eingetragen.


Sub strings_vergleichen()
  'Sind zwei Zeichenketten identisch?
  Range("C1").Value = "Schmidt = Schmidt"
  Range("D1").Value = "Schmidt" = "Schmidt"
  Range("C2").Value = "Schmidt = Schmitt"
  Range("D2").Value = "Schmidt" = "Schmitt"

  'Stimmen Zeichenketten teilweise überein?
  '(?) = Platzhalter für ein beliebiges Zeichen
  Range("C3").Value = "Schmidt Like Schmi?t"
  Range("D3").Value = "Schmidt" Like "Schmi?t"

  '(*) = Platzhalter für mehrere beliebige Zeichen
  Range("C4").Value = "Schmidt Like Sch*t"
  Range("D4").Value = "Schmidt" Like "Sch*t"
  Range("C5").Value = "01768 Like 0176*"
  Range("D5").Value = "01768" Like "0176*"

End Sub

Erklärung zum Excel VBA Code

Das ? ist ein Platzhalter für ein beliebiges Zeichen.
Der * ist ein Platzhalter für mehrere beliebige Zeichen
Range(„D1“).Value = „Schmidt“ = „Schmidt“ . Dieser Vergleich ist wahr.
Range(„D2“).Value = „Schmidt“ = „Schmitt“ . Dieser Vergleich ist falsch.
Range(„D3“).Value = „Schmidt“ Like „Schmi?t“ . Dieser Vergleich ist wahr.
Range(„D4“).Value = „Schmidt“ Like „Sch*t“ . Dieser Vergleich ist wahr.
Range(„D5“).Value = „01768“ Like „0176*“ . Dieser Vergleich ist wahr.

In diesem Video wird erklärt was Vergleichsoperatoren sind und wie diese genutzt werden können:

Logische Operatoren – Was ist das und wann sollte man sie einsetzen?

Logische Operatoren sind:

  • And
  • Or
  • Not

Mit den logischen Operatoren kann man mehrere Bedienungen, zum Beispiel If-Anweisungen, aneinanderreihen bzw. verknüpfen. Not kehrt die Aussage (=Negation) um.

Logisches and

Mit dem logischen and können mehrere Bedingungen verknüpft werden.


Sub logische_operatoren_and()
  
  Dim x As Double
  x = 3.5

  Range("A1").Value = (x > 1 And x < 4)
End Sub

Erklärung zum Excel VBA Code

Dim x As Double deklariert eine Variable x vom Typ Double. Double ist eine Dezimalzahl.
x = 3.5 Der Variable x wird der Wert 3,5 zugewiesen.
Range(„A1“).Value = (x > 1 And x < 4) Es wird überprüft ob x größer als 1 und kleiner als 4 ist.
Das Ergebnis ist wahr und wird in die Excel-Zelle A1 eingetragen.

Logisches not

Das logische not negiert oder kehrt um.


Sub logische_operatoren_not()

  Dim x As Double
  x = 3.5

  Range("A2").Value = Not (x > 1 And x < 4)
End Sub

Erklärung zum Excel VBA Code

Dim x As Double deklariert eine Variable x vom Typ Double. Double ist eine Dezimalzahl.
x = 3.5 Der Variable x wird der Wert 3,5 zugewiesen.
Range(„A2“).Value = Not (x > 1 And x < 4) Es wird überprüft ob der Wert von x nicht zwischen 1 und 4 ist.
Das Ergebnis ist falsch und wird in die Excel-Zelle A2 eingetragen.

Logisches or


Sub logische_operatoren_or()

  Dim x As Double
  x = 3.5

  Range("A3").Value = (x < 2 Or x = 5)
End Sub

Erklärung zum Excel VBA Code

Dim x As Double deklariert eine Variable x vom Typ Double. Double ist eine Dezimalzahl.
x = 3.5 Der Variable x wird der Wert 3,5 zugewiesen.
Range(„A3“).Value = (x < 2 Or x = 5) Es wird überprüft ob der Wert von x kleiner 2 oder 5 ist.
Das Ergebnis ist falsch und wird in die Excel-Zelle A3 eingetragen.

In folgendem YouTube-Video werden die logischen Operatoren erklärt:

Alle verfügbaren Farben in Excel VBA nutzen

Es gibt folgende 3 Möglichkeiten in Excel VBA Farben anzugeben:

  • Interior.Color
  • ColorIndex
  • Befehl RGB

Die Hintergrundfarbe einer Excel-Zelle wird mit Interior.Color festgelegt:


  Range("G1").Interior.Color = RGB(0, 0, 0)

Erklärung zum Excel VBA Code

Obiger Code setzt die Hintergrundfarbe der Excel-Zelle G1.

Die Vordergrundfarbe ist die Schriftfarbe. Die Schriftfarbe einer Excel-Zelle wird mit Font.Color festgelegt:


Range("G1").Font.Color = RGB(0, 0, 255)

Erklärung zum Excel VBA Code

Obiger Code setzt die Schriftfarbe der Excel-Zelle G1.

Farbkonstanten

Eine Farbkonstante ist eine Farbe die bei VBA bereits abgespeichert ist unter einem bestimmten Namen.


Sub Farbkonstanten()

  'Eine Farbkonstante ist eine Farbe die bei VBA
  'bereits abgespeichert ist unter einem bestimmten Namen.

  Range("A1").Interior.Color = vbBlack
  Range("A2").Interior.Color = vbRed
  Range("A3").Interior.Color = vbGreen
  Range("A4").Interior.Color = vbBlue
  Range("A5").Interior.Color = vbWhite
  Range("A6").Interior.Color = vbYellow
  Range("A7").Interior.Color = vbCyan
  Range("A8").Interior.Color = vbMagenta
  
  Range("B1").Value = "vbBlack"
  Range("B2").Value = "vbRed"
  Range("B3").Value = "vbGreen"
  Range("B4").Value = "vbBlue"
  Range("B5").Value = "vbWhite"
  Range("B6").Value = "vbYellow"
  Range("B7").Value = "vbCyan"
  Range("B8").Value = "vbMagenta"
  
  With Range("A:F").Font
      .Size = 12
      .Name = "Arial"
  End With
  Range("A:F").EntireColumn.AutoFit
End Sub

Erklärung zum Excel VBA Code

Range(„A1“).Interior.Color = vbBlack fort folgende.
Es wird die Hintergrundfarbe gesetzt in den Excel-Zellen A1 bis A8 mit den Farbkonstanten.
Range(„B1“).Value = „vbBlack“ fort folgende.
In den Excel-Zellen B1 bis B8 trage ich die Farbnamen ein der Hintergrundfarben von den Excel-Zellen A1 bis A8.
With Range(„A:F“).Font fort folgende.
In den Excel-Spalten von A bis F wird die Schriftgröße auf 12 gesetzt und die Schriftart auf Arial.

ColorIndex

Die folgende Prozedur setzt die Hintergrundfarbe von Excel-Zellen mit Hilfe des ColorIndex.


Sub Farben_colorindex()
  Dim x As Integer

  For x = 1 To 56
    If x < 29 Then
      Cells(x, 3).Interior.ColorIndex = x
      Cells(x, 4) = x
    Else
      Cells(x - 28, 5).Interior.ColorIndex = x
      Cells(x - 28, 6) = x
    End If
  Next x
End Sub

Erklärung zum Excel VBA Code

Dim x As Integer Die Variable x vom Typ Integer wird deklariert.
For x = 1 To 56. Es gibt eine Forschleife von 1 bis 56.
If x < 29 Then. Wenn der Wert der Variable x kleiner als ist 29 dann wird in Spalte 3 in Zeile x die Hintergrundfarbe x gesetzt.
Cells(x, 4) = x In Spalte 4 in Zeile x wird der Wert der Variable x eingetragen.
Wenn x nicht kleiner als 29 ist, wird in Spalte 5 in Zeile x die Hintergrundfarbe x gesetzt und in Spalte 5 wird in Zeile x der Wert der Variable x eingetragen.

Farbkontrast barrierefrei

Es gibt Menschen mit einer Farbfehlsichtigkeit. Sie haben Probleme einer Farbe den richtigen Namen zu zuordnen. Ihnen fehlt auch das Gefühl welche Farben zusammenpassen. Für diese Menschen ist es wichtig, das genügend Farbkontrast zwischen Hintergrund-und Schriftfarbe vorhanden ist. Folgende Prozedur setzt in der Excel-Zelle G1 die Hintergrund-und Schriftfarbe mit zu wenig Farbkontrast.


Sub nicht_barrierefreier_farbkontrast()
  Range("G1").Value = "Schriftfarbe blau"
  'Hintergrundfarbe
  Range("G1").Interior.Color = RGB(0, 0, 0)
  'Schriftfarbe
  Range("G1").Font.Color = RGB(0, 0, 255)
  
  With Range("G1").Font
      .Size = 12
      .Name = "Arial"
  End With
  Range("G1").EntireColumn.AutoFit
End Sub

Erklärung zum Excel VBA Code

Range(„G1“).Value = „Schriftfarbe blau“ . In die Excel-Zelle G1 wird der Text „Schriftfarbe blau“ eingetragen.
Range(„G1“).Interior.Color = RGB(0, 0, 0) Setzt die Hintergrundfarbe der Excel-Zelle G1 auf Schwarz.
Range(„G1“).Font.Color = RGB(0, 0, 255) Setzt die Schriftfarbe der Excel-Zelle G1 auf Blau.
With Range(„G1“).Font … Setzt die Schriftgröße auf 12 und die Schriftart auf Arial der Excel-Zelle G1.
Range(„G1“).EntireColumn.AutoFit Setzt die optimale Spaltenbreite für die Spalte G.

Folgende Prozedur setzt in der Excel-Zelle G1 die Hintergrund-und Schriftfarbe mit einem barrierefreien Farbkontrast.


Sub barrierefreier_farbkontrast()
  Range("G2").Value = "Schriftfarbe weis"
  Range("G2").Interior.Color = RGB(0, 0, 0)
  Range("G2").Font.Color = RGB(255, 255, 255)
  
  With Range("G2").Font
      .Size = 12
      .Name = "Arial"
  End With
  Range("G2").EntireColumn.AutoFit
End Sub

Erklärung zum Excel VBA Code

Range(„G1“).Value = „Schriftfarbe weis“ . In die Excel-Zelle G1 wird der Text „Schriftfarbe weis“ eingetragen.
Range(„G1“).Interior.Color = RGB(0, 0, 0) Setzt die Hintergrundfarbe der Excel-Zelle G1 auf Schwarz.
Range(„G1“).Font.Color = RGB(255, 255, 255) Setzt die Schriftfarbe der Excel-Zelle G1 auf Weis.
With Range(„G1“).Font … Setzt die Schriftgröße auf 12 und die Schriftart auf Arial der Excel-Zelle G1.
Range(„G1“).EntireColumn.AutoFit Setzt die optimale Spaltenbreite für die Spalte G.

Gut und Schön, aber wie kann überprüft werden ob ein Farbkontrast barrierefrei ist?
Sie können die kostenlose Software Colour Contrast Analyser (CCA) herunterladen und installieren.

In folgendem Video wird der Einsatz von Farben in Excel VBA erklärt:

UsedRange – Auswählen, Bearbeiten und lesen

Die Worksheet.UsedRange-Eigenschaft gibt ein Range-Objekt zurück, das den verwendeten Bereich im angegebenen Arbeitsblatt darstellt. Wofür Sie die UsedRange-Eigenschaft nutzen können, zeigen folgende Prozeduren.
Als erstes tragen wir Daten in die Excel-Tabelle ein:


Sub daten_tabelle_eintragen()
     Range("D7").Value = 35
     Range("H13").Value = 70
     With Range("D7:H15").Font
          .Name = "Arial"
          .Size = 12
     End With
End Sub

Erklärung zum Excel VBA Code

Range(„D7“).Value = 35 . Trägt in die Excel-Zelle D7 die Zahl 35 ein.
Range(„H13“).Value = 70 . Trägt in die Excel-Zelle H13 die Zahl 70 ein.
With Range(„D7:H15“).Font fort folgende. Setzt in den Excel-Zellen von D7 bis H15 die Schriftart und Schriftgröße.

Jetzt definieren wir den UsedRange und geben ihm eine andere Hintergrundfarbe:


Sub zellen_usedrange_markieren()
  Dim zellen_usedrange As Range
  
  Set zellen_usedrange = ActiveSheet.UsedRange
  zellen_usedrange.Interior.Color = RGB(240, 248, 255)
End Sub

Erklärung zum Excel VBA Code

Dim zellen_usedrange As Range . Deklariert die Variable zellen_usedrange vom Typ Range.
Set zellen_usedrange = ActiveSheet.UsedRange . Weist der Variable zellen_usedrange den UsedRange des aktiven Tabellenblattes zu.
zellen_usedrange.Interior.Color = RGB(240, 248, 255) . Setzt im usedrange Hintergrundfarbe auf hellgrau.
Die leeren Zellen im UsedRange bekommen die Hintergrundfarbe Grün:


Sub zellen_usedrange_leere_markieren()
  Dim zellen_usedrange As Range
  Dim zellen_usedrange_leer As Range

  Set zellen_usedrange = ActiveSheet.UsedRange
  Set zellen_usedrange_leer = zellen_usedrange.Cells.SpecialCells(xlCellTypeBlanks)
  zellen_usedrange_leer.Interior.Color = vbGreen
End Sub

Erklärung zum Excel VBA Code

Dim zellen_usedrange As Range . Deklariert die Variable zellen_usedrange vom Typ Range.
Dim zellen_usedrange_leer As Range . Deklariert die Variable zellen_usedrange_leer vom Typ Range.
Set zellen_usedrange = ActiveSheet.UsedRange . Weist der Variable zellen_usedrange den UsedRange des aktiven Tabellenblattes zu.
Set zellen_usedrange_leer = zellen_usedrange.Cells.SpecialCells(xlCellTypeBlanks) . Weist der Variable zellen_usedrange_leer die Excel-Zellen zu, in denen kein Wert eingetragen wurde.
zellen_usedrange_leer.Interior.Color = vbGreen . Die Excel-Zellen in denen kein Wert eingetragen wurde innerhalb des UsedRange wird die Hintergrundfarbe Grün zugewiesen.

Die nächste Prozedur zeigt, wie alle Zahlen die sich im UsedRange befinden aufsummiert werden können:


Sub usedrange_summe()
  Dim zellen_usedrange As Range
  Dim zelle As Range
  Dim summe As Long
  
  summe = 0
  Set zellen_usedrange = ActiveSheet.UsedRange
  For Each zelle In zellen_usedrange
    If IsNumeric(zelle.Value) Then
       summe = summe + zelle.Value
    End If
  Next
  
  Cells(zellen_usedrange.Row + zellen_usedrange.Rows.Count + 1, zellen_usedrange.Column).Value = summe
End Sub

Erklärung zum Excel VBA Code

Dim zellen_usedrange As Range . Deklariert die Variable zellen_usedrange vom Typ Range.
Dim zelle As Range . Deklariert die Variable zelle vom Typ Range.
Dim zellen_usedrange As Range . Deklariert die Variable zellen_usedrange vom Typ Range.
Dim summe As Long . Deklariert die Variable summe vom Typ Long. Long ist eine ganze Zahl.
summe = 0 . Setzt den Wert der Variable Summe auf 0.
Set zellen_usedrange = ActiveSheet.UsedRange . Weist der Variable zellen_usedrange den UsedRange des aktiven Tabellenblattes zu.
For Each zelle In zellen_usedrange. Geht mit einer For Each-Schleife alle Excel-Zellen im UsedRange durch
If IsNumeric(zelle.Value) Then . Überprüft ob der Inhalt der Variable Zelle eine Zahl ist.
summe = summe + zelle.Value . Addiert die Zahl der Variable Zelle zur Zahl der Variable summe.
End If . Beendet die If-Abfrage.
Next . Mit Next wird der nächste Schleifendurchgang gestartet.
Cells(zellen_usedrange.Row + zellen_usedrange.Rows.Count + 1, zellen_usedrange.Column).Value = summe
Cells ist die Alternative zu Range. Bei Cells wird zuerst die Zeilenzahl und dann die Spaltenzahl angegeben. Der Inhalt der Variable Summe wird in Excel-Zelle D17 eingetragen.

In folgendem Video erkläre ich den UsedRange:

CurrentRegion – Zusammenhängenden Bereich markieren

Mit der Eigenschaft CurrentRegion können Sie einen Zusammenhängenden Bereich markieren. Das funktioniert auch ohne Excel VBA, deswegen machen Sie bitte folgendes Experiment. Aktivieren Sie ein Arbeitsblatt bzw. Datenblatt in dem alle Excel-Zellen leer sind. Drücken Sie jetzt die Tastenkombination Strg + A. Jetzt werden alle Excel-Zellen im Arbeitsblatt markiert.


Sub daten_tabelle_eintragen()
     Range("D5").Value = "Land"
     Range("E5").Value = "Hauptstadt"
     Range("D6").Value = "Deutschland"
     Range("E6").Value = "Berlin"
     Range("D7").Value = "Frankreich"
     Range("E7").Value = "Paris"
     Range("D8").Value = "Schweiz"
     Range("E8").Value = "Bern"
     Range("D9").Value = "Großbritannien"
     Range("E9").Value = "London"
          
     With Range("D5:E9").Font
          .Name = "Arial"
          .Size = 12
     End With
     
     Range("D5:E5").Font.Bold = True
     Columns.EntireColumn.AutoFit
     
End Sub

Erklärung zum Excel VBA Code

Mit der Eigenschaft .Value wird in die Excel-Zellen D5 bis E9 Texte eingetragen.
With Range(„D5:E9“).Font Danach wird mit With … End With in den Excel-Zellen D5 bis E9 die Schriftart und die Schriftgröße gesetzt mit Font.Name und Font.Size .
Range(„D5:E5“).Font.Bold = True Für die Excel-Zellen D5 bis E5 wird Fettdruck aktiviert.
Columns.EntireColumn.AutoFit Setzt die optimale Spaltenbreite.


Sub zellen_currentregion()
  Range("D8").CurrentRegion.Select
End Sub

Erklärung zum Excel VBA Code

Range(„D8“).CurrentRegion.Select . Setzt die CurrentRegion ausgehend von der Excel-Zelle D8.

Folgender Code führt zum gleichen Ergebnis:


Sub zellen_currentregion()
  Range("E5").CurrentRegion.Select
End Sub

Erklärung zum Excel VBA Code

Range(„E5“).CurrentRegion.Select . Setzt die CurrentRegion ausgehend von der Excel-Zelle E5.

In folgendem Video erkläre ich die Eigenschaft CurrentRegion:

Excel VBA-Script per Schalter / Button ausführen

Bis jetzt sind wir immer in den VBA-Editor um VBA-Code auszuführen. Zeit das zu ändern. Im Menüband Entwicklertools gibt es eine Schaltfläche „Einfügen“. Danach hat der Anwender die Wahl „Formularsteuerelemente“ oder „ActiveX-Steuerelemente“ einzufügen. Ich zeige Ihnen wie Sie mit Excel-VBA eine Schaltfläche von den „Formularsteuerelemente“ einfügen können. Damit diese Schalfläche für blinde Menschen nutzbar ist, sorgen wir dafür, dass sie einen Alternativtext hat und per Tastenkürzel ausführbar ausführbar ist. Da der Schaltfläche kein Tastenkürzel zugeordnet werden kann, machen wir einen Trick: Mit Application.OnKey setzen wir ein Tastenkürzel welches in ganz Excel gültig ist. Dieses Tastenkürzel ruft nicht das OnAction-Ereignis der Schaltfläche auf, sondern die Prozedur schalter_vbacode. Für den Anwender sieht das jedoch so aus, als ob der Schaltfläche das Tastenkürzel zugeordnet wurde.


Sub schalter_vbacode()
   With ActiveSheet.Range("A1")
     .Value = "Buttons zur Laufzeit erstellen ist cool!"
     .Font.Name = "Arial"
     .Font.Size = 12
   End With
   
  Range("A1").EntireColumn.AutoFit
End Sub

Erklärung zum Excel VBA Code

With ActiveSheet.Range(„A1“) . Da einige Eigenschaften der Excel-Zelle A1 verändert werden, kommt with zum Einsatz.
.Value = „Buttons zur Laufzeit erstellen ist cool!“ . Trägt einen Text in die Excel-Zelle A1 ein.
.Font.Name = „Arial“ . Der Excel-Zelle A1 wird die Schriftart Arial zugewiesen.
.Font.Size = 12 . der Excel-Zelle A1 wird die Schriftgröße 12 zugewiesen.
End With . Die With-Anweisung wird beendet.
Range(„A1“).EntireColumn.AutoFit . Setzt die optimale Spaltenbreite für die Spalte A.

Jetzt erstellen wir einen Schalter in der Excel-Tabelle mit dem die obere Prozedur aufgerufen wird:


Sub Schalter_Einfuegen()  
    Dim btn As button
    'Parameter von Add: Left, Top, Width, Height
    Set btn = ActiveSheet.Buttons.Add(200, 10, 100, 30)
    
    With btn
        .OnAction = "schalter_vbacode"
        .Caption = "VBA-Code"
        .ShapeRange.AlternativeText = "Excel VBA Code aufrufen"
        
        With .Characters(Start:=1, Length:=8).Font
            .Name = "Arial"
            .Size = 12
        End With
    End With
    
    Application.OnKey "{F2}", "schalter_vbacode"
End Sub

Erklärung zum Excel VBA Code

Dim btn As button . Deklariert eine Variable btn vom Typ button
Set btn = ActiveSheet.Buttons.Add(200, 10, 100, 30) . Fügt eine Schaltfläche ins aktive Tabellenblatt ein. Die Zahlen in der Klammer bedeuten von Links nach rechts: Position in der X-Achse. Position in der Y-Achse. Breite. Höhe.
With btn . With wird verwendet um Tipparbeit zu sparen. Es werden nachfolgend einige Eigenschaften von btn, der Schaltfläche, gesetzt.
.OnAction = „schalter_vbacode“. Wenn der Schalter angeklickt wird, wird die Prozedur schalter_vbacode ausgeführt.
.Caption = „VBA-Code“ . Setzt die Beschriftung des Schalters.
.ShapeRange.AlternativeText = „Excel VBA Code aufrufen“ . Damit blinde Menschen den Sinn und Zweck des Schalters mitgeteilt bekommen, wird ein Alternativtext gesetzt. With .Characters(Start:=1, Length:=8).Font fort folgende. Setzt die Schriftart und die Schriftgröße des Schalters.
Application.OnKey „{F2}“, „schalter_vbacode“ . Setzt ein Tastenkürzel welches in ganz Excel gilt und sorgt dafür, dass die Schalter-Prozedur auch per Tastenkürzel ausführbar ist.

In diesem Video zeige ich wie Sie einen Button zur Laufzeit in eine Excel-Tabelle einfügen:

Excel VBA-Code ausführen, wenn Excel-Zelle aktiv ist und Taste Enter gedrückt wird

Ich habe für den folgenden Code ein Modul „menue_erstellen“ angelegt. Folgende Methode fragt ab ob der Textcursor in einer bestimmten Excel-Zelle ist und die Taste Enter gedrückt wurde. Als erstes simulieren wir eine Art Menü mit folgender Prozedur:


Sub daten_menue()
  Range("C1").Value = "Neu"
  Range("D1").Value = "Löschen"
  Range("E1").Value = "Suchen"
  Range("C1:E1").Font.Name = "Arial"
  Range("C1:E1").Font.Size = 12
  Range("C1:L1").Interior.Color = RGB(249, 249, 249)
End Sub

Erklärung zum Excel VBA Code

Range(„C1“).Value = „Neu“ Trägt den Text „Neu“ in Excel-Zelle C1 ein
Range(„D1“).Value = „Löschen“ Trägt den Text „Löschen“ in Excel-Zelle D1 ein
Range(„E1“).Value = „Suchen“ Trägt den Text „Suchen“ in Excel-Zelle E1 ein
Range(„C1:E1“).Font.Name = „Arial“ Setzt die Schriftart für die Excel-Zellen C1 bis E1 auf Arial
Range(„C1:E1“).Font.Size = 12 Setzt die Schriftart für die Excel-Zellen C1 bis E1 auf 12
Range(„C1:L1“).Interior.Color = RGB(249, 249, 249) Setzt für die Excel-Zellen C1 bis L1 eine Hintergrundfarbe
Dann fragen wir ab ob der Textcuror in der Excel-Zelle C1, D1 oder E1 ist:


Sub ist_cursor_im_menue()
   If ActiveCell.Address = "$C$1" Then
     msgbox "Menü NEU"
   ElseIf ActiveCell.Address = "$D$1" Then
     msgbox "Menü Löschen"
   ElseIf ActiveCell.Address = "$E$1" Then
     msgbox "Menü Suchen"
   End If
End Sub

Erklärung zum Excel VBA Code

If ActiveCell.Address = „$C$1“ Then msgbox „Menü NEU“ Wenn der Textcursor in Excel-Zelle C1 ist wird eine Messagebox angezeigt mit dem Text „Menü NEU“ .
If ActiveCell.Address = „$D$1“ Then msgbox „Menü Löschen“ Wenn der Textcursor in Excel-Zelle D1 ist wird eine Messagebox angezeigt mit dem Text „Menü Löschen“ .
If ActiveCell.Address = „$E$1“ Then msgbox „Menü Löschen“ Wenn der Textcursor in Excel-Zelle E1 ist wird eine Messagebox angezeigt mit dem Text „Menü Suchen“ .

Jetzt sorgen wir dafür, dass wenn der Anwender die Taste Enter drückt, die Prozedur „ist_cursor_im_menue“ aufgerufen wird:


Sub tastenbelegung()
  Application.OnKey "{RETURN}", "ist_cursor_im_menue"
End Sub

Erklärung zum Excel VBA Code

Application.OnKey „{RETURN}“, „ist_cursor_im_menue“ . Es wird die Tastaturbelegung in Excel geändert. Wenn der Anwender die Taste Enter drückt, wird die Prozedur „ist_cursor_im_menue“ ausgeführt.


In folgendem Video erkläre ich, wie Sie Code ausführen können, wenn eine bestimmte Excel-Zelle aktiv ist durch drücken der Taste Enter:

Code ausführen per Tastenkürzel

Es gibt zwei Möglichkeiten VBA-Code per Tastenkürzel auszuführen. Als erstes schreiben wir eine Prozedur. Legen Sie dazu das Modul „codeausfuehren“ an. In diesem Modul schreiben Sie folgende Prozedur:


Sub code_ausfuehren()
  msgbox "Code wurde ausgeführt!"
End Sub

Erklärung zum Excel VBA Code

Diese Prozedur zeigt eine Messagebox an mit dem Text „Code wurde ausgeführt!“.

Makro ein Tastenkürzel zuweisen

Eine Prozedur ist auch ein Makro. Wir können jetzt dem „Makro“ code_ausfuehren ein Tastenkürzel zuweisen. Aktivieren Sie das Menüband „Entwicklertools“. Klicken Sie auf die Schaltfläche „Makros“ oder drücken Sie die Tastenkombination Alt + F8. Markieren Sie das Makro „code_ausfuehren“. Wählen Sie die Schaltfläche „Optionen“ oder drücken Sie die Tastenkombination Alt + o. Hier können Sie in das Eingabefeld „Tastenkombination“ einen Buchstaben eingeben. Der Buchstabe muss dann um das Makro auszuführen zusammen mit der Taste „Strg“ gedrückt werden. Bei der Wahl des Buchstabens sollten Sie darüber nachdenken, dass Sie keine Tastenkombination wählen die von Excel oder dem Betriebssystem Windows bereits genutzt werden. Strg + C ist in ganz Windows kopieren und Strg + V ist in ganz Windows einfügen. Diese beiden Tastenkombinationen sollten Sie nicht verwenden um das Makro auszuführen. Ich habe in das Eingabefeld b eingegeben. Das bedeutet, mein Makro wird ausgeführt, wenn der Anwender die Tastenkombination Strg + b ausführt. Aktivieren Sie den Schalter „OK“. Aktivieren Sie den Schalter „Abbrechen“. Jetzt können Sie testen ob Ihr Tastenkürzel funktioniert. Drücken Sie Strg + b gleichzeitig. Wenn jetzt ein Meldungsfenster erscheint in dem der Text steht: Code wurde ausgeführt! Dann haben Sie alles richtig gemacht.

Im folgenden Video zeige ich, wie Excel VBA Code per Tastenkürzel ausgeführt werden kann:

Code ausführen mit der Symbolleiste für den Schnellzugriff

Nicht nur um einfach Code auszuführen, sondern auch um Ihrer Excel-VBA-Anwendung ein Menü zu geben, welches für Menschen ohne und mit Behinderung sehr gut zu bedienen ist, eignet sich die Symbolleiste für den Schnellzugriff. Zuerst ein bisschen Code um die Symbolleiste für den Schnellzugriff testen zu können benötigen wir Excel VBA-Code:


Sub excel_zeile_hoch()
  If ActiveCell.Row > 1 Then
    ActiveCell.Offset(-1, 0).Select
  End If
End Sub

Erklärung zum Excel VBA Code

Wenn die aktuelle Excel-Zeile als 1 ist, wird der Textcursor eine Excel-Zeile nach oben bewegt.
ActiveCell.Offset(-1, 0).Select . Bewegt den Textcursor eine Excelzeile nach oben


Sub excel_zeile_runter()
    ActiveCell.Offset(1, 0).Select
End Sub

Erklärung zum Excel VBA Code

Wenn die aktuelle Excel-Zeile als 1 ist, wird der Textcursor eine Excel-Zeile nach oben bewegt.
ActiveCell.Offset(1, 0).Select . Bewegt den Textcursor eine Excelzeile nach unten

Symbolleiste für den Schnellzugriff ein oder ausblenden

Wählen Sie das Menü „Datei“, dann „Optionen“. Jetzt wählen Sie „Symbolleiste für den Schnellzugriff“. Unter der Liste „Befehle auswählen“ gibt ein Kästchen zum anhaken mit dem Text rechts daneben „Symbolleiste für den Schnellzugriff unter dem Menüband anzeigen“. Wenn in diesem Kästchen ein Haken ist, wird die Symbolleiste für den Schnellzugriff in der Excel-Oberfläche angezeigt.

Schalter der Symbolleiste für den Schnellzugriff hinzufügen

Wählen Sie das Menü „Datei“, dann „Optionen“. Jetzt wählen Sie „Symbolleiste für den Schnellzugriff“. Auf der rechten Seite bei „Symbolleiste für den Schnellzugriff anpassen“ können Sie wählen ob die Symbolleiste nur in der geöffneten Arbeitsmappe oder in allen Arbeitsmappen angezeigt wird. Die Standardeinstellung ist für alle Dokumente. Wenn Sie eine Schnellzugriffsleiste für einen Kunden erstellen, macht es Sinn, dass Sie die aktuelle Arbeitsmappe wählen. Öffnen Sie auf der linken Seite die aufklappbare Liste unter „Befehle auswählen“. Wählen Sie den Eintrag „Makros“. Hier werden alle Makros bzw. Prozeduren angezeigt, die Sie in dieser Arbeitsmappe geschrieben haben. Markieren Sie das Makro „excel_zeile_hoch“. Klicken Sie auf den Schalter „Hinzufügen“. Jetzt ist Ihr Makro in der Symbolleiste für den Schnellzugriff. Wählen Sie auf der linken Seite das Makro excel_zeile_runter. Klicken Sie auf den Schalter „Hinzufügen“. Jetzt haben Sie 2 Makros in der Symbolleiste für den Schnellzugriff. Jetzt können Sie Ihren Makros noch ein Symbol Hinzufügen und den Namen der Schaltfläche ändern. Wählen Sie das Marko „excel_zeile_hoch“ und wählen Sie den Schalter „Ändern“. Ändern Sie den Anzeigenamen auf „Datensatz hoch“. Wählen Sie den dicken Pfeil nach oben als Symbol und Klicken auf den Schalter „OK“. Wählen Sie das Marko „excel_zeile_runter“ und wählen Sie den Schalter „Ändern“. Ändern Sie den Anzeigenamen auf „Datensatz runter“. Wählen Sie den dicken Pfeil nach unten als Symbol und Klicken auf den Schalter „OK“. Schließen Sie jetzt das Fenster Excel-Optionen mit dem Schalter OK. Jetzt wird die Symbolleiste für den Schnellzugriff angezeigt mit 2 Symbolen.

Die neu eingefügten Schalter nutzen

Die einfachste Methode die neuen Schalter zu nutzen ist das anklicken der Schalter mit der Computermaus. Jedoch gibt es auch eine sehr gute Nachricht für blinde Menschen. Die Symbolleiste für den Schnellzugriff ist für Tastaturbedienung spitze! Nach dem Drücken der Alt-Taste werden Zahlen angezeigt für die eingefügten Schalter. Bei mir hat der Schalter „Datensatz hoch“ die 1 und der Schalter „Datensatz runter“ die 2. Jetzt funktioniert folgende Bedienung richtig gut: Ich halte die Taste Alt gedrückt und drücke gleichzeitig die Taste 1 oder die Taste 2. So macht Tastaturbedienung richtig Spaß!

In folgendem Video erkläre ich wie Sie Code ausführen können mit der Symbolleiste für den Schnellzugriff:

Die Symbolleiste für den Schnellzugriff als barrierefreies Menü einsetzen

Das Hauptproblem beim Programmieren mit Excel VBA in Bezug auf Barrierefreiheit ist, Bedienelemente zu erstellen die auch für blinde Menschen bedienbar sind. Schaltflächen wie zum Beispiel Formularsteuerelemente die in eine Excel-Tabelle eingefügt werden können, sind per Tabulatortaste nicht erreichbar. Mit Application.OnKey kann diesem Schalter ein Tastenkürzel zugeordnet werden, aber dann muss der Entwickler dafür sorgen, dass dem Anwender das Tastenkürzel in irgendeiner Form mitgeteilt wird. Ein barrierefreies Menü, welches für blinde Menschen bedienbar ist, sollte folgende Bedingungen erfüllen:

  • Screenreadertauglichkeit
  • Tastaturbedienbarkeit

Screenreadertauglichkeit – Was ist das?

Blinde Menschen benötigen zur Bedienung von Software eine Vorlesefunktion. Diese Vorlesefunktion nennt sich Screenreader ( https://www.marlem-software.de/marlemblog/2020/02/09/was-ist-ein-screenreader/ ) . Ein barrierefreies Menü muss so Beschaffen sein, dass die anklickbaren Flächen von Screenreadern vorgelesen werden.

Tastaturbedienbarkeit

Blinde Menschen können keine Computermaus bedienen. Deswegen muss ein barrierefreies Menü komplett per Tastatur bedienbar sein. Am besten ist es wenn Schaltflächen per Tabulatortaste erreichbar sind. Zusätzlich ist es geschickt, wenn Schaltflächen per Tabulatortaste erreichbar sind. Die Symbolleiste für den Schnellzugriff erfüllt beide Kriterien. Wie Sie Schaltflächen der Symbolleiste für den Schnellzugriff hinzufügen habe ich hier erklärt: Code ausführen mit der Symbolleiste für den Schnellzugriff 

Tastaturbedienbarkeit testen

Um zu testen, ob die Schaltflächen der Symbolleiste für den Schnellzugriff drücken Sie die Taste „Alt“. Drücken Sie so lange die Cursortaste runter, bis die Symbolleiste für den Schnellzugriff den Fokus hat. Mit Cursortaste links und Cursortaste rechts kann ich den eingefügten Symbolen den Tastaturfokus geben. Mit der Taste Enter kann ich die Prozedur ausgeführt wegen die dem Schaltersymbol zugeordnet ist. Die Tastaturbedienbarkeit der Symbolleiste für den Schnellzugriff ist erfüllt. Es gibt noch eine andere Methode, wie die eingefügten Schaltflächen noch schneller per Tastatur bedient werden können. Nach dem drücken der Taste Alt werden Zahlen eingeblendet. Meine neu eingefügten Schaltflächen haben die Zahlen 1 und 2. Wenn ich die Tasten Alt + 1 gleichzeitig drücke, bewegt sich der Textcursor eine Excel-Zeile nach oben. Wenn ich die Tasten Alt + 2 gleichzeitig drücke, bewegt sich der Textcursor eine Excel-Zeile nach unten. Diese Art der Tastaturbedienbarkeit ist genial.

Screenreadertauglichkeit testen

Ich habe den Screenreader NVDA installiert der kostenlos aus dem Internet heruntergeladen werden kann: NV Access | Download NVDA Ich teste die Screenreadertauglichkeit der Symbolleiste für den Schnellzugriff mit dem Screenreader NVDA. Ich starte den Screenreader NVDA und mache die gleichen Schritte wie oben bei „Tastaturbedienbarkeit testen“. Der Screenreader NVDA liest die Kurzhilfen bzw. Tooltipps der Schaltflächen vor. Juhu! Die Symbolleiste für den Schnellzugriff ist screenreadertauglich.

Mit der Symbolleiste für den Schnellzugriff ist es möglich ein barrierefreies Menü zu erstellen, welches für Menschen mit Behinderungen und Menschen ohne Behinderungen bedienbar ist.

In diesem Video zeige ich, warum die Symbolleiste für den Schnellzugriff sich hervorragend dazu eignet, ein barrierefreies Menü zu erstellen:

Textdateien, auch CSV, importieren bzw. einlesen

Als Textdatei wird in der Informationstechnik eine Datei bezeichnet, die darstellbare Zeichen enthält und zum Speichern, Bearbeiten, zur Datenübertragung und Lesen dient. Textdateien können im Betriebssystem Windows mit dem Editor „Notepad“ geöffnet werden.

CSV ist ein Dateiformat. CSV steht für Comma-separated values und beschreibt den Aufbau einer Textdatei zur Speicherung oder zum Austausch einfach strukturierter Daten. Die Dateinamenserweiterung lautet .csv.

Eine tolle Sache bei Excel ist, dass auch Textdateien die einen bestimmten Aufbau haben geöffnet werden können und als Excel-Datei dargestellt werden können. Diese Textdateien benötigen ein Trennzeichen, auch Separator genannt, damit die Texte in unterschiedliche Excel-Spalten eingelesen werden können. Hierbei muss ein Problem beachtet werden, die korrekte Darstellung der Umlaute (=äüö). Damit die Umlaute korrekt dargestellt werden, muss darauf geachtet werden, dass das richtige Zeichenformat, utf-8, verwendet wird.

Eine Textdatei zu lesen funktioniert in allen Programmiersprachen, auch in Excel VBA, gleich. Die Textdatei wird geöffnet und mit Hilfe einer Schleife zeilenweise gelesen. Die Schleife wird so lange durchlaufen, bis das Ende der Textdatei erreicht ist. Ende der Datei heißt in der Informatik „end of file“ und wird „eof“ abgekürzt. Weil wir einen Stream verwenden, heißt es bei uns End of Stream, abgekürzt eos.

Das importieren von Textdateien ist sehr wichtig für den Datenaustausch mit anderen Programmen. Excel-Dateien lassen sich einfacher bearbeiten als Textdateien.

Die Prozedur die ich Ihnen zeige, erlaubt es Textdateien mit unterschiedlichen Separatoren in das aktive Arbeitsblatt zu importieren. Zum lesen der Datei wird das Stream-Objekt (ADO) verwendet. Ein ADODB.Stream-Objekt ist ein Objekt aus der ActiveX Data Objects (ADO)-Bibliothek, das in VBA verwendet wird, um Datenströme zu lesen oder zu schreiben. Es bietet Methoden und Eigenschaften zum Lesen, Schreiben und Verwalten von Daten in einem Stream. Das Stream-Objekt (ADO) bietet die Möglichkeit das Zeichenformat festzulegen mit der Eigenschaft „CharSet“ und mit der Methode LoadFromFile kann der Inhalt eine Textdatei in das Objekt geladen werden. Der Stream wird mit einer Do Until-Schleife zeilenweise gelesen. Der Inhalt der aktuellen Zeile wird geteilt mit dem Trennzeichen und die einzelnen Werte werden in einem Array gespeichert. Mit einer For-Schleife wird das Array durchlaufen. Die Werte des Arrays werden in die Excel-Zellen eingetragen. Zum Schluss wird der Speicherplatz von objStream wieder freigegeben.


Sub daten_import(dateiname, seperator As String)
    Dim LineFromFile As String
    Dim LineItems As Variant
    Dim row_number As Long
    Dim objStream As Object

    Set objStream = CreateObject("ADODB.Stream")
    objStream.CharSet = "utf-8"
    objStream.Open
    objStream.LoadFromFile (dateiname)

    row_number = 1

    Do Until objStream.EOS
        LineFromFile = objStream.ReadText(-2)
        LineItems = Split(LineFromFile, seperator)

        For i = 0 To UBound(LineItems)
          ActiveSheet.Cells(row_number, i + 1).Value = LineItems(i)
        Next
        row_number = row_number + 1

    Loop
    Set objStream = Nothing

End Sub

Erklärung zum Excel VBA Code

Dim LineFromFile As String Diese Zeile deklariert eine Variable namens LineFromFile als String. Sie wird verwendet, um den Inhalt jeder Zeile der importierten Datei zu speichern.
Dim LineItems As Variant Diese Zeile deklariert eine Variable namens LineItems als Variant. Diese Variable wird verwendet, um die aufgeteilten Werte jeder Zeile zu speichern.
Dim row_number As Long Diese Zeile deklariert eine Variable namens row_number als Long. Diese Variable wird verwendet, um den Zeilenindex in Excel zu verfolgen, in den die Daten eingefügt werden.
Dim objStream As Object Diese Zeile deklariert eine Variable namens objStream als Objekt. Diese Variable wird verwendet, um einen ADODB.Stream-Objekt zu erstellen, das zum Lesen der Datei verwendet wird.
Set objStream = CreateObject(„ADODB.Stream“) Diese Zeile erstellt ein ADODB.Stream-Objekt.
objStream.CharSet = „utf-8“ Diese Zeile legt das Zeichenformat des ADODB.Stream-Objekts auf UTF-8 fest. Dadurch wird sichergestellt, dass die Daten in der Datei ordnungsgemäß interpretiert werden.
objStream.Open Diese Zeile öffnet den ADODB.Stream-Objekt.
objStream.LoadFromFile (dateiname) Diese Zeile lädt den Inhalt der angegebenen Datei in den ADODB.Stream-Objekt.
row_number = 1 Diese Zeile setzt den Wert der row_number-Variable auf 1, um bei der ersten Zeile in Excel zu beginnen.
Do Until objStream.EOS Dies ist eine Schleife, die solange wiederholt wird, bis das Ende der Datei erreicht ist (objStream.EOS gibt True zurück).
LineFromFile = objStream.ReadText(-2) Diese Zeile liest den Inhalt der aktuellen Zeile aus dem ADODB.Stream-Objekt und speichert ihn in der LineFromFile-Variable.
LineItems = Split(LineFromFile, seperator) Diese Zeile teilt den Inhalt der aktuellen Zeile anhand des angegebenen Trennzeichens (seperator) und speichert die einzelnen Werte in dem LineItems-Array.
For i = 0 To UBound(LineItems) Dies ist eine Schleife, die jedes Element im LineItems-Array durchläuft.
ActiveSheet.Cells(row_number, i + 1).Value = LineItems(i) Diese Zeile fügt den Wert des aktuellen Elements (LineItems(i)) in die entsprechende Zelle in der aktuellen Zeile (row_number) und Spalte (i + 1) im aktiven Arbeitsblatt ein.
Next Dies beendet die Schleife für das aktuelle Element im LineItems-Array und geht zum nächsten Element über.
row_number = row_number + 1 Diese Zeile erhöht den Wert der row_number-Variable um 1, um zur nächsten Zeile in Excel zu wechseln.
Loop Dies beendet die Schleife für die aktuelle Zeile in der Datei und kehrt zu Schritt 12 zurück, um die nächste Zeile zu lesen, falls die Datei noch nicht vollständig eingelesen wurde.
Set objStream = Nothing Diese Zeile setzt die objStream-Variable auf Nothing, um das ADODB.Stream-Objekt freizugeben und Speicherplatz freizugeben.

Folgende Textdateien können mit dieser Prozedur eingelesen werden:

Textdatei mit Separator Leerzeichen

Dateiname „personen.txt“.

Markus 53
Sabine 48
Susanne 77
Özdemir 32

Aufruf:


Sub test()
 daten_import "C:\Projekte\Youtube\personen.txt", " "
End Sub

Erklärung zum Excel VBA Code

Bei der Datei „personen.txt“ ist das Trennzeichen ein Leerzeichen. Die Prozedur daten_import wird aufgerufen mit 2 Parameter.
Der erste Parameter ist die Angabe der Textdatei personen.txt mit dem Verzeichnis in dem diese gespeichert ist.
Der zweite Parameter ist die Angabe des Trennzeichens, hier ein Leerzeichen.

Textdatei (=CSV) mit Separator Semikolon

Dateiname „personen.csv“.

Markus;53
Sabine;48
Susanne;77
Özdemir;32

Aufruf:


Sub test()
daten_import "C:\Projekte\Youtube\personen.csv", ";"
End Sub

Erklärung zum Excel VBA Code

Bei der Datei „personen.csv“ ist das Trennzeichen ein Semikolon. Die Prozedur daten_import wird aufgerufen mit 2 Parameter.
Der erste Parameter ist die Angabe der Textdatei personen.csv mit dem Verzeichnis in dem diese gespeichert ist.
Der zweite Parameter ist die Angabe des Trennzeichens, hier ein Semikolon.

In diesem Video erkläre ich das importieren von Textdateien:

Textdateien, auch CSV, exportieren

Als Textdatei wird in der Informationstechnik eine Datei bezeichnet, die darstellbare Zeichen enthält und zum Speichern, Bearbeiten, zur Datenübertragung und Lesen dient. Textdateien können im Betriebssystem Windows mit dem Editor „Notepad“ geöffnet werden.

CSV ist ein Dateiformat. CSV steht für Comma-separated values und beschreibt den Aufbau einer Textdatei zur Speicherung oder zum Austausch einfach strukturierter Daten. Die Dateinamenserweiterung lautet .csv.

Eine tolle Sache bei Excel ist, dass eine Excel Arbeitsmappe als Textdatei gespeichert bzw. exportiert werden kann. Diese Textdateien benötigen ein Trennzeichen, auch Separator genannt, damit die Texte in unterschiedliche Excel-Spalten beim Schreiben dargestellt werden können. Hierbei muss ein Problem beachtet werden, die korrekte Darstellung der Umlaute (=äüö). Damit die Umlaute korrekt dargestellt werden, muss darauf geachtet werden, dass das richtige Zeichenformat, utf-8, verwendet wird.

Eine Textdatei zu schreiben funktioniert in allen Programmiersprachen, auch in Excel VBA, gleich. Die Textdatei wird erstellt und mit Hilfe einer Schleife zeilenweise der Inhalt der Excel-Tabelle in die Textdatei geschrieben. Die Schleife wird so lange durchlaufen, bis zu einer Excel-Zelle ohne Inhalt. 

Das exportieren von Textdateien ist sehr wichtig für den Datenaustausch mit anderen Programmen. Excel-Dateien lassen sich einfacher bearbeiten als Textdateien.


Sub daten_export(dateiname, seperator As String)
    Dim objStream As Object
    Dim RowNumber As Long
    Dim ColNumber As Long
    Dim LineText As String
    Set objStream = CreateObject("ADODB.Stream")
    
    objStream.Type = 2 'Textdatentyp
    objStream.CharSet = "UTF-8" 'Zeichensatz festlegen
    objStream.Open
    
    RowNumber = 1
    Do Until IsEmpty(ActiveSheet.Cells(RowNumber, 1))
        LineText = ""
        ColNumber = 1
    
        Do Until IsEmpty(ActiveSheet.Cells(RowNumber, ColNumber))
            If ColNumber > 1 Then
                LineText = LineText & seperator
            End If
            LineText = LineText & ActiveSheet.Cells(RowNumber, ColNumber).Value
            ColNumber = ColNumber + 1
        Loop
    
        objStream.WriteText LineText & vbCrLf 'Zeile in den Datenstrom schreiben
        RowNumber = RowNumber + 1
    Loop
    
    objStream.SaveToFile dateiname, 2 'Speichern der Daten im Stream in eine Datei
    
    objStream.Close
    Set objStream = Nothing
End Sub

Erklärung zum Excel VBA Code

Die Prozedur daten_export nimmt zwei Parameter entgegen: dateiname (der Name der Zieltexdatei) und seperator (das Trennzeichen, das zwischen den Datenwerten in der Textdatei verwendet wird).
Mit Set objStream = CreateObject(„ADODB.Stream“) wird ein ADODB.Stream-Objekt erstellt und der Variablen objStream zugewiesen.
objStream.Type = 2 legt den Datentyp des Streams auf Text fest.
objStream.Charset = „UTF-8“ legt den Zeichensatz des Streams auf UTF-8 fest, um sicherzustellen, dass Sonderzeichen korrekt behandelt werden.
objStream.Open öffnet den Datenstrom.
Die Variable RowNumber wird auf 1 gesetzt, da der Export mit der ersten Zeile beginnen soll.
Die äußere Schleife Do Until IsEmpty(ActiveSheet.Cells(RowNumber, 1)) überprüft, ob die Zelle in der aktuellen Zeile und ersten Spalte des aktiven Arbeitsblatts leer ist. Wenn dies der Fall ist, wird die Schleife beendet.
Innerhalb dieser Schleife wird der Text für eine Zeile in der Textdatei zusammengesetzt.
Die Variable LineText wird zu Beginn jedes Schleifendurchlaufs zurückgesetzt.
Die Variable ColNumber wird auf 1 gesetzt, da der Export mit der ersten Spalte beginnen soll.
Die innere Schleife Do Until IsEmpty(ActiveSheet.Cells(RowNumber, ColNumber)) überprüft, ob die Zelle in der aktuellen Zeile und Spalte leer ist. Wenn dies der Fall ist, wird die Schleife beendet.
Innerhalb dieser Schleife wird der Wert der Zelle zur Variable LineText hinzugefügt. Vor dem Hinzufügen wird überprüft, ob es sich um die erste Spalte handelt. Falls nicht, wird das Trennzeichen aus dem Parameter seperator zu LineText hinzugefügt.
objStream.WriteText LineText & vbCrLf schreibt die zusammengesetzte Zeile in den Datenstrom. Die WriteText-Methode wird verwendet, um den Text in den Datenstrom zu schreiben. & vbCrLf fügt einen Zeilenumbruch hinzu, um sicherzustellen, dass jede Zeile in der Textdatei eine neue Zeile beginnt.
RowNumber = RowNumber + 1 erhöht die Variable RowNumber, um zur nächsten Zeile im Arbeitsblatt zu wechseln.
Die Do Until IsEmpty(ActiveSheet.Cells(RowNumber, ColNumber)) wird solange wiederholt, bis eine leere Zelle in der ersten Spalte des Arbeitsblatts erreicht wird und die äußere Schleife beendet wird.
objStream.SaveToFile dateiname, 2 speichert den Datenstrom in die Textdatei mit dem angegebenen Dateinamen.
objStream.Close schließt den Datenstrom.
Set objStream = Nothing gibt den Speicherplatz des objStream-Objekts frei.
Folgende Textdateien können mit dieser Prozedur erstellt werden:

Textdatei mit Separator Leerzeichen

Dateiname „personen.txt“.

Markus 53
Sabine 48
Susanne 77
Özdemir 32

Aufruf:


Sub export_txt()
 daten_export "C:\Projekte\Youtube\export.txt", " "
End Sub

Erklärung zum Excel VBA Code

Unsere Exportprozedur wird aufgerufen mit Leerzeichen als Trennzeichen.

Textdatei (=CSV) mit Separator Semikolon

Dateiname „personen.csv“.

Markus;53
Sabine;48
Susanne;77
Özdemir;32

Aufruf:


Sub export_csv()
 daten_export "C:\Projekte\Youtube\export.csv", ";"
End Sub

Erklärung zum Excel VBA Code

Unsere Exportprozedur wird aufgerufen mit Semikolon als Trennzeichen.

In diesem Video erkläre ich das Exportieren von Excel-Tabellenblätter in eine Textdatei:

Drucken von Excel-Tabellen

Das Drucken von Excel-Tabellen ist sehr wichtig. In diesem Abschnitt erkläre ich Ihnen die Grundlagen wie Sie mit Excel VBA Druckfunktionen programmieren können. Das Tabellenblatt (=Sheet) und die Range haben die Methode PrintOut. Mit dieser Methode kann gedruckt werden. Das Tabellenblatt (=Sheet) und die Range haben die Methode PrintPreview. Mit dieser Methode kann eine Druckvorschau angezeigt werden. Das PageSetup-Objekt enthält alle Attribute zur Seiteneinrichtung (linker Rand, unterer Rand, Papiergröße usw.) als Eigenschaften. Ich zeige Ihnen wie Sie mit der Eigenschaft Orientation festlegen können ob drucken oder Druckvorschau im Hochformat oder Querformat umgesetzt wird. Damit wir Daten haben die gedruckt werden können folgende Prozedur:


Sub daten_in_tabelle()
  Range("D1").Value = "Vorname"
  Range("E1").Value = "Nachname"
  Range("F1").Value = "Telefonnummer"
  Range("D2").Value = "Max"
  Range("E2").Value = "Mustermann"
  Range("F2").Value = "0000/1111"
  Range("D3").Value = "Susanne"
  Range("E3").Value = "Musterfrau"
  Range("F3").Value = "1111/2222"
  
  Range("D1:F1").Font.Bold = "True"
  With Range("D1:F3").Font
    .Size = 12
    .Name = "Arial"
  End With
  
  Range("D:F").EntireColumn.AutoFit
  
End Sub

Erklärung zum Excel VBA Code

Es werden Texte in Excel-Zellen eingetragen.
Range(„D1:F1“).Font.Bold = „True“ . Die Inhalte der Excel-Zellen D1 bis F1 sollen fettgedruckt dargestellt werden.
With Range(„D1:F3“).Font ff. Für die Excel-Zellen D1 bis F3 werden Schriftart und Schriftgröße festgelegt.

Aktives Tabellenblatt drucken


Sub aktives_tabellenblatt_drucken()
  ActiveSheet.PrintOut
End Sub

Erklärung zum Excel VBA Code

Das aktive Tabellenblatt wird mit der Methode PrintOut gedruckt.

Ein bestimmtes Tabellenblatt drucken


Sub bestimmtes_tabellenblatt_drucken()
  Sheets("Tabelle1").PrintOut
End Sub

Erklärung zum Excel VBA Code

Das Tabellenblatt „Tabelle1“ wird mit der Methode PrintOut gedruckt.

Anzahl der Kopien beim Drucken angeben


Sub aktives_tabellenblatt_drucken_anzahlkopien()
  ActiveSheet.PrintOut Copies:=2
End Sub

Erklärung zum Excel VBA Code

Mit Copies:=2 wird festgelegt, dass der Ausdruck zweimal gedruckt weredn soll.

Druckvorschau für aktives Tabellenblatt


Sub aktives_tabellenblatt_druckvorschau()
  ActiveSheet.PrintPreview
End Sub

Erklärung zum Excel VBA Code

Mit PrintPreview wird vom aktiven Tabellenblatt eine Druckvorschau angezeigt.

Druckvorschau für einen bestimmten Bereich


Sub bestimmter_bereich_druckvorschau()
  ActiveSheet.Range("D2:F3").PrintPreview
End Sub

Erklärung zum Excel VBA Code

Mit PrintPreview wird vo den Excel-Zellen D2 bis F3 eine Druckvorschau angezeigt.

Querformat und Hochformat Vorschau


Sub aktives_tabellenblatt_druckvorschau_hoch_quer(format As String)
  If format = "Hochformat" Then
    ActiveSheet.PageSetup.Orientation = xlPortrait
  ElseIf format = "Querformat" Then
    ActiveSheet.PageSetup.Orientation = xlLandscape
  End If
  
  ActiveSheet.PrintPreview
End Sub

Erklärung zum Excel VBA Code

If format = „Hochformat“ Then ActiveSheet.PageSetup.Orientation = xlPortrait . Wenn der Wert der Parameter-Variable „format“ „Hochformat“ ist, dann wird die Eigenschaft Orientation des Objektes PageSetup auf xlPortrait gesetzt.
ElseIf format = „Querformat“ Then ActiveSheet.PageSetup.Orientation = xlLandscape Wenn der Wert der Parameter-Variable „format“ „Querformat“ ist, dann wird die Eigenschaft Orientation des Objektes PageSetup auf xlLandscape gesetzt.
End If . Beendet die If-Abfrage.
ActiveSheet.PrintPreview . Zeigt die Druckvorschau der Excel-Tabelle an.


Sub aktives_tabellenblatt_druckvorschau_hoch_quer(format As String)
Sub test()
  aktives_tabellenblatt_druckvorschau_hoch_quer ("Hochformat")
End Sub

Erklärung zum Excel VBA Code

Die Prozedur „aktives_tabellenblatt_druckvorschau_hoch_quer“ wird mit dem Parameter „Hochformat“ aufgerufen.


Sub aktives_tabellenblatt_druckvorschau_hoch_quer(format As String)
Sub test()
  aktives_tabellenblatt_druckvorschau_hoch_quer ("Querformat")
End Sub

Erklärung zum Excel VBA Code

Die Prozedur „aktives_tabellenblatt_druckvorschau_hoch_quer“ wird mit dem Parameter „Querformat“ aufgerufen.

In folgendem Video wird gezeigt wie Sie mit Excel VBA Druckfunktionen programmieren können:

Debuggen / Fehler finden und verbessern

Egal wie lange Sie schon Programmieren, beim Programmieren passieren immer Fehler, mir auch! Wenn Sie beim Programmieren einen Fehler gemacht haben, ist es wichtig, dass Sie Methoden kennen wie Sie diesen Fehler finden und beheben können. Das erkläre ich in diesem Abschnitt. Wir schauen uns unterschiedliche Arten von Fehler an.

Syntaxfehler

Syntaxfehler sind Verstöße gegen syntaktische Regeln einer Programmiersprache. Für diesen Abschnitt ist es wichtig, dass bei Ihnen im Editor in der ersten Zeile Option Explicit steht.


Sub syntaxfehler()
  Range("A1".Value = "Markus"
End Sub

Wenn Sie diesen Code ausführen möchten, erscheint eine Meldung „Syntaxfehler“. Es erscheint am linken Rand ein gelber Pfeil und Sub syntaxfehler() wird Gelb hinterlegt.
Was haben wir falsch gemacht? Wir haben nach Range eine runde Klammer geöffnet, aber nicht wieder geschlossen. So kompiliert der Code:


Sub kein_syntaxfehler()
  Range("A1").Value = "Markus"
End Sub

Kompilierungsfehler

Beim Auftreten eines Kompilierungsfehlers haben wir alles richtig geschrieben. Aber es kann zum Beispiel sein, dass eine Variable verwendet wird, die gar nicht deklariert ist.


Sub kompilierungsfehler()
  Dim text As String
  text = "Markus"
  Range("A1").Value = vtext
End Sub

Die Variable vtext wurde nicht deklariert, deswegen erscheint ein Meldungsfenster „Fehler beim Kompilieren: Variable nicht definiert“.
So funktioniert die Prozedur:


Sub kein_kompilierungsfehler()
  Dim text As String
  text = "Markus"
  Range("A1").Value = text
End Sub

Laufzeitfehler

Ein Laufzeitfehler tritt erst auf, wenn ein Programm gestartet wurde bzw. läuft.


Sub laufzeitfehler()
  Dim i As Integer
  For i = 0 To 3
    Cells(i, 1).Value = i
  Next
End Sub

Bei Cells wird erst die Zeile, dann die Spalte angegeben. Die Zeile 0 gibt es aber nicht. Deswegen gibt es einen Laufzeitfehler.
So funktioniert es:


Sub laufzeitfehler()
  Dim i As Integer
  For i = 1 To 3
    Cells(i, 1).Value = i
  Next
End Sub

Haltepunkt setzen

Bei großen Prozeduren macht es Sinn einen Haltepunkt zu setzen und dann von diesem Haltepunkt aus, den Fehler zu suchen. Einen Haltepunkt setzen machen Sie wie folgt: Gehen Sie mit dem Textcursor in die Zeile in der Sie den Haltepunkt setzen möchten. Setzen Sie den Haltepunkt mit dem Menü „Debuggen“, „Haltepunkt ein/aus“ oder der Taste F9. Wenn Sie jetzt den Code Schrittweise durchgehen möchten, machen Sie das mit dem Menü „Debuggen“, „Einzelschritt“ oder Taste F8. Folgender Code:


Sub haltepunkt_setzen()
  Dim i As Integer
  For i = 1 To 3
    Cells(i, 1).Value = i
  Next

  Cells(6, 0).Value = "Hallo"
End Sub

Gehen Sie mit dem Textcursor in die Codezeile Cells(6, 0).Value = „Hallo“
Setzen Sie einen Haltepunkt mit Taste F8. Starten Sie die Prozedur mit Taste F5. Die Prozedur läuft durch bis zum gesetzten Haltepunkt. Jetzt können Sie mit Taste F8 für Einzelschritt fortfahren. Es erscheint eine Fehlermeldung. Beheben Sie Ihren Fehler:


Sub haltepunkt_setzen()
  Dim i As Integer
  For i = 1 To 3
    Cells(i, 1).Value = i
  Next

  Cells(6, 1).Value = "Hallo"
End Sub

Starten Sie die Prozedur mit Taste F5. Die Prozedur wird wieder ausgeführt bis zum Haltepunkt. Wenn Sie jetzt mit Taste F8 für Einzelschritt fortfahren erscheint keine Fehlermeldung. Sie können den Haltepunkt löschen mit dem Menü „Debuggen“, „Haltepunkt ein/aus“ oder der Taste F9.

In folgendem Video erkläre ich das Debuggen bzw. Fehler suchen mit Excel VBA:

Code in allen Arbeitsmappen nutzen: Die Persönliche Arbeitsmappe

Bis jetzt habe immer alle Prozeduren in den Excel-Arbeitsmappen neu geschrieben. Aber das macht keinen Sinn. Als erstes zeige ich Ihnen wie Sie code in der Persönlichen Arbeitsmappe speichern können und diesen Code in anderen Excel-Arbeitsmappen nutzen können.

Anlegen der persönlichen Arbeitsmappe

Zeichen Sie ein kurzes Makro auf, so wie ich es im Abschnitt Makros aufzeichnen erklärt habe. Allerdings wählen Sie bei „Makro speichern in:“ „Persönliche Makroarbeitsmappe“. Das Makro kann ganz kurz sein. Zum Beispiel Sie tragen Ihren Vornamen in eine Excel-Zelle ein. Danach beenden Sie die Makroaufzeichnung. Öffnen Sie den VBA-Editor. Markieren Sie im Fenster „Projekt – VBAProject“ das Objekt „VBAProject (PERSONAL.XLSB)“. Wählen Sie das Menü „Datei“, „PERSONAL.XLSB speichern“ oder drücken Sie das Tastenkürzel Strg + S. Jetzt wurde die Datei PERSONAL.XLSB angelegt.

Speicherort der persönlichen Arbeitsmappe herausfinden

Blenden Sie das Fenster „Direktbereich“ ein, entweder über das Menü „Ansicht“, „Direktfenster“ oder drücken Sie alternativ das Tastenkürzel Strg + G. Geben Sie in das Direktfenster folgendes Kommando ein und drücken Sie danach die Taste Enter:
?ThisWorkbook.Path
Jetzt wird der Pfad ausgegeben in dem die Datei PERSONAL.XLSB sich befindet.

Prozedur in persönlicher Arbeitsmappe speichern

Markieren Sie im Fenster „Projekt – VBAProject“ das Objekt „VBAProject (PERSONAL.XLSB)“. Legen Sie ein Modul an mit Menü „Einfügen“, „Modul“. Geben Sie dem neuen Modul den Namen “ Schrift_Mathe“. Schreiben Sie folgende 2 Prozeduren in dieses Modul:


Sub schrift_festlegen(bereich As Range)
  With bereich
    .Font.Name = "Arial"
    .Font.Size = 12
  End With
End Sub

Erklärung zum Excel VBA Code

Bereich ist vom Typ Range.
With spart Tipparbeit.
.Font.Name = „Arial“ . Setzt die Schriftart Arial in bereich
.Font.Size = 12 . Setzt die Schriftgröße auf 12 in bereich
End With . Beendet die With-Anweisung.


Sub addiere(zahl1, zahl2 As Double)
  MsgBox zahl1 + zahl2
End Sub

Erklärung zum Excel VBA Code

Es wird ein Meldungsfenster angezeigt mit dem Ergebnis von zahl1 + zahl2

Prozeduren aus der Persönlichen Arbeitsmappe aufrufen

Das Aufrufen von Prozeduren aus der Persönlichen Arbeitsmappe muss mit Application.Run und „PERSONAL.XLSB! erfolgen. Machen Sie einen Doppelklick auf „DieseArbeitsmappe“ in der Excel-Arbeitsmappe die Sie gerade geöffnet haben. Meine Arbeitsmappe heißt „youtube.xlsm“. Schreiben Sie hier folgenden Code hinein:


Sub schrift_festlegen()
  Application.Run "PERSONAL.XLSB!Schrift_Mathe.schrift_festlegen", ActiveSheet.Range("A1:C5")
End Sub

Erklärung zum Excel VBA Code

Eine Prozedur aus der Persönlichen Arbeitsmappe aufrufen ist etwas speziell. Hier muss die Methode Application.Run verwendet werden.
Die Prozedur aufzurufen ist auch etwas anders. Es muss die persönliche Arbeitsmappe angegeben werden mit PERSONAL.XLSB! .
Da meine Prozedur in einem Modul Schrift_Mathe gespeichert ist, folgt danach der Name des Moduls.
Dann . und der Name der Prozedur .schrift_festlegen .
Da unsere Prozedur einen Parameter hat, wird nach einem Komma der Parameter angegeben: , ActiveSheet.Range(„A1:C5“)
Die folgende Prozedur speichern Sie ebenfalls in „DieseArbeitsmappe“:


Sub addieren()
  Application.Run "PERSONAL.XLSB!Schrift_Mathe.addiere", 5, 5
End Sub

In folgendem Video erkläre ich, wie Sie Code in der Persönliche Arbeitsmappe speichern können:

Code in allen Arbeitsmappen nutzen: Modul als Bibliothek

Wenn Sie Ihr VBA-Programm inklusive ihrer VBA-Bibliothek an Dritte weitergeben möchten, dann ist die persönliche Arbeitsmappe schwierig. Die Methode welche ich Ihnen in diesem Abschnitt vorstelle ist deutlich einfacher. Legen Sie ein Modul an. Geben Sie dem Modul den Namen „VBA_Bibliothek“. Schreiben Sie folgenden Code in das Modul:


Sub schrift_festlegen(bereich As Range)
  With bereich
    .Font.Name = "Arial"
    .Font.Size = 12
  End With
End Sub

Sub addiere(zahl1, zahl2 As Double)
  MsgBox zahl1 + zahl2
End Sub

Selbstverständlich können Sie noch mehr Prozeduren in dieses Modul speichern. Exportieren Sie dieses Modul unter dem Namen „VBA_Bibliothek.bas“ mit Menü „Datei“, „Datei exportieren ..“ .
Jetzt können Sie dieses exportierte Modul in jeder Excel-Arbeitsmappe importieren. Wenn Sie Ihre Excel-Arbeitsmappe an dritte weitergeben ist Ihr Modul mit Ihrer VBA-Bibliothek automatisch dabei. Füllen Sie die Excel-Tabelle mit Daten:


Sub daten_in_tabelle()
  Range("A1:C5").Value = "Markus"
End Sub

Bibliotheks-Prozeduren aufrufen

Prozeduren aus Ihrem Bibliotheks-Modul aufrufen machen Sie wie folgt:


Sub schrift_festlegen()
  VBA_Bibliothek.schrift_festlegen ActiveSheet.Range("A1:C5")
End Sub


Sub addieren()
  VBA_Bibliothek.addiere 5, 5
End Sub

Erklärung zum Excel VBA Code

VBA_Bibliothek ist der Name des Moduls.
schrift_festlegen und addiere sind Namen von Prozeduren.
ActiveSheet.Range(„A1:C5“) ist der Parameter der Prozedur schrift_festlegen .
5, 5 sind die zwei Parameter für die Prozedur addiere . Parameter werden mit einem Koma getrennt.

In diesem Video wird erklärt wie Sie ein Modul als VBA-Bibliothek einsetzen können:

Code Performance verbessern

In diesem Abschnitt erkläre ich, wie Sie die Ausführungsgeschwindigkeit ihres Codes verbessern können.

Application-Eigenschaften deaktivieren

Das Application-Objekt hat Eigenschaften deren Deaktivierung die Ausführungsgeschwindigkeit des Codes verbessert. Das Objekt Application ist die Software Excel.

Bildschirmaktualisierung: ScreenUpdating

Die Aktualisierung des Bildschirms kostet Zeit. Deswegen kann es bei bestimmten Aktionen Sinn machen die Aktualisierung des Bildschirms zu deaktivieren.


Sub bildschirmaktualisierung_aus()
  Application.ScreenUpdating = False
End Sub

Erklärung zum Excel VBA Code

Die Eigenschaft ScreenUpdating steht für Bildschirmaktualisierung.
Application.ScreenUpdating = False deaktiviert die Bildschirmaktualisierung.


Sub bildschirmaktualisierung_ein()
  Application.ScreenUpdating = True
End Sub

Erklärung zum Excel VBA Code

Die Eigenschaft ScreenUpdating steht für Bildschirmaktualisierung.
Application.ScreenUpdating = Trueaktiviert die Bildschirmaktualisierung.

Neuberechnung: Calculation

Die Neuberechnung von Arbeitsblattfunktionen verlangsamt die Ausführungsgeschwindigkeit von Excel VBA Code. Deswegen kann diese abgeschaltet werden.


Sub neuberechnung_arbeitblattfunktionen_aus()
  Application.Calculation = xlCalculationManual
End Sub

Erklärung zum Excel VBA Code

Application.Calculation = xlCalculationManual deaktiviert die Neuberechnung von Arbeitsblattfunktionen


Sub neuberechnung_arbeitblattfunktionen_ein()
  Application.Calculation = xlCalculationAutomatic
End Sub

Erklärung zum Excel VBA Code

Application.Calculation = xlCalculationAutomatic aktiviert die Neuberechnung von Arbeitsblattfunktionen

Statusanzeige

Die Aktualisierung der Statusanzeige kostet Zeit. Sie Zeigt den Fortschritt von Aktionen an. Diese Aktualisierung benötigt Ressourcen. Das deaktivieren der Aktualisierung spart Zeit und Ressourcen.


Sub statusanzeige_aus()
  Application.DisplayStatusBar = False
End Sub

Erklärung zum Excel VBA Code

Application.DisplayStatusBar = False deaktiviert die Aktualisierung der Statusanzeige


Sub statusanzeige_ein()
  Application.DisplayStatusBar = True
End Sub

Erklärung zum Excel VBA Code

Application.DisplayStatusBar = True aktiviert die Aktualisierung der Statusanzeige

Ereignisse in Tabellenblättern

Die Ereignisse Worksheet_Change oder Worksheet_SelectionChange werden bei jeder Veränderung in der Tabelle ausgeführt. Wenn Sie darauf verzichten können oder möchten können Sie dieses Verhalten deaktivieren.


Sub ereignisse_tabellenblaetter_aus()
  Application.EnableEvents = False
End Sub

Erklärung zum Excel VBA Code

Application.EnableEvents = False Ereignisse Worksheet_Change oder Worksheet_SelectionChange bei Veränderung der Tabelle nicht ausführen.


Sub ereignisse_tabellenblaetter_ein()
  Application.EnableEvents = True
End Sub

Erklärung zum Excel VBA Code

Application.EnableEvents = True Ereignisse Worksheet_Change oder Worksheet_SelectionChange bei Veränderung der Tabelle ausführen.

Mehrere Application-Eigenschaften aktivieren oder deaktivieren

Manchmal macht es Sinn mehrere Eigenschaften des Application-Objektes zu deaktivieren und wieder aktivieren. Das können Sie mit folgenden Prozeduren umsetzen:


Sub excelbeschleunigen_ein()
  With Application
       .ScreenUpdating = False
       .DisplayStatusBar = False
       .EnableEvents = False
       .Calculation = xlCalculationManual
  End With
End Sub

Sub excelbeschleunigen_aus()
  With Application
       .ScreenUpdating = True
       .DisplayStatusBar = True
       .EnableEvents = True
       .Calculation = xlCalculationAutomatic
  End With
End Sub

Zeit sparen beim Kopieren von Daten

Als erstes benötigen wir Testdaten:


Sub daten_in_tabelle()
  Range("A1:C5").Value = "Markus"
End Sub

Erklärung zum Excel VBA Code

In die Excel-Zellen A1 bis C5 wird der Text „Markus“ eingetragen.
Damit Sie den Unterschied verstehen, hier eine Prozedur wie Sie nicht Daten kopieren sollten:


Sub kopieren_langsam()
  Range("A1:C5").Select
  Selection.Copy
  Range("E1").Select
  ActiveSheet.Paste
End Sub

Erklärung zum Excel VBA Code

Range(„A1:C5“).Select Die Excel-Zellen A1 bis C5 werden markiert.
Selection.Copy Der Inhalt der markierten Excel-Zellen wird in die Zwischenablage kopiert.
Range(„E1“).Select Markiert die Excel-Zelle E1.
ActiveSheet.Paste Fügt den Inhalt der Zwischenablage wieder ein.
Jetzt die schnelle Variante, so sollten Sie Daten kopieren:


Sub kopieren_schnell()
  Range("A1:C5").Copy Destination:=Range("I1")
End Sub

Erklärung zum Excel VBA Code

Kopiert den Inhalt der Excel-Zellen von A1 bis C5 in die Zwischenablage und fügt ihn ab der Excel-Zelle I1 wieder ein.

Zeit sparen beim Ändern von Eigenschaften

Als erstes zeige ich wieder wie Sie Eigenschaften nicht ändern sollten:


Sub eigenschaften_aendern_langsam()
  Range("A1:C5").Font.Name = "Arial"
  Range("A1:C5").Font.Size = 12
  Range("A1:C5").Font.Bold = True
  Range("A1:C5").Font.Color = vbBlue
End Sub

Erklärung zum Excel VBA Code

Range(„A1:C5“).Font.Name = „Arial“ Setzt die Schriftart der Excel-Zellen A1 bis C5 auf Arial.
Range(„A1:C5“).Font.Size = 12 Setzt die Schriftgröße der Excel-Zellen A1 bis C5 auf 12.
Range(„A1:C5“).Font.Bold = True Setzt Fettdruck für die Excel-Zellen A1 bis C5.
Range(„A1:C5“).Font.Color = vbBlue Setzt die Schriftfarbe blau für die Excel-Zellen A1 bis C5.
Jetzt die schnelle Variante mit der With-Anweisung:


Sub eigenschaften_aendern_schnell()
  With Range("A1:C5").Font
    .Name = "Arial"
    .Size = 12
    .Bold = False
    .Color = vbBlack
  End With
End Sub

Erklärung zum Excel VBA Code

Setzt für die Excel-Zellen A1 bis C5:
.Name = „Arial“ Die Schriftart auf Arial
.Size = 12 Die Schriftgröße auf 12
.Bold = False kein Fettdruck.
.Color = vbBlack Die Schriftfarbe auf Schwarz.

In diesem Video wird erklärt wie Sie Ihre Code Performance verbessern können:

Tastenkürzel dem Anwender anzeigen und Programm-Hilfe aufrufen

Angenommen Sie haben in Ihrer Anwendung Tastaturkürzel vergeben damit der Anwender bestimmte Programm-Funktionen schneller ausführen kann. Jetzt möchten Sie dem Anwender mitteilen welche Tastenkürzel Sie für welche Programm-Funktion vergeben haben. Wie Sie das realisieren können, zeige ich in diesem Abschnitt.


Sub hilfeanzeigen()
   ActiveWorkbook.FollowHyperlink Address:=ThisWorkbook.Path & "\hilfe.html", NewWindow:=True
End Sub

Erklärung zum Excel VBA Code

Ich habe eine HTML-Datei gecodet mit dem Namen hilfe.html . Sie befindet sich im gleichen Verzeichnis wie die Excel-Arbeitsmappe. In der Datei hilfe.html stehen die Tastenkürzel die der Anwender verwenden kann.
Mit ActiveWorkbook.FollowHyperlink ist es u.a. möglich eine HTML-Datei im Standardbrowser anzuzeigen.
Address gibt den Pfad und den Dateinamen der HTML-Datei an.
NewWindow:=True gibt an, dass die HTML-Datei in einem neuen Fenster angezeigt wird.


Sub statusanzeige()
  Application.StatusBar = "Tastenkürzel: F1 = Hilfe"
End Sub

Erklärung zum Excel VBA Code

In der Statusbar wird angezeigt, dass mit Tastenkürzel F1 die Programm-Hilfe aufgerufen werden kann.


Sub programm()
   statusanzeige
   Application.OnKey "{F1}", "hilfeanzeigen"
End Sub

Erklärung zum Excel VBA Code

Es wird ein Tastenkürzel festgelegt, dass in ganz Excel funktioniert. Wenn der Anwender die Taste F1 drückt wird die Prozedur hilfeanzeigen aufgerufen.

In diesem Video erkläre ich wie dem Anwender Tastenkürzel anzeigen können und eine Hilfe für Ihr VBA-Programm aufrufen können:

UserForm – Alles was wichtig ist

Ein UserForm können Sie erstellen mit Menü „Einfügen“, „UserForm“. Im Projekt-Explorer erscheint ein neues Objekt und wir bekommen ein leeres Formular in der sogenannten „Entwurfsansicht“ angezeigt. Ein UserForm ist ein Programmfenster, welches genau so professionell aussieht wie ein Programmfenster erstellt mit den Programmiersprachen Java, C# oder Python. Nach dem Einfügen des UserForms sollten Sie jetzt ein Fenster sehen mit dem Titel „Toolsammlung“. Falls nicht, können Sie das Fenster anzeigen lassen mit dem Menü „Ansicht“, „Werkzeugsammlung“.

UserForm Einfügen im VBA Editor vom Excel über das Menü "Einfügen", "UserForm".
UserForm Einfügen im VBA Editor vom Excel über das Menü „Einfügen“, „UserForm“.

UserForm – Wichtige Eigenschaften

Eigenschaft Erklärung
(Name) Hier kann dem Userform ein Name gegeben werden
Caption Der Eigenschaft Caption kann ein Text zugewiesen werden. Dieser Text ist der Fenstertitel. Er wird im Userform ganz oben angezeigt.
Height Hier können Sie eine Zahl eingeben. Die Zahl legt die Höhe des Userforms fest.
Width Hier können Sie eine Zahl eingeben. Die Zahl legt die Breite des Userforms fest.
Left Gibt an, wo das Userform in der X-Achse angezeigt wird.
Top Gibt an, wo das Userform in der Y-Achse angezeigt wird.
StartUpPosition Gibt an wo das UserForm beim anzeigen positioniert wird. Die Angaben bei Left und Top werden nur berücksichtigt, wenn die Eigenschaft „StartUpPosition“ den Wert „0 – Manuell“ hat.

UserForm – Wichtige Ereignisse

Im Userform gibt es zwei Ereignisse die richtig wichtig sind:

  • UserForm_Initialize
  • UserForm_QueryClose

UserForm – Das Ereignis UserForm_Initialize

Ein Anwendungsfall der sehr regelmäßig vorkommt ist: Sie haben im Userform Eingabefelder und möchten dass so bald das Userform angezeigt wird diese Eingabefelder befüllt werden mit Inhalten von Excel-Zellen. Dieses Befüllen der Eingabefelder wird im Ereignis UserForm_Initialize realisiert. Das Ereignisse anlegen per Tastatur geht anscheinend nicht. Deswegen schreibe ich hier das Grundgerüst des Ereignisses UserForm_Initialize. Sie können es dann kopieren und in den Editor einfügen.


Private Sub UserForm_Initialize()

End Sub

UserForm – Das Ereignis UserForm_QueryClose

Das Ereignis tritt auf, bevor das Userform geschlossen wird. Das Ereignisse anlegen per Tastatur geht anscheinend nicht. Deswegen schreibe ich hier das Grundgerüst des Ereignisses UserForm_QueryClose. Sie können es dann kopieren und in den Editor einfügen.


Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

End Sub

UserForm – Wichtige Methoden

Es gibt nur eine Methode die richtig wichtig ist:

  • .Show

Mit .Show wird ein UserForm angezeigt. Sie können ein Userform anzeigen, wenn eine Excel Arbeitsmappe geöffnet wird:


Private Sub Workbook_Open()
  UserForm1.Show
End Sub

UserForm – Schließen mit Unload

Mit Unload können Objekte aus dem Speicher entfernt werden. Mit folgendem Code wird das Userform geschlossen:


Private Sub CommandButton1_Click()
  Unload UserForm1
End Sub

UserForm – Steuerelemente

Die einzelnen Steuerelemente der Werkzeugleiste haben zahlreiche verschiedene Eigenschaften. Die meisten werden auch im Eigenschaftenfenster angezeigt. Hier können nur die Wichtigsten vorgestellt werden. Die Steuerlemente heißen in der Toolsammlung anders wie in der UserForm. Im folgenden Text finden Sie zuerst den Namen wie ein Steuerelement in der Toolsammlung heißt und in Klammer steht wie das Steuerlemet heißt, nachdem Sie es in die UserForm eingefügt haben.

VBA Editor: Leere Userform und das Fenster Toolsammlung
VBA Editor: Sie sehen eine leere Userform und das Fenster Toolsammlung

UserForm – Objekte auswählen

„Objekte auswählen“ ist eigentlich kein Steuerelement. Solange es aktiv ist, kann man mit der Maus die Steuerelemente, die sich schon auf dem Formularentwurf befinden, auswählen, verschieben und deren Größe verändern. Ist dagegen in der Werkzeugsammlung etwas anderes als „Objekte auswählen“ aktiv, verändert sich der Mauszeiger, sobald sich die Maus über dem Formularentwurf befindet und man kann ein entsprechendes Steuerelement einfügen.

UserForm – Beschriftungsfeld

Ein Beschriftungsfeld (Label) ist für beschreibenden Text gedacht und nicht, um Werte zu speichern. Die Beschriftung wird in der Eigenschaft Caption gespeichert. Folgende wichtige Eigenschsften hat das Beschriftungsfeld:

Eigenschaft Erklärung
(Name) Hier kann dem Label ein Name gegeben werden
Caption In der Eigenschaft Caption kann ein Text angegeben werden, welcher in der im Userform angezeigt wird.
Accelerator Legt die Zugriffstaste für ein Steuerelement fest oder ruft sie ab. Wenn Sie in die Eigenschaft Accelerator ein a eingeben, dann ist der Label mit dem Tastenkürzel Alt+a ansteuerbar. Wenn Nach dem Label eine Textbox platziert ist, dann ist mit dem Tastenkürzel Alt + a die Textbox aktivierbar. Dieses Verhalten ist für die Umsetzung der Barrierefreiheit sehr wichtig.
TabIndex Gibt die Position eines einzelnen Objekts in der Aktivierreihenfolge des Formulars an. Aktivierreihenfolge bedeutet, in welcher Reihenfolge werden die Steuerelemente aktiviert, wenn der Anwender mehrfach hintereinander die Tabulatortaste drückt. Die Anwendung des Tabindex ist für die Umsetzung der Barrierefreiheit sehr wichtig.
Left In der Eigenschaft Left wird eine Zahl angegeben. Die Zahl gibt an, wieviel Abstand der Label vom linken Rand der UserForm hat.
Top In der Eigenschaft Top wird eine Zahl angegeben. Die Zahl gibt an, wieviel Abstand der Label vom oben Rand der UserForm hat.
Height In der Eigenschaft Height wird eine Zahl angegeben. Die Zahl gibt an, wie hoch der Label sein soll.
Width In der Eigenschaft Width wird eine Zahl angegeben. Die Zahl gibt an, wie breit der Label sein soll.

Ein Label kann per Excel VBA-Code dem Userform hinzugefügt werden und die Eigenschaften können per Excel VBA-Code festgelegt werden. Folgender Code zeigt wie es geht:


Public lblNachname As MSForms.Label

Private Sub UserForm_Initialize()
  Set lblVorname = Me.Controls.Add("Forms.Label.1", "lblVorname", True)
  With lblVorname
      .Caption = "Vorname"
      .Left = 30
      .Top = 10
      .Height = 30
      .Width = 60
      .Accelerator = "v"
      .TabIndex = 0
  End With
End Sub

UserForm – Textfeld

Textfelder sind die wohl universellsten Steuerelemente. In einem Textfeld (TextBox) können beliebige Werte eingegeben werden, die in der Value-Eigenschaft gespeichert werden.

Eigenschaft Erklärung
(Name) Hier kann dem Label ein Name gegeben werden
Text In der Eigenschaft Text kann ein Text angegeben werden, welcher in der im Userform angezeigt wird.
Left In der Eigenschaft Left wird eine Zahl angegeben. Die Zahl gibt an, wieviel Abstand der Label vom linken Rand der UserForm hat.
Top In der Eigenschaft Top wird eine Zahl angegeben. Die Zahl gibt an, wieviel Abstand der Label vom oben Rand der UserForm hat.
Height In der Eigenschaft Height wird eine Zahl angegeben. Die Zahl gibt an, wie hoch der Label sein soll.
Width In der Eigenschaft Width wird eine Zahl angegeben. Die Zahl gibt an, wie breit der Label sein soll.
TabIndex Gibt die Position eines einzelnen Objekts in der Aktivierreihenfolge des Formulars an. Aktivierreihenfolge bedeutet, in welcher Reihenfolge werden die Steuerelemente aktiviert, wenn der Anwender mehrfach hintereinander die Tabulatortaste drückt. Die Anwendung des Tabindex ist für die Umsetzung der Barrierefreiheit sehr wichtig.

Eine Textbox kann per Excel VBA-Code dem Userform hinzugefügt werden und die Eigenschaften können per Excel VBA-Code festgelegt werden. Folgender Code zeigt wie es geht:


Public txtvorname As MSForms.Textbox

Private Sub UserForm_Initialize()
  Set txtvorname = Me.Controls.Add("Forms.TextBox.1", "txtvorname", True)
    With txtvorname
        .Text = ActiveSheet.Range("A1").Value
        .Left = 70
        .Top = 10
        .Height = 20
        .Width = 60
        .Name = "txtVorname"
        .TabIndex = 1
    End With
End Sub

UserForm – Befehlsschaltfläche

Eine Befehlsschaltfläche (CommandButton) ist dafür gedacht, VBA-Code zu starten. Die Beschriftung wird in der Caption-Eigenschaft gespeichert. Man kann das Click-Ereignis der Befehlsschaltfläche auch per Code auslösen, indem man die Value-Eigenschaft auf True setzt.

Eigenschaft Erklärung
(Name) Hier kann dem Label ein Name gegeben werden
Caption In der Eigenschaft Text kann ein Caption angegeben werden, welcher die Beschriftung der Befehlsschaltfläche (CommandButton) ist.
Left In der Eigenschaft Left wird eine Zahl angegeben. Die Zahl gibt an, wieviel Abstand der Label vom linken Rand der UserForm hat.
Top In der Eigenschaft Top wird eine Zahl angegeben. Die Zahl gibt an, wieviel Abstand der Label vom oben Rand der UserForm hat.
Height In der Eigenschaft Height wird eine Zahl angegeben. Die Zahl gibt an, wie hoch der Label sein soll.
Width In der Eigenschaft Width wird eine Zahl angegeben. Die Zahl gibt an, wie breit der Label sein soll.
TabIndex Gibt die Position eines einzelnen Objekts in der Aktivierreihenfolge des Formulars an. Aktivierreihenfolge bedeutet, in welcher Reihenfolge werden die Steuerelemente aktiviert, wenn der Anwender mehrfach hintereinander die Tabulatortaste drückt. Die Anwendung des Tabindex ist für die Umsetzung der Barrierefreiheit sehr wichtig.

UserForm – Anzeige

Ein Anzeige-Steuerelement (Image) dient zur Anzeige von Bildern (bmp, cur, gif, ico, jpg, wmf). Genau wie ein Beschriftungsfeld ist es nicht zum Speichern von Werten gedacht. Das Bild selbst wird in der Picture-Eigenschaft gespeichert.

UserForm – Drehfeld

Ein Drehfeld (SpinButton) ist für Ganzzahlen gedacht. Klickt man auf den oberen Knopf, steigt die Value-Eigenschaft, der untere Knopf senkt ihn. Der aktuelle Wert wird leider nicht angezeigt, deswegen wird in der Praxis häufig im Formular neben einem Drehfeld noch ein Textfeld oder ein Bezeichnungsfeld angebracht, und der Value per Code dort angezeigt. Mit den Eigenschaften Min und Max kann man den Wertebereich des Drehfeldes angeben, und mit SmallChange, um wie viel sich der Wert verändert.

UserForm – Bildlaufleiste

Eine Bildlaufleiste (ScrollBar) funktioniert technisch genau wie ein Drehfeld. Sie kann aber sowohl Waagerecht als auch Senkrecht angebracht werden. Darüber hinaus besitzt sie noch eine LargeChange-Eigenschaft, die angibt, um wie viel sich der Value verändert, wenn man auf den „Hintergrund“ der Bildlaufleiste klickt; also irgendwo zwischen den Pfeilen oben bzw. unten einerseits und dem Schieberegler andererseits.

UserForm – Kontrollkästchen

Mit Hilfe eines Kontrollkästchen (CheckBox) kann man einen Ja/Nein-Wert auswählen. Falls die Eigenschaft TripleState auf True gesetzt wird, ist auch der Wert Null für die Value-Eigenschaft zulässig. Des Weiteren haben Kontrollkästchen noch eine Caption-Eigenschaft, mit der das Kontrollkästchen beschriftet werden kann.

UserForm – Umschaltfeld

Ein Umschaltfeld (ToggleButton) unterscheidet sich von Kontrollkästchen nur optisch, inhaltlich sind sie im Grunde identisch.

UserForm – Rahmen

Mit einem Rahmen (Frame) kann man andere Steuerelemente optisch zusammenhängend gruppieren. Er speichert selbst keine Werte. Interessant für die Dateneingabe werden Rahmen allerdings erst im Zusammenspiel mit Optionsfeldern.

UserForm – Optionsfeld

Fügt man in einem Formular einen Rahmen ein, und in diesem mehrere Optionsfelder, so kann stets nur ein einziges Optionsfeld (OptionButton) ausgewählt werden. Jedes Optionsfeld hat dabei seine eigene Value-Eigenschaft. Wählt man ein Optionsfeld aus, erhält es den Wert True, ansonsten hat es den Wert False.

UserForm – Kombinationsfeld

Ein Kombinationsfeld (ComboBox) dient des Auswahl eines einzelnen Wertes aus einer Liste. Dazu müssen die auswählbaren Werte erst definiert werden. Üblicherweise macht man das beim Laden des Formulars. Die angezeigte Liste des Kombinationsfeldes wird in der List-Eigenschaft gespeichert. Es gibt zwei verschiedene Arten, wie man einem Kombinationsfeld eine Liste zuordnen kann: An die List-Eigenschaft kann man ein Variant-Array übergeben, oder mit der AddItem-Methode Listeneinträge hinzufügen.

UserForm – Listenfeld

Ein Listenfeld (ListBox) funktioniert im Prinzip genau wie ein Kombinationsfeld. Bei Bedarf kann man allerdings die MultiSelect-Eigenschaft eines Listenfelds auf einen anderen Wert als 0 setzen. Dann kann man mehr als nur einen Wert aus der Liste auswählen. Die Value-Eigenschaft ist dann immer Null. Um herauszufinden, welche Listeneinträge gerade markiert sind, muss man dann die Selected-Auflistung nutzen.

UserForm – Register

Ein Register (TabStrip) ist ein in erster Linie eher grafisches Steuerelement, das nicht zum Speichern von Daten gedacht ist. Es besteht aus mehreren Karteireitern (Tabs), die man im Entwurfsmodus nach einem Rechtsklick umbenennen bzw. neue Tabs hinzufügen kann. Unterhalb der eigentlichen Reiter befindet sich ein grafisch umgrenzter Raum, über den man weitere Steuerelemente legen kann. Wechselt ein User im Register von einem Reiter zu einem anderen, passiert allerdings erst einmal überhaupt nichts. Register sind nämlich dafür gedacht, dass beim Wechsel einem Reiter zu einem anderen Code gestartet wird. Dieser Code könnte z. B. den Inhalt der Steuerelemente innerhalb des grafischen Bereichs des Registers ändern.

UserForm – Multiseiten

Ein Multiseite (MultiPage) sieht genauso aus wie ein Register. Befinden sich allerdings weitere Steuerelemente im Bereich einer Multiseite, und der User wechselt den Karteireiter, sind die bisher angezeigten Steuerelemente nicht mehr zu sehen. Jeder Reiter hat seinen eigenen Anzeigebereich, auf dem man jeweils separate Steuerelemente platzieren kann. Markiert man im Formularentwurf einen der Reiter, kann man nach einem Rechtsklick den Reiter umbenennen oder neue Reiter hinzufügen.

Steuerlemente einfügen ins Userform mit der Computermaus – Anleitung

Das Einfügen der Steuerelemente aus der Toolsammlung geht zunächst nur mit der Computermaus. Sie zeigen die Toolsammlung an mit Menü „Ansicht“, Menüpunkt „Werkzeugsammmlung“. Dann klicken Sie mit der linken Maustaste auf das Steuerelement das Sie in das Userform einfügen möchten. Zum Beispiel Label. Jetzt bewegen Sie die Computermaus über das Userform an die Stelle an der Sie das Label einfügen möchten. Drücken Sie wieder die Linke Maustaste. Das Label wurde jetzt eingefügt.

Wenn Sie ein Textfeld einfügen möchten, dann klicken Sie auf der Toolsammlung mit der linken Maustaste auf das Textfeld. Jetzt bewegen Sie die Computermaus über das Userform an die Stelle an der Sie das Textfeld einfügen möchten. Drücken Sie wieder die Linke Maustaste. Das Textfeld wurde jetzt eingefügt. Diese Vorgehensweise klappt bei allen Steuerelementen.

Steuerlemente einfügen ins Userform mit Excel VBA – Anleitung

Sie können ein UserForm einfügen über Menü „Einfügen“, „UserForm“ und dann im Ereignis UserForm_Initialize() die Steuerelemente zur Laufzeit erstellen. Folgender Code zeigt wie es funktioniert:


Dim lblVorname As MSForms.Label
Public txtvorname As MSForms.Textbox
Dim lblNachname As MSForms.Label
Dim txtNachname As MSForms.Textbox

Private Sub UserForm_Initialize()
  Set lblVorname = Me.Controls.Add("Forms.Label.1", "lblVorname", True)
    With lblVorname
        .Caption = "Vorname"
        .Left = 30
        .Top = 10
        .Height = 30
        .Width = 60
    End With
    
  Set txtvorname = Me.Controls.Add("Forms.TextBox.1", "txtvorname", True)
    With txtvorname
        .Text = ActiveSheet.Range("A1").Value
        .Left = 70
        .Top = 10
        .Height = 20
        .Width = 60
        .Name = "txtVorname"
    End With
    
  Set lblNachname = Me.Controls.Add("Forms.Label.1", "lblNachname", True)
    With lblNachname
        .Caption = "Nachname"
        .Left = 30
        .Top = 40
        .Height = 30
        .Width = 60
    End With
    
  Set txtNachname = Me.Controls.Add("Forms.TextBox.1", "txtNachname", True)
    With txtNachname
        .Text = ActiveSheet.Range("B1").Value
        .Left = 70
        .Top = 40
        .Height = 20
        .Width = 60
    End With        
End Sub

 

Autor: Markus Lemcke

Ich bin Markus Lemcke, Softwareentwickler, Webentwickler, Appentwickler, Berater und Dozent für barrierefreies Webdesign, barrierefreie Softwareentwicklung mit Java, C# und Python, Barrierefreiheit bei den Betriebssystemen Windows, Android, IOS, Ubuntu und MacOS.

Ein Gedanke zu „Excel VBA Programmieren lernen – Die Grundlagen einfach erklärt“

Schreibe einen Kommentar