Excel VBA

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

Anwendungen 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

ExcelVBA4.jpg

support.office.com: Makro ausführen

Makros speichern

  • in persönlicher Datei (nur die Datei)
  • Persönliche Makroarbeitsmappe (für alle Excel-Dateien)

Makrosicherheit

ExcelVBA2.jpg

ExcelVBA3.jpg

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

  1. Registerkarte "Entwicklertools"
  2. Makro aufzeichnen
  3. Makro stoppen und Namen vergeben

Registerkarte Entwicklungstools

ExcelVBA1.jpg

ExcelVBA5.jpg

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

VBAFormatDateTime1.jpg

Web-Links

Literatur