beraten
programmieren
implementieren
trainieren
Excel Objektmodell
Allgemein
Bevor wir uns mit den Excel-Objekten befassen, müssen wir zuerst abklären, was unter einem Objekt bzw. einer Klasse verstanden wird.
Stellen wir uns ein beliebiges Auto vor: vielleicht ist dieses Auto in roter Farbe und hat ein Eigengewicht von 1.200 kg. Vermutlich kann dieses Auto auch beschleunigen und bremsen. Stellen wir uns nun ein weiteres Auto vor, das eine blaue Farbe und ein Eigengewicht von 1.500 kg hat. Auch dieses Auto kann beschleunigen und bremsen. Dieses Gedankenspiel könnten wir nun mit einem dritten und vierten Auto fortsetzen.
Da alle realen Autos durch das gleiche Set von Eigenschaften (Farbe, Gewicht) und Verhalten (Beschleunigen, Bremsen) beschrieben werden, drängt sich förmlich die Idee auf, alle diese realen Autos zu einem allgemeinen Typ Auto zusammenzufassen.
Der Typ Auto definiert also das Vorhandensein von Eigenschaften (Farbe, Gewicht) und Verhalten (Beschleunigen, Bremsen). Dies entspricht dem Begriff der Klasse.
Das reale Auto als Instanz des allgemeinen Typs Auto besitzt alle definierten Eigenschaften (Farbe, Gewicht) und Verhalten (Beschleunigen, Bremsen) und hat als Wert der Eigenschaft Farbe die Farbe rot und als Wert der Eigenschaft Eigengewicht die Zahl 1.200. Das reale Auto entspricht dem Begriff des Objekts.
Egal ob Sie nun ein reales Auto oder 100 reale Autos erzeugen, alle diese Autos werden durch das gleiche Set von Eigenschaften (Farbe, Gewicht) und Verhalten (Beschleunigen, Bremsen) beschrieben, wobei jedes dieser realen Autos eine spezifische Farbe bzw. ein spezifisches Eigengewicht besitzt.
Nehmen wir nun ein Beispiel aus der Excel-Welt. Eine Arbeitsmappe enthält ein oder mehrere Tabellenblätter. Wenn wir überlegen, welchen Eigenschaften eines dieser Tabellenblätter besitzt, fallen uns möglicherweise die folgenden ein: Name, Sichtbarkeit, Spalten, Zeilen, Zellen, usw.. Welches Verhalten besitzt dieses Tabellenblatt? Es kann aktiviert, verschoben, kopiert, gelöscht, neuberechnet oder gedruckt werden.
Alle Tabellenblätter einer Arbeitsmappe werden durch das gleiche Set von Eigenschaften und Verhalten beschrieben. Analog dem allgemeinen Typ Auto gibt es in Excel den Typ (die Klasse) Worksheet, der als Bauplan für jedes reale Tabellenblatt dient.
Im Folgenden werden wir die wichtigsten Excel-Objekte durchbesprechen, wobei wir vom obersten zum untersten Objekt gehen. Wir starten mit dem Applikationsobjekt (Application), das die Excel-Anwendung referenziert. Dann machen wir einen kurzen Exkurs zum Thema Auflistungen. Weiter geht es mit dem Arbeitsmappenobjekt (Workbook), das eine geöffnete Excel-Datei referenziert. Eine Ebene tiefer finden wir das Tabellenblattobjekt (Worksheet), das ein einzelnes Tabellenblatt in einer Arbeitsmappe referenziert. Abschließend sehen wir uns das Bereichsobjekt (Range) an, das eine oder mehrere Zellen in einem bestimmten Tabellenblatt referenziert.
Die folgenden Codebeispiele verwenden die Anweisung Debug.Print um in das Ausgabefenster zu schreiben. Blenden Sie das Ausgabefenster im VBA-Editor über den Menübefehl Ansicht - Direktfenster ein.
Applikationsobjekt (Application)
Allgemein
Das Applikationsobjekt entspricht der Host-Anwendung, innerhalb der unser VBA-Code läuft. Da VBA-Code in allen Office-Anwendungen lauffähig ist, ist das Applikationsobjekt die entsprechende Office-Anwendung (z. B. Excel, Word, Powerpoint oder Outlook).
Im folgenden Codebeispiel geben wir den Namen des Applikationsobjektes im Direktfenster aus. Um auf eine Eigenschaft eines Objektes zuzugreifen, verwenden Sie den Punkt-Operator.
'Ausgabe des Applikationsnamens im Ausgabefenster
Debug.Print Application.Name
Läuft unser Code in Excel, so wird im Ausgabefenster der Text Microsoft Excel ausgegeben.
Im folgenden Codebeispiel ist die Ausgabe die gleiche, allerdings wollen wir das Applikationsobjekt in einer Variable mit der Bezeichnung app referenzieren. Beachten Sie, dass der Datentyp der Variable Application ist und Sie beim Zuweisen des Applikationsobjektes zur Variablen app das Schlüsselwort Set verwenden, da es sich um eine Objektvariable handelt.
'Ausgabe des Applikationsnamens im Ausgabefenster
Dim app As Application
Set app = Application
Debug.Print app.Name
Läuft unser Code in Excel, so wird im Ausgabefenster der Text Microsoft Excel ausgegeben.
Nehmen wir an, unser Code ist in einer Excel-Datei gespeichert. Dieser Code öffnet ein Word-Dokument und schreibt Inhalte aus unserer Excel-Datei in das Word-Dokument. Wenn Sie jetzt auf die Excel-Applikation zugreifen wollen, können Sie das selbstverständlich über die Anweisung Application erledigen, da unser Code ja in Excel läuft und daher das Excel-Applikationsobjekt das naheliegendste ist.
Jedes VBA-Objekt ist eindeutig einem Namensraum (Namespace) zugeordnet. Alle Excel-Objekte liegen im Namensraum Excel. Sie sollten sich angewöhnen, diesen Namensraum auch zu verwenden, da dies vor allem dann wichtig wird, wenn Sie Objekte aus anderen Namensräumen verwenden, wie z. B. das Applikationsobjekt von Word.
'Ausgabe des Applikationsnamens im Ausgabefenster
Dim app As Excel.Application
Set app = Excel.Application
Debug.Print app.Name
Im Ausgabefenster wird der Text Microsoft Excel ausgegeben.
In Objektvariablen wird nicht das Objekt selbst, sondern eine Referenz auf das Objekt eingetragen (Referenztypen). Nehmen wir an, Sie haben zwei Objektvariablen, die eine Referenz auf die Excel-Anwendung eingetragen haben.
'Objektreferenzen
Dim app1 As Excel.Application
Dim app2 As Excel.Application
Set app1 = Excel.Application
Set app2 = Excel.Application
Debug.Print app1.Name
Debug.Print app2.Name
Beide Variablen app1 und app2 referenzieren die bestehende Excel-Anwendung. Es gibt nicht zwei Excel-Anwendungen, sondern nur ein Application-Objekt, das über zwei Variablen referenziert wird.
Um zu prüfen, ob zwei Objektvariablen das gleiche Objekt referenzieren, verwenden Sie den Is-Operator.
'Vergleich Objektreferenzen
Dim app1 As Excel.Application
Dim app2 As Excel.Application
Set app1 = Excel.Application
Set app2 = Excel.Application
If app1 Is app2 Then
Debug.Print "Referenz auf das gleiche Objekt"
Else
Debug.Print "Referenz auf unterschiedliche Objekte"
End If
Im Ausgabefenster sollte der Text Referenz auf das gleiche Objekt ausgegeben werden.
Eine Objektvariable, die noch keine Referenz auf ein Objekt enthält, hat den Wert Nothing. Um eine Objektvariable wieder freizugeben, also die eingetragene Referenz zu entfernen, setzen Sie die Variable auf den Wert Nothing.
'Objektreferenzen
Dim app As Excel.Application
Set app = Excel.Application
Debug.Print app.Name
Set app = Nothing
Um zu püfen, ob eine Objektvariable eine Referenz auf ein Objekt enthält, verwenden Sie den Operator Is.
'Objektreferenzen
Dim app As Excel.Application
If app Is Nothing Then
Debug.Print "Keine Objektreferenz"
Else
Debug.Print "Enthält Objektreferenz"
End If
Um die Logik der Prüfung umzukehren, verwenden Sie den logischen Operator Not.
'Objektreferenzen
Dim app As Excel.Application
If Not app Is Nothing Then
Debug.Print "Enthält Objektreferenz"
Else
Debug.Print "Keine Objektreferenz"
End If
Eigenschaften des Applikationsobjekts
Um auf die Eigenschaften des Applikationsobjektes zuzugreifen, verwenden Sie den Punktoperator. Beachten Sie, dass jede Eigenschaft selbst wiederum einen bestimmten Datentyp besitzt. So ist die Eigenschaft Name vom Datentyp String.
Nachfolgend eine Übersicht über wichtige Eigenschaften des Applikationsobjektes:
Eigenschaft | Bemerkung |
---|---|
Name | Name der Applikation. |
Version | Versionsnummer der Applikation. |
Workbooks | Auflistung aller offenen Arbeitsmappen. |
Worksheets | Auflistung aller Tabellenblätter der aktiven Arbeitsmappe. |
Charts | Auflistung aller Diagrammblätter der aktiven Arbeitsmappe. |
Sheets | Auflistung aller Tabellen- und Diagrammblätter der aktiven Arbeitsmappe. |
Cells | Auflistung aller Zellen des aktiven Tabellenblatts. |
Rows | Auflistung aller Zeilen des aktiven Tabellenblatts. |
Columns | Auflistung aller Spalten des aktiven Tabellenblatts. |
Range | Auflistung aller Zellen, Spalten und Zeilen des aktiven Tabellenblatts. |
Selection | Selektierter Bereich des aktiven Tabellenblatts. |
FileDialog | Dialog zum Öffnen und Speichern von Dateien. |
Dialogs | Auflistung aller Excel-Dialoge. |
ActiveWorkbook | Liefert die aktive Arbeitsmappe. |
ActiveSheet | Liefert das aktive Tabellenblatt. |
ActiveCell | Liefert die selektierte Zelle im aktiven Tabellenblatt. |
ThisWorkbook | Liefert die Arbeitsmappe, deren Code gerade ausgeführt wird (unabhängig davon, welche Arbeitsmappe gerade die aktive ist. |
Methoden des Applikationsobjekts
Methoden legen ein bestimmtes Verhalten fest. Um z. B. die Applikation zu beenden, rufen Sie die Methode Quit auf. Um auf die Methoden des Applikationsobjektes zuzugreifen, verwenden Sie den Punktoperator.
Nachfolgend eine Übersicht über wichtige Methoden des Applikationsobjektes:
Methode | Bemerkung |
---|---|
Quit | Beendet die Applikation. |
CentimetersToPoints | Umwandeln einer Zentimeterangabe in Punkte. |
Union | Verbinden auseinanderliegender Zellbereiche zu einem Bereichsobjekt. |
Beachten Sie, dass bestimmte Methoden nur ausgeführt werden, aber keinen Funktionswert (Rückgabewert) zurückliefern. Diese Methoden werden ohne Angabe von runden Klammern aufgerufen.
'Beenden der Applikation 'Kein Funktionswert, daher Aufruf ohne runde Klammern Application.Quit
Methoden, die einen Funktionswert (Rückgabewert) zurückliefern, werden mit runden Klammern aufgerufen, sofern der Methodenaufruf in einer Variable oder einem Ausdruck verwendet wird.
'Umrechnung Zentimeter in Punkte 'Rückgabe eines Funktionswertes, daher Aufruf mit runden Klammern Debug.Print Application.CentimetersToPoints(2.5)
Auflistungen
Auflistungen (Collections) sind Sammlungen von Objekten, wobei meistens Objekte des gleichen Datentyps in einer Sammlung liegen.
In Excel gibt es einige Objekte, die Zugriff auf weitere Objekte in Form von Auflistungen (Collections) zur Verfügung stellen. Die Bezeichnung dieser Auflistung ist immer in der Mehrzahl und meist vom Typ der Objekte, die in der jeweiligen Auflistung enthalten sind.
Arbeitsmappen sind vom Datentyp Workbook. Die Anweisung Application.Workbooks liefert die Sammlung aller offenen Arbeitsmappen.
Tabellenblätter sind vom Datentyp Worksheet. Die Anweisung Application.Worksheets liefert die Sammlung aller Tabellenblätter in der aktiven Arbeitsmappe.
Zeilen und Spalten sind vom Datentyp Row bzw. Column. Dementsprechend liefen die Anweisungen Application.Rows und Application.Columns die Sammlungen aller Zeilen bzw. Spalten des aktiven Tabellenblatts in der aktiven Arbeitsmappe.
Zellen bzw. Zellbereiche sind vom Datentyp Range. Die Anweisung Application.Cells bzw. Application.Range liefert die Sammlung aller Zellen des aktiven Tabellenblatts in der aktiven Arbeitsmappe.
Schon jetzt sei angemerkt, dass auch der Datentyp Worksheet die Eigenschaften Rows, Columns, Cells und Range kennt. Somit kann auch auf die Zeilen, Spalten, Zellen und Zellbereiche eines bestimmten Tabellenblatts zugegriffen werden.
Eine wichtige Methode jeder Auflistung ist Count, die die Anzahl der Objekte einer Auflistung zurückgibt.
'Verwendung von Count
Dim app As Excel.Application
Set app = Excel.Application
Debug.Print app.Workbooks.Count
Debug.Print app.Worksheets.Count
Debug.Print app.Rows.Count
Debug.Print app.Columns.Count
Arbeitsmappenobjekt (Workbook)
Allgemein
Eine Excel-Arbeitsmappe ist vom Datentyp Workbook. Um mit den Eigenschaften und Methoden einer Arbeitsmappe zu arbeiten, sollten Sie die gewünschte Arbeitsmappe über eine Variable vom Datentyp Workbook referenzieren.
Die Anweisung Application.Workbooks liefert eine Sammlung aller offenen Arbeitsmappen. Der Zugriff auf eine bestimmte Arbeitsmappe erfolgt über einen 1-basierten Index oder über die Dateibezeichnung.
Der Zugriff über den Index wird meist verwendet, um in einer Schleife über alle offenen Arbeitsmappen zu gehen. Im folgenden Beispiel werden die Dateibezeichnung, der Verzeichnispfad und der volle Name (Verzeichnispfad und Dateibezeichnung) aller offenen Arbeitsmappen im Direktfenster ausgegeben.
'Schleife über alle offenen Arbeitsmappen
Dim i As Integer
Dim wb As Excel.Workbook
For i = 1 To Application.Workbooks.Count
Set wb = Application.Workbooks(i)
Debug.Print wb.Name
Debug.Print wb.Path
Debug.Print wb.FullName
Next
Im folgenden Beispiel werden die Dateibezeichnung, der Verzeichnispfad und der volle Name (Verzeichnispfad und Dateibezeichnung) einer bestimmten geöffneten Arbeitsmappe im Direktfenster ausgegeben, wobei hier der Zugriff über die Dateibezeichnung erfolgt.
'Zugriff auf offene Arbeitsmappe über die Dateibezeichnung
Dim wb As Excel.Workbook
Set wb = Application.Workbooks("MeineDatei.xlsx")
Debug.Print wb.Name
Debug.Print wb.Path
Debug.Print wb.FullName
Der Zugriff auf eine bestimmte Arbeitsmappe über den Index bzw. die Dateibezeichnung ist nicht gut, da der Index von der Reihenfolge des Öffnens abhängt und die Dateibezeichnung sich ändern kann.
Besser ist der Zugriff über die beiden Eigenschaften des Applikationsobjekts, mit denen die aktive Arbeitsmappe (ActiveWorkbook) bzw. die Arbeitsmappe, in der der ausgeführte Code implementiert ist (ThisWorkbook) referenziert werden kann.
'Zugriff auf eine bestimmte Arbeitsmappe Dim wb As Excel.Workbook 'Zugriff auf die aktive Arbeitsmappe Set wb = Application.ActiveWorkbook Debug.Print wb.Name Debug.Print wb.Path Debug.Print wb.FullName 'Zugriff auf die Arbeitsmappe, in der der Code implementiert ist. 'Diese muss nicht die aktive Arbeitmappe sein. Set wb = Application.ThisWorkbook Debug.Print wb.Name Debug.Print wb.Path Debug.Print wb.FullName
Um eine neue Arbeitsmappe zu erzeugen, verwenden Sie die Add-Methode der Workbooks-Auflistung.
'Erstellen einer neuen Arbeitsmappe
Application.Workbooks.Add
Debug.Print Application.ActiveWorkbook.Name
In obigem Beispiel ist die neue Arbeitsmappe die aktive Arbeitsmappe und kann über ActiveWorkbook referenziert werden. Da die Add-Methode eine Referenz auf die neue Arbeitsmappe zurückliefert, ist es besser, die neue Arbeitsmappe gleich über eine Variable zu referenzieren. Beachten Sie den Methodenaufruf mit runden Klammern, da wir den Funktionswert (Rückgabewert) von Add verwenden.
'Besseres Erstellen einer neuen Arbeitsmappe
Dim wb As Excel.Workbook
Set wb = Application.Workbooks.Add()
Debug.Print wb.Name
Die Add-Methode nimmt optional auch den Dateipfad zu einer Excel-Vorlage (.xltx oder .xltm) entgegen, die als Basis für die neue Arbeitsmappe dient.
'Neue Arbeitsmappe basierend auf einer Vorlage
Dim wb As Excel.Workbook
Set wb = Application.Workbooks.Add("C:\MeineVorlage.xltx")
Debug.Print wb.Name
Um eine bestehende Arbeitsmappe zu öffnen, verwenden Sie die Open-Methode der Workbooks-Auflistung.
'Öffnen einer Arbeitsmappe
Application.Workbooks.Open("C:\MeineArbeitsmappe.xlsx")
Debug.Print Application.ActiveWorkbook.Name
In obigem Beispiel ist die geöffnete Arbeitsmappe die aktive Arbeitsmappe und kann über ActiveWorkbook referenziert werden. Da die Open-Methode eine Referenz auf die geöffnete Arbeitsmappe zurückliefert, ist es besser, die geöffnete Arbeitsmappe gleich über eine Variable zu referenzieren. Beachten Sie den Methodenaufruf mit runden Klammern, da wir den Funktionswert (Rückgabewert) von Open verwenden.
'Besseres Öffnen einer Arbeitsmappe
Dim wb As Excel.Workbook
Set wb = Application.Workbooks.Open("C:\MeineArbeitsmappe.xlsx")
Debug.Print wb.Name
Eigenschaften einer Arbeitsmappe
Um auf die Eigenschaften einer Arbeitsmappe zuzugreifen, verwenden Sie den Punktoperator. Beachten Sie, dass jede Eigenschaft selbst wiederum einen bestimmten Datentyp besitzt. So ist die Eigenschaft Name vom Datentyp String.
Nachfolgend eine Übersicht über wichtige Eigenschaften einer Arbeitsmappe:
Eigenschaft | Bemerkung |
---|---|
Name | Dateibezeichnung der Arbeitsmappe. |
Path | Verzeichnispfad der Arbeitsmappe. |
FullName | Verzeichnispfad und Dateibezeichnung der Arbeitsmappe. |
Worksheets | Auflistung aller Tabellenblätter der Arbeitsmappe. |
Charts | Auflistung aller Diagrammblätter der Arbeitsmappe. |
Sheets | Auflistung aller Tabellen- und Diagrammblätter der Arbeitsmappe. |
Methoden einer Arbeitsmappe
Methoden legen ein bestimmtes Verhalten fest. Um z. B. die Arbeitsmappe zu schließen, rufen Sie die Methode Close auf. Um auf die Methoden einer Arbeitsmappe zuzugreifen, verwenden Sie den Punktoperator.
Nachfolgend eine Übersicht über wichtige Methoden einer Arbeitsmappe:
Methode | Bemerkung |
---|---|
Close | Schließen der Arbeitsmappe. |
Activate | Aktivieren der Arbeitsmappe. |
Save | Speichern der Arbeitsmappe. |
SaveAs | Speichern der Arbeitsmappe unter einem bestimmten Namen. |
PrintOut | Drucken der Arbeitsmappe. |
PrintPreview | Anzeige der Druckansicht der Arbeitsmappe. |
SendMail | Versand der Arbeitsmappe über das installierte Mailsystem. |
Beachten Sie, dass bestimmte Methoden nur ausgeführt werden, aber keinen Funktionswert (Rückgabewert) zurückliefern. Diese Methoden werden ohne Angabe von runden Klammern aufgerufen.
'Schließen der aktiven Arbeitsmappe 'Änderungen werden gespeichert Dim wb As Excel.Workbook Set wb = Application.ActiveSheet wb.Close True
Tabellenblattobjekt (Worksheet)
Allgemein
Ein Excel-Tabellenblatt ist vom Datentyp Worksheet. Um mit den Eigenschaften und Methoden eines Tabellenblatts zu arbeiten, sollten Sie das gewünschte Tabellenblatt über eine Variable vom Datentyp Worksheet referenzieren.
Die Anweisung Application.Worksheets liefert eine Sammlung aller Tabellenblätter der aktiven Arbeitsmappe. Auch das Arbeitsmappenobjekt kennt die Anweisung Worksheets. Somit können Sie auf die Tabellenblätter einer bestimmten Arbeitsmappe zugreifen. Der Zugriff auf ein bestimmtes Tabellenblatt erfolgt über einen 1-basierten Index oder über die Tabellenblattbezeichnung.
Der Zugriff über den Index wird meist verwendet, um in einer Schleife über alle Tabellenblätter zu gehen. Im folgenden Beispiel werden die Tabellenblattbezeichnung und die Sichtbar-Eigenschaft aller Tabellenblätter der aktiven Arbeitsmappe im Direktfenster ausgegeben.
'Schleife über alle Tabellenblätter der aktiven Arbeitsmappe
Dim i As Integer
Dim ws As Excel.Worksheet
For i = 1 To Application.Worksheets.Count
Set ws = Application.Worksheets(i)
Debug.Print ws.Name
Debug.Print ws.Visible
Next
Im folgenden Beispiel wird die Dateibezeichnung der aktiven Arbeitsmappe und die Tabellenblattbezeichnung und die Sichtbar-Eigenschaft aller Tabellenblätter der aktiven Arbeitsmappe im Direktfenster ausgegeben.
'Schleife über alle Tabellenblätter der aktiven Arbeitsmappe
Dim i As Integer
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
Set wb = Application.ActiveWorkbook
Debug.Print wb.Name
For i = 1 To wb.Worksheets.Count
Set ws = wb.Worksheets(i)
Debug.Print ws.Name
Debug.Print ws.Visible
Next
Im folgenden Beispiel wird die Sichtbar-Eigenschaft eines bestimmten Tabellenblatts im Direktfenster ausgegeben, wobei der Zugriff über die Tabellenblattbezeichnung erfolgt.
'Zugriff auf ein Tabellenblatt über die Bezeichnung
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
Set wb = Application.ActiveWorkbook
Set ws = wb.Worksheets("Tabelle1")
Debug.Print ws.Visible
Um ein neues Tabellenblatt zu erzeugen, verwenden Sie die Add-Methode der Worksheets-Auflistung. Durch zusätzliche Argumente können Sie steuern, an welcher Position das neue Tabellenblatt eingefügt wird.
Im folgenden Beispiel wird ein neues Tabellenblatt am Beginn eingefügt und der Name des neuen Tabellenblatts im Direktfenster ausgegeben.
'Erstellen eines neuen Tabellenblatt am Beginn
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
Set wb = Application.ActiveWorkbook
Set ws = wb.Worksheets.Add()
Debug.Print ws.Name
über die Argumente Before bzw. After geben Sie jenes Tabellenblatt an, vor bzw. nach welchem das neue Tabellenblatt eingefügt. wird. Um auf das letzte Tabellenblatt zuzugreifen verwenden Sie den indexbasierten Zugriff der Worksheets-Anweisung und geben als Index die Anweisung Worksheets.Count an.
Im folgenden Beispiel wird ein neues Tabellenblatt nach dem letzten Tabellenblatt eingefügt und der Name des neuen Tabellenblatts im Direktfenster ausgegeben.
'Erstellen eines neuen Tabellenblatt am Ende
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
Set wb = Application.ActiveWorkbook
Set ws = wb.Worksheets.Add(, wb.Worksheets(wb.Worksheets.Count))
Debug.Print ws.Name
Um ein Tabellenblatt zu löschen, rufen Sie die Delete-Methode des Tabellenblattobjekts auf. Beim Ausführen der Delete-Methode wird der User um Bestätigung des Löschvorgangs gebeten.
'Löschen des ersten Tabellenblatts
Dim wb As Excel.Workbook
Set wb = Application.ActiveWorkbook
wb.Worksheets(1).Delete
Im folgenden Beispiel werden alle Tabellenblätter bis auf das erste gelöscht. Dazu verwenden Sie eine Schleife, die läuft, bis die Anzahl der Tabellenblätter gleich 1 ist.
'Löschen aller Tabellenblätter bis auf das erste
Dim wb As Excel.Workbook
Set wb = Application.ActiveWorkbook
Do Until wb.Worksheets.Count = 1
wb.Worksheets(2).Delete
Loop
Um die mehrmalige Löschbestätigungsmeldung zu unterdrücken, können Sie vor der Schleife die DisplayAlerts-Eigenschaft des Applikationsobjekts auf False setzen. Vergessen Sie nicht, nach der Schleife die DisplayAlerts-Eigenschaft auf True zu setzen. Generell sollten Sie derartige Applikationseinstellungen erst vornehmen, wenn Sie über das Behandeln von Laufzeitfehlern Bescheid wissen, um beim Auftreten eines Fehlers die geänderten Applikationseinstellungen wieder zurückzusetzen.
'Löschen aller Tabellenblätter bis auf das erste
Dim wb As Excel.Workbook
Set wb = Application.ActiveWorkbook
Application.DisplayAlerts = False
Do Until wb.Worksheets.Count = 1
wb.Worksheets(2).Delete
Loop
Application.DisplayAlerts = True
Eigenschaften eines Tabellenblatts
Um auf die Eigenschaften eines Tabellenblatts zuzugreifen, verwenden Sie den Punktoperator. Beachten Sie, dass jede Eigenschaft selbst wiederum einen bestimmten Datentyp besitzt. So ist die Eigenschaft Name vom Datentyp String.
Nachfolgend eine Übersicht über wichtige Eigenschaften eines Tabellenblatts:
Eigenschaft | Bemerkung |
---|---|
Name | Bezeichnung des Tabellenblatts. |
Parent | Verweis auf die Arbeitsmappe, in der sich das Tabellenblatt befindet. |
Visible | Sichtbareigenschaft des Tabellenblatts. |
Cells | Auflistung aller Zellen des Tabellenblatts. |
Rows | Auflistung aller Zeilen des Tabellenblatts. |
Columns | Auflistung aller Spalten des Tabellenblatts. |
Range | Auflistung aller Zellen, Spalten und Zeilen des Tabellenblatts. |
UsedRange | Rechteckiger Bereich des Tabellenblatts, der Daten enthält. |
Methoden eines Tabellenblatts
Methoden legen ein bestimmtes Verhalten fest. Um z. B. ein Tabellenblatt zu löschen, rufen Sie die Methode Delete auf. Um auf die Methoden eines Tabellenblatts zuzugreifen, verwenden Sie den Punktoperator.
Nachfolgend eine Übersicht über wichtige Methoden eines Tabellenblatts:
Methode | Bemerkung |
---|---|
Activate | Aktivieren des Tabellenblatts. |
Protect | Schützen des Tabellenblatts. |
Unprotect | Schutz des Tabellenblatts aufheben. |
Move | Verschieben des Tabellenblatts. |
Copy | Kopieren des Tabellenblatts. |
Delete | Löschen des Tabellenblatts. |
PrintOut | Drucken des Tabellenblatts. |
PrintPreview | Anzeige der Druckansicht des Tabellenblatts. |
Beachten Sie, dass bestimmte Methoden nur ausgeführt werden, aber keinen Funktionswert (Rückgabewert) zurückliefern. Diese Methoden werden ohne Angabe von runden Klammern aufgerufen.
Im folgenden Beispiel wird das erste Tabellenblatt an die letzte Position verschoben.
'Verschieben des ersten Tabellenblattes an die letzte Position
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
Set wb = Application.ActiveWorkbook
Set ws = wb.Worksheets(1)
ws.Move , wb.Worksheets(wb.Worksheets.Count)
Im folgenden Beispiel wird das letzte Tabellenblatt an die erste Position verschoben.
'Verschieben des letzten Tabellenblattes an die erste Position
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
Set wb = Application.ActiveWorkbook
Set ws = wb.Worksheets(wb.Worksheets.Count)
ws.Move wb.Worksheets(1)
Bereich (Range)
Allgemein
Ein Bereich ist vom Datentyp Range. Ein Bereich kann eine oder mehrere Zellen umfassen, kann aber auch eine oder mehrere Zeilen bzw. Spalten umfassen. Deshalb gibt es eine Unzahl von Anweisungen, die ein Rangeobjekt zurückliefern.
Die folgenden Anweisungen liefern jeweils einen Bereich zurück und können zum Teil auf das Applikationsobjekt oder ein bestimmtes Tabellenblattobjekt aufgerufen werden. Wenn Sie die Anweisungen alleinstehend aufrufen, so beziehen diese sich immer auf das aktive Tabellenblatt der aktiven Arbeitsmappe.
Anweisung | Bemerkung |
---|---|
Rows | Alle Zeilen. |
Rows(1) | Erste Zeile. |
Rows(Rows.Count) | Letzte Zeile. |
Rows("1:4") | Zeile 1 bis 4. |
Columns | Alle Spalten. |
Columns(1) | Erste Spalte. |
Columns(Columns.Count) | Letzte Spalte. |
Columns("A") | Spalte A. |
Columns("A:D") | Spalte A bis D. |
Cells | Alle Zellen. |
ActiveCell | Aktive Zelle. |
Cells(2, 1) | Zelle A2 (Angabe von Zeilen- und Spaltenindex). |
Range("A1") | Zelle A1. |
Range("A1:C2") | Bereich von A1 bis C2. |
Range(Cells(1,1), Cells(2,3)) | Bereich von A1 bis C2. |
UsedRange | Rechteckiger Bereich der Daten enthält. |
Selection | Aktuell ausgewählter Bereich. |
Union Range("A1"), Range("C2") | Bereich der aus A1 und C2 besteht (entspricht der Auswahl im Tabellenblatt mit gedrückter Strg-Taste). |
Beachten Sie, dass es sich beim Datentyp Range um einen Objektdatentyp handelt. Wird der gewünschte Bereich einer Variablen zugewiesen, so müssen Sie das Schüsselwort Set verwenden.
'Referenzieren eines Bereichs über eine Variable
Dim r As Excel.Range
Set r = Range("A1")
Um den Inhalt eines Bereichs zu schreiben, verwenden Sie die Value-Eigenschaft. Die Value-Eigenschaft ist die Standardeigenschaft. Ist aus dem Anweisungskontext klar, dass Sie den Inhalt lesen oder schreiben wollen, so können Sie den Aufruf von Value weglassen.
'Lesen und Schreiben des Inhalts eines Bereichs Dim r As Excel.Range Set r = Range("A1") 'Ausgabe des Inhalts der Zelle A1 im Direktfenster mit Value Debug.Print r.Value 'Ausgabe des Inhalts der Zelle A1 im Direktfenster ohne Value Debug.Print r 'Schreiben der Zahl 10 in die Zelle A1 mit Value r.Value = 10 'Schreiben der Zahl 10 in die Zelle A1 ohne Value r = 10
Umfasst Ihr Bereich mehrere Zellen, so können Sie mit einer Anweisung den gleichen Inhalt in die Zellen des Bereichs schreiben. Beim Auslesen erhalten Sie eine Fehlermeldung, da ein mehrzelliger Bereich keinen auslesbaren Inhalt besitzt. Um auf die erste Zelle dieses Bereichs zuzugreifen, müssen Sie auf den Bereich wiederrum die Cells-Anweisung aufrufen.
'Lesen und Schreiben des Inhalts eines mehrzelligen Bereichs Dim r As Excel.Range Set r = Range("A1:C3") 'Fehler, beim Ausführen der nächsten beiden Anweisungen Debug.Print r.Value Debug.Print r 'Ausgabe des Inhalts der ersten Zelle im Bereich im Direktfenster mit Value Debug.Print r.Cells(1,1).Value 'Ausgabe des Inhalts der ersten Zelle im Bereich im Direktfenster ohne Value Debug.Print r.Cells(1,1) 'Schreiben der Zahl 10 in alle Zellen des Bereichs mit Value r.Value = 10 'Schreiben der Zahl 10 in alle Zellen des Bereichs ohne Value r = 10
Eigenschaften eines Bereichs
Um auf die Eigenschaften eines Bereichs zuzugreifen, verwenden Sie den Punktoperator. Beachten Sie, dass jede Eigenschaft selbst wiederum einen bestimmten Datentyp besitzt. So ist die Eigenschaft Address vom Datentyp String.
Nachfolgend eine Übersicht über wichtige Eigenschaften eines Bereichs:
Eigenschaft | Bemerkung |
---|---|
Address | Bereichsbezeichnung in der Form A1, $A$1,R1C1 oder Z1S1. |
Parent | Verweis auf das Tabellenblatt, in dem sich der Bereich befindet. |
Rows | Alle Zeilen des Bereichs. |
Row | Erste Zeile des Bereichs als Zahl. |
Columns | Alle Spalten des Bereichs. |
Column | Erste Spalte des Bereichs als Zahl. |
Cells | Alle Zellen des Bereichs. |
Offset | Liefert ausgehend vom Bereich einen neuen Bereich mit einem entsprechenden Zeilen- bzw. Spaltenversatz. |
CurrentRegion | Liefert ausgehend vom Bereich den rechteckigen durchgehenden Bereich, der Daten enthält. |
Mit der Anweisung Row ermitteln Sie die Zeilennummer der ersten Zeile eines Bereichs. Mit der Anweisung Column ermitteln Sie die Spaltennummer der ersten Spalte eines Bereichs, wobei 1 der Spalte A, 2 der Spalte B, usw. entspricht.
'Ausgabe der Zeilen und Spaltennummer der ersten Zeile bzw. Spalte eines Bereichs im Ausgabefenster.
Dim r As Excel.Range
Set r = Range("C2")
Debug.Print r.Row
Debug.Print r.Column
Im Ausgabefenster sollten die Zahlen 2 und 3 ausgegeben werden.
Mit der Anweisungen Cells.Count lässst sich sehr leicht feststellen, ob ein Bereich ein- oder mehrzellig ist.
'Prüfen, ob der User einen ein- oder mehrzelligen Bereich ausgewählt hat.
Dim r As Excel.Range
Set r = Selection
If r.Cells.Count = 1 Then
Debug.Print "Eine Zelle ausgewählt."
Else
Debug.Print "Mehrere Zellen ausgewählt."
End If
Mit der Eigenschaft Offset können Sie ausgehend von einem Bereich weitere Bereiche mit einem Zeilen- bzw. Spaltenversatz ansprechen.
Im folgenden Beispiel geben wir ausgehend von der Zelle A1 die Inhalte der Zellen A2, B1 und B2 aus.
'Verwenden von Offset. Dim r As Excel.Range Set r = Range("A1") Debug.Print r.Offset(1, 0) 'Ausgabe von A2 Debug.Print r.Offset(0, 1) 'Ausgabe von B1 Debug.Print r.Offset(1, 1) 'Ausgabe von B2
Methoden eines Bereichs
Methoden legen ein bestimmtes Verhalten fest. Um z. B. einen Bereichsinhalt zu löschen, rufen Sie die Methode ClearContents auf. Um auf die Methoden eines Bereichs zuzugreifen, verwenden Sie den Punktoperator.
Nachfolgend eine Übersicht über wichtige Methoden eines Bereichs:
Methode | Bemerkung |
---|---|
Select | Auswählen eines Bereichs. |
Clear | Löschen von Inhalten, Formaten und Kommentaren eines Bereichs. |
ClearContents | Löschen aller Inhalte eines Bereichs.. |
ClearFormats | Löschen aller Formate eines Bereichs.. |
AutoFit | Ist der Bereich eine oder mehrere Zeilen bzw. eine oder mehrere Spalten, wird die optimale Zeilen- bzw. Spaltenhöhe eingestellt. |
Beachten Sie, dass bestimmte Methoden nur ausgeführt werden, aber keinen Funktionswert (Rückgabewert) zurückliefern. Diese Methoden werden ohne Angabe von runden Klammern aufgerufen.
Im folgenden Beispiel werden die Zeilen und Spalten des Bereichs, den der User ausgewählt hat auf die optimale Höhe bzw. Breite gesetzt.
'Optimale Zeilenhöhe und Spaltenbreite
Dim r As Excel.Range
Set r = Selection
r.Rows.AutoFit
r.Columns.AutoFit
Anweisung With...End With
Beim Zugriff auf die Eigenschaften und Methoden eines Objekts wird der Punktoperator verwendet. Wollen Sie mehrere Eigenschaften setzen oder Methoden aufrufen, so ist die wiederholte Angabe der Objektvariable nicht sehr komfortabel.
'Wiederholte Angabe der Objektvariable
Dim ws As Excel.Worksheet
Set ws = Application.ActiveSheet
ws.Name = "MeineTabelle"
ws.Visible = True
ws.Activate
ws.Cells(1, 1).Select
Erleichterung bietet die With...End Width-Anweisung. Alle Anweisungen, die mit dem Punktoperator beginnen, beziehen sich auf die in der With-Anweisung angegebenen Objektvariable.
'Erleichterung mit With...End With
Dim ws As Excel.Worksheet
Set ws = Application.ActiveSheet
With ws
.Name = "MeineTabelle"
.Visible = True
.Activate
.Cells(1, 1).Select
End With
Die With...End With-Anweisung kann auch verschachtelt werden. Im folgenden Beispiel bezieht sich die erste With-Anweisung auf die aktive Zelle, die innere With-Anweisung bezieht sich auf die Font-Eigenschaft der Zelle, mit der Sie weitere Einstellungen zur Schriftformatierung treffen können.
'Verschachtelung von With...End With
Dim r As Excel.Range
Set r = Application.ActiveCell
With r
.Select
.Value = 10
With .Font
.Bold = True
.Color = vbRed
.Size = 20
End With
End With
Download Codebeispiele
Die gezeigten Codebeispiele können Sie als xlsm-Datei herunterladen.