Excel VBA
Aus SAP-Wiki
Zur Navigation springenZur Suche springenAnwendungen Excel VBA
Grundlagen
Glossar
Excel-VBA-Autor Bernd Held
- B.Held@Held-office.de
- Beispieldateien lassen sich über Mail anfordern
- Homepage von Markt & Technik mit VBA-Forum
Hilfe
GitHub
Nutzen VBA
- Automatisierung häufige Abläufe
- Aufruf von anderen Office-Programmen aus Excel
- Makrorecorder
- Debugging
- Excel ist in jedem Projekt verfügbar
- Viele Quellen im Internet
- Viele Bücher
- Immer nützlich für die eigene Ticketverwaltung
IDE (alt+F11)
Autokorrektur
- Excel passt jeden ihm bekannten Schlüsselbefehl an und schreibt den ersten Buchstaben groß
- daher selber den ersten Buchstaben klein schreiben, um zu erkennen, ob der Befehl korrekt als Schlüsselwort erkannt wurde
Debugging
Funktionen
Makros
Start Makros
support.office.com: Makro ausführen
Makros speichern
- in persönlicher Datei (nur die Datei)
- Persönliche Makroarbeitsmappe (für alle Excel-Dateien)
Makrosicherheit
Modularisierung Makros
Das Makro "Anpassen" wird aufgerufen. Hier ohne Übergabeparameter.
Private Sub Worksheet_Change (ByVal Target As Excel.Range) Anpassen End Sub
Sub Anpassen() Cells.EntireColumn.AutoFit Cells.EntireRow.AutoFit End Sub
Makrorecorder
- Registerkarte "Entwicklertools"
- Makro aufzeichnen
- Makro stoppen und Namen vergeben
Registerkarte Entwicklungstools
Tastenkürzel
- alt + F11 = Sprung zur IDE
- F5 = Makro komplett ausführen / starten
- F8 = Makro im Einzelschritt ausführen
- F9 = Haltepunkt setzen/wieder entfernen
- strg + f = suchen nach Coding
Tabellenname
- Der Tabellenname ist nicht der, der auf der Registerkarte steht
- In der Codingansicht/IDE sieht man den technischen Namen und in Klammern der Name, der einem in Excel auf der Registerkarte erscheint
Variablen
Excel VBA
Application.DisplayAlerts
Möchte man, dass der Bildschirm während Änderungen nicht aktualisiert wird, kann man dies über „Application.DisplayAlerts = False“ erreichend. Anschließend sollte man wieder über „Application.DisplayAlerts = True“ die Sichtbarkeit von Änderungen wieder aktiv schalten.
Application.DisplayAlerts = False Sh.Delete Application.DisplayAlerts = True
Bedingungen (if, case)
Filter
Kommentare
On Error GoTo fehler
Wenn ein Fehler passiert, wird eine Fehlerroutine im Makro angesprungen, z. B wenn eine Tabelle nicht existiert
'Listing 8.1: Eine Tabelle beim Öffnen der Mappe voreinstellen 'Held VBA, S. 236 Private Sub Workbook_Open() On Error GoTo fehler Tabelle1.Activate Exit Sub fehler: MsgBox "Die Tabelle ist nicht vorhanden!" End Sub
Schleifen
Verknüpfungsbefehle (&, _, vbLf)
- & verknüpft Texte, Variablen etc.
- mit _ kann man zusammengehörige Befehle auf mehrere Zeilen schreiben
- " " umschließt Text
- vbLf (Linefeed) = Zeilenumbruch
Sub MehrzeiligeMeldungausgeben() MsgBox "Der angemeldete Anwender heißt: " & _ Environ("username") & vbLf & _ "Heute ist " & Format(Date, "DDDD, ""der"" DD.MM.YYYY") & vbLf & _ "Aktuelle Uhrzeit: " & Time & " Uhr", vbInformation, _ "Aktuelle Ansage" End Sub
Objekte
ActiveCell
ActiveWorkbook
Cells
Range
Range("A1").Select
WorkSheets("tabelle1").Range("A1").Select
Ereignisse
Workbook (Datei / Arbeitsmappe)
Im Projekt-Explorer auf die Excel-Datei klicken. Hier werden die Ereignisse ausgewählt und nicht in einnem Modul.
Worksheet (Tabellenblatt)
Ausgaben und Eingaben (Messages)
Eingabe / InputBox
Sub ZahlAuswerten() Dim intEingabe As Integer intEingabe = InputBox("Geben Sie einen Wert ein!") Select Case intEingabe Case 1 To 5 MsgBox "Wert liegt zwischen 1 und 5" Case 6, 7, 8 MsgBox "Wert ist entweder 6, 7 oder 8" Case 9 To 15 MsgBox "Wert liegt zwischen 9 und 15" Case 16 To 50 MsgBox "Wert liegt zwischen 16 und 50" Case Is > 50 MsgBox "Wert liegt über 50" Case Else MsgBox "Es wurde kein gültiger Wert eingegeben!" End Select end sub
Listing 9.4: Einen Bereich über eine Inputbox markieren
Sub BereicheMarkieren() Dim Bereich As Range On Error Resume Next Set Bereich = Application.InputBox(prompt:="Bereich markieren", Type:=8) If Bereich Is Nothing Then MsgBox "Sie haben keinen Bereich ausgewählt", vbExclamation Else Bereich.Select End If End Sub
'Listing 1.5: Das Alter des Anwenders wird abgefragt. 'Held, S. 46 'Sub EingabedialogAufrufen() Dim StrEingabe As String StrEingabe = InputBox("Geben Sie Ihr Geburtsdatum ein!", "Altersüberprüfung") If StrEingabe <> "" And IsDate(StrEingabe) Then MsgBox "Sie sind genau " & Format(Date - CDate(StrEingabe), "YY") & " Jahre alt!" End If End Sub
Messagebox (MsgBox)
Debug.Print
Eine Variable wird im Makro im Direktfenster ausgegeben und kann so besser debuggt werden
Debug.Print Date
'Listing 1.10: Das aktuelle Tagesdatum unterschiedlich darstellen 'Held, S. 54 Sub DatumsformateBearbeiten() DatAngabe = Now Debug.Print FormatDateTime(DatAngabe, vbGeneralDate) Debug.Print FormatDateTime(DatAngabe, vbLongDate) Debug.Print FormatDateTime(DatAngabe, vbShortDate) Debug.Print FormatDateTime(DatAngabe, vbLongTime) Debug.Print FormatDateTime(DatAngabe, vbShortTime) End Sub
Web-Links
- Excel mit VBA, von Bernd Held
- support.office.com: Makro ausführen
- Exel Filter
- Problem mit Excel Filter auf Datum
- https://diyinvestor.de/die-7-wichtigsten-excel-formeln-fuer-investoren/
Literatur
- Excel mit VBA, von Bernd Held