Variablennamen müssen mit einem Zeichen des Alphabets beginnen, innerhalb des Gültigkeitsbereichs eindeutig sein, und dürfen nicht länger als 255 Zeichen lang sein.
Jede Variable beansprucht Speicherplatz, was zur Verlängerung der Laufzeit eines Makros (einer Prozedur) führt. Damit sich dies in Grenzen hält, kann man einer Variablen zuweisen, wieviel Speicherplatz sie in Anspruch nimmt, indem man der Variablen einen Datentyp zuweist.
Sie können u. a. als einer der folgenden Datentypen deklariert werden:
- Boolean
- Byte
- Integer
- LongPtr
- String
- Range
Wird kein Datentyp angegeben, so ist der Datentyp Variant standardmä�ig zugewiesen.
Variablen werden gewöhnlich mit der DIM-Anweisung deklariert.
Long für 32- und 64-Bit
Statt Long sehen Sie hier LongPtr. Der Grund ist, dass es bei Verwendung von Code mit Long-Variablen in der 64-Bit-Version des Microsoft Office (standardmä�ig wird die 32-Bit-Version installiert) zu Problemen kommen kann: vba-tutorial.de: Datentypen.
LongPtr ist also, um den Kern der Aussagen im verlinkten Text zusammenzufassen, eine Art Weiche, die bei 32-Bit-Versionen auf Long und bei 64-Bit-Versionen auf LongLong â??umschaltetâ??.
Kennzeichnend für das Problem ist zum Beispiel diese Fehlermeldung:
Der Code in diesem Projekt muss für die Verwendung auf 64-Bit-Systemen aktualisiert werden. �berarbeiten und aktualisieren Sie Declare-Anweisungen, und markieren Sie sie mit dem PtrSafe-Attribut.
Deshalb die Empfehlung: Immer davon ausgehen, dass der Code in beiden Versionen laufen soll und deshalb LongPtr verwenden sowie API-Deklarationen am Anfang des Moduls immer mit einer solchen â??Weicheâ?? vorzunehmen:
#If VBA7 Then
Private Declare PtrSafe Function â?¦ (ByRef â?¦ As LongPtr, ByVal â?¦ As LongPtr) As LongPtr
#Else
Private Declare Function â?¦ (ByRef â?¦ As Long, ByVal â?¦ As Long) As Long
#End If
Sie sehen hier einmal das PtrSafe und dass jeder Long-Typ in der aktuellen Version als LongPtr deklariert wurde.
Weitere Beispele:
Boolean
Datentypen Boolean werden als 16-Bit-Zahlen (2 Bytes) gespeichert, die nur die Werte True oder False annehmen können.
Bsp:
Sub PruefeZeileOK()
Dim bolPositionOK As Boolean
If Selection.Row < 10 Then bolPositionOK = False Else bolPositionOK = True
If bolPositionOK = False Then MsgBox ("Aktion an dieser Position nicht zulässig!")
End Sub
Die folgende Funktion bekommt aus Prozeduren die Zeilenposition übergeben und prüft, ob die Aktion zulässig ist. Rückgabewerte: TRUE oder FALSE
Function PositionOK(lngZeilenposition As Long) As Boolean
PositionOK = True
If lngZeilenposition < 10 Then PositionOK = False
End Function
Die Verwendung in einer Sub könnte dann so aussehen:
Sub Aufruf()
Dim lngZeile As LongPtr
lngZeile = ActiveCell.Row
If PositionOK(lngZeile) = False Then
MsgBox "Geht hier nicht, Zeile " & lngZeile & " zu niedrig.", vbOKOnly + vbExclamation, "Fehler"
Exit Sub
End If
End Sub
Byte
Byte werden als einzelne 8-Bit-Zahlen (1 Byte) ohne Vorzeichen gespeichert und haben einen Wert im Bereich von 0 bis 255.
Integer
Integer werden als 16-Bit-Zahlen (2 Bytes) in einem Bereich von -32.768 bis 32.767 gespeichert.
String
Datentyp String kann Buchstaben, Zahlen, Leerzeichen und Satzzeichen enthalten.
Sub Meldung()
Dim strText As String
Dim strTitel As String
strText = "Hallo 12345"
strTitel = "*******Titel ******"
MsgBox strText, , strTitel
End Sub
Range
Datentyp Range gibt eine Zelle oder einen Zellbereich aus.
Sub ZeilenMarkieren()
Dim rngBereich As Range
Set rngBereich = Sheets("Tabelle1").Range("A1:C5")
If rngBereich.Interior.ColorIndex = 3 Then rngBereich.Interior.ColorIndex = 5 Else rngBereich.Interior.ColorIndex = 3
End Sub