Microsoft Excel

Bekanntlich gibt es in Excel Arbeitsmappen, die wiederum aus Arbeitsblättern bestehen. Innerhalb eines Arbeitsblatts gibt es Zellen, die zu Zellbereichen zusammengefasst werden können. In jedem Arbeitsblatt ist stets genau eine Zelle die aktive Zelle. Wechselt man das Arbeitsblatt, ist auch automatisch eine andere, darin enthaltene Zelle die aktive Zelle. Für VBA sind all das Objekte.

Hier sehen wir eine Mappe namens „Mappe1.xlsm“ mit 4 Arbeitsblättern, auf die sich die folgenden Beispiele beziehen. Tabelle1 ist aktiv, darin ist B2:C4 als „MeinBereich“ benannt und zugleich auch ausgewählt. B2 ist die aktive Zelle:

Mappe1.xlsm
  MeinBereich   ƒx     =ZUFALLSBEREICH(1;6)
    ABCDE
1 Team1Team2
2 1. Würfel13
3 2. Würfel63
4 3. Würfel26
5
 Tabelle1  Tabelle2  Tabelle3  Tabelle4

In VBA gibt es für Arbeitsmappen Workbook-, für Arbeitsblätter Worksheet-, für Zellen Cells- und für Bereiche Range-Objekte. Diese Objekte sind natürlich auch über die entsprechende Auflistung des jeweils übergeordneten Objekts ansprechbar. Einfacher geht es oft, mit ActiveWorkbook, ActiveSheet oder ActiveCell auf die aktiven Objekte zuzugreifen. Die folgenden Debug.Print-Anweisungen geben stets den gleichen Wert, nämlich die aktive Zelle B2 aus:

Public Sub Zellwert()

Debug.Print Workbooks("Mappe1.xlsm").Worksheets(1).Range("B2")
Debug.Print Workbooks(1).Worksheets("Tabelle1").Range("B2")
Debug.Print Workbooks(1).Worksheets("Tabelle1").Cells(2, 2)
Debug.Print ActiveWorkbook.Worksheets("Tabelle1").Cells(2, 2)
Debug.Print ActiveSheet.Cells(2, 2)
Debug.Print ActiveCell
Debug.Print Workbooks(1).Worksheets(1).Range("MeinBereich").Cells(1)

End Sub

Sowohl Range als auch Cells geben Bereiche zurück. Sie unterscheiden sich allerdings, wie man sieht, in der Syntax. Außerdem kann Cells immer nur genau eine Zelle zurückgeben, während es bei Range mehrere sein können, wie das letzte Beispiel zeigt. Dort wird aus dem, mit Range angegebenen Bereich „MeinBereich“ die erste Zelle zurückgegeben, und zwar wiederum mit Cells. In der Praxis nutzt man Cells zumeist als zweidimensionales Array, man kann aber auch, wie im letzten Beispiel, nur einen Parameter angeben - dann wird der gesamte Bereich zeilenweise durchlaufen.

Die folgende Sub zeigt eine für Listen typische Aufgabe: Es wird ein Bereich zeilenweise durchlaufen, um in jeder Zeile etwas zu verändern. Im Beispiel wird einfach nur „erledigt“ in Spalte D geschrieben.

Public Sub Erledigt()
Dim Zelle As Range

Set Zelle = ActiveSheet.Range("MeinBereich").Cells(1)

Do While Zelle                      'Solange Zellen gefunden werden ...
    Zelle.Offset(0, 2) = "erledigt" '... Schreibe "erledigt" in Spalte D
    Set Zelle = Zelle.Offset(1)     '    und gehe 1 Zeile nach unten
Loop

End Sub


Während man Werte einfach in Zellen schreiben kann, muss man für Formeln die Zelleigenschaft FormulaLocal (oder, falls man sprachunabhängigen Code schreiben will, Formula) verwenden:

ActiveSheet.Range("MeinBereich").FormulaLocal = "=ZUFALLSBEREICH(1;6)"

Will man umgekehrt Excelfunktionen in VBA verwenden, geht das mit dem WorksheetFunction-Objekt:

Debug.Print WorksheetFunction.Pi
 3,14159265358979

Wie schon an anderer Stelle im Tutorial erwähnt, kann eine Public Function in Excel wie eine normale, in Excel eingebaute Funktion verwendet werden (sog. Userdefined Function, UDF).

Ein vollständiger Überblick über das Objektmodell findet sich auf den Seiten von Microsoft.