====== VBA ======
* **VB** = Visual Basic
* **VBA** = Visual Basic for Applications: Spracherweiterung für (MS) Office Programme
[[Beispielcode]]
===== Kommentare =====
* einzeilige Kommentare ' Das ist mein Kommentar
* mehrzeilige Kommenare gibts nicht, man muss jede Zeile mit ' anfangen.
* STRG-Pause unterbricht ein (endlos?) laufendes VBA-Programm
===== Links =====
* [[http://www.cmp-online.de/vba.htm#_Toc483226798|VBA Grundlagen]]
* [[http://www.excel-center.de/excel/handbuch.php|VBA (Excel) Handbuch]]
* [[http://www.xlam.ch/xlimits/excelvba.htm|Limitationen in Excel-VBA und -Objektmodell]]
* **[[http://www.htl-steyr.ac.at/~morg/pcinfo/Excel/exce9uxx.htm|Excel 4 Funktionsliste Deutsch/Englisch]]**
* [[http://excelwelt.de/Makros/range.html|Die Range-Methode]]
===== Besonderheiten =====
* unterscheidet nicht zwischen Groß- und Kleinschreibung, Variablen müssen nicht zwangsläufig deklariert werden, sie bekommen dann den Typ ''Variant'' d.h. je nach den Daten ändert sich der Typ (das kostet aber viel Speicherplatz!). Außerdem kann es zu unvorhersehbaren Effekten kommen, also sollte man besser mit dem Satz ''Option explicit'' (außerhalb aller Prozeduren und Funktionen) die genaue Deklaration erzwingen.
* Kommentare leitet man mit ' (Hochkomma) ein
* Deklarieren: ''Dim c As Double''
* um z.B. Strukturen zu erweitern benutzt man ReDim: z.b. ReDim Preserve Feld(51)
* (Leerzeichen)_ bedeutet der Code in nächster Zeile weitergeht
* Datentypen kann man auch mit speziellen Zeichen festlegen, z.B. # für double
* Verknüpfen von strings mit &
==== Objekte ====
* [[http://www.herber.de/mailing/vb/html/xlobjrange.htm|Range]]
===== Felder (Arrays) =====
Dim DasFeld1(30) as Integer
bzw. wenn 1 der unterste Wert sein soll:
Dim DasFeld1(1 to 30) as Integer
===== Schlüsselwörter =====
function => Funktion\\
Sub => Prozedur
Der Funktionsname ist gleichzeitig der Name der Variablen die den **Rückgabewert** enthält.
===== Tastenkombinationen =====
^ Tastenkombination ^ Wirkung ^
| STRG-LEERTASTE | Vervollständigen des Namens |
| Alt+F8 | Funktion/Prozedur ausführen |
| STRG-Unterbr | **Tastenkombination zum Abbrechen fehlerhafter Programme ** |
| Alt-F11 | ruft die integrierte Entwicklungsumgebung auf |
===== Strings =====
* Vor dem Vergleichen von Strings:
- Trimmen (trim)
- auf Uppercase setzen (ucase)
sonst bekommt man falsche Ergebnisse, da Groß und Kleinschreibung unterschiedliche sein können
Anführungszeichen in string erhält man durch [[http://vb-tec.de/strquote.htm|verdoppeln der Anführungszeichen]].
==== Zugriff auf Zellen (Excel) ====
geht einfach im ausgewählten Tabellenblatt mit
* Cells(Reihe, Spalte)
oder über Offset Reihe=256, Zelle B1 wäre also 257:
* Cells(257)
Ansonsten mit fester Angabe von Tabellenblatt und Zelle(n):
Worksheets("Tabelle1").Range("A1:J10").Value = Hallo
Value ist eine Eigenschaft, es könnte auch z.B. Clear sein.
===== Typumwandlungen =====
^ Von (Datentyp) ^ zu (Datentyp) ^ Funktion ^
| string | Zahl | val(STRING) :!: funktioniert nicht bei allen Zeichenketten (abc123 wird NICHT zu 123 umgewandelt). Wenn die Umwandlung nicht möglich ist bzw. man nur Buchstaben hat, wird 0 zurück geliefert. |
| ? | Single | Csng |
| ? | String | Cstr |
| ? | Variant | CVar |
| ? | ? für Benutzer-Fehler-Codes | CVErr |
| Ausdrücke ? | | Format |
| Zahl | in Hexadezimal | Hex |
| Zahl | inOctal | Oct |
| Long | String ( Variant) | Str |
FIXME
IsNummeric
IsDate
FIXME
CStr, Cdbl, ...
===== Beispiele =====
Function test_a_b(a As Integer, b As Integer)
test_a_b = a + b
End Function
===== Tricks =====
==== Performance verbessern ====
' Application.ScreenUpdating = True
CODE
' Application.ScreenUpdating = False