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.

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:C3 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 Summe76
5
 Tabelle1  Tabelle2  Tabelle3  Tabelle4

In VBA stehen für Arbeitsmappen Workbook-, für Arbeitsblätter Worksheet-, für Zellen Cells- und für Bereiche Range-Objekte zur Verfügung. Diese Objekte sind natürlich auch über die entsprechende Auflistung des jeweils übergeordneten Objekts ansprechbar. Einfacher geht es oft, indem man mit ActiveWorkbook, ActiveSheet oder ActiveCell auf die entsprechend aktuellen Objekte zugreift. Die folgenden Debug.Print-Anweisungen geben stets den gleichen Wert, nämlich den der aktiven 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 numerischen Angaben von Cells - egal, ob ein- oder zweidimensional - haben den Vorteil, dass man sie in Schleifen durchlaufen kann:

Public Sub neueWerte()
Dim i As Integer

For i = 1 To 4
    ActiveSheet.Range("MeinBereich").Cells(i) = i
Next

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.