Im Rahmen der Mitarbeiterfortbildungen an der Ostfalia findet am 07.01.2020 ein Seminar zum Thema "Excel für Fortgeschrittene - Arbeiten mit Makros" statt.
Hier unsere Ausschreibung: Sie lernen in diesem praxisorientierten Seminar die Handhabung und den Umgang mit dem Programm Excel aus dem Hause Microsoft:
- Dateitypen für Mappen mit aktiven Elementen
- Nutzung von Arbeitsmappenvorlagen
- Makros aufzeichnen (Makrorekorder)
- VBA-Editor nutzen (Debugging)
- Makros manuell anpassen (Editing)
- Eigener VBA-Makrocode (Module)
- Eigene Excel-Funktionen per VBA Function
- VBA-Beispiele
Hier die Rahmendaten der Veranstaltung:
Ort: Ostfalia - Wolfsburg, Robert Koch Platz 8a, 2.OG, Raum C 231
Zeit: Mittwoch, 07.01.2020; 09.00 - 16.00 Uhr
Ich werde unser Seminar an dieser Stelle - wie immer - ausführlich begleiten und wünsche viel Spaß und Erfolg ...
Ihr Trainer Joe Brandes
Mittwoch, 07.01.2020, 09.00 - 16.00 Uhr
Orientierungsphase, TN-Fragen, ...
Anmeldungen im RZ-Pool
Für die Nutzungen des RZ-Pool wurden Konten vorbereitet:
- Rechner ggf. einschalten und bitte an dem Windows-System (Strg + Alt + Entf) anmelden
- Dann erste Anmeldung mit Konto (Anm.: Server für die Virtuellen Maschinen)
- Danach wählen Sie aus der Übersicht über die Virtuellen Maschinen die VM "F&L-Pool (Allgemein)" mit Doppelklick aus.
Wichtig: die auf diese Art genutzten Virtuellen Maschine vergessen alle lokalen Daten und Infos!
Anm. Techniken in RZ-Pools noch recht frisch
Hinweis auf Online-Resourcen
... und Tools für die weiteren Arbeiten im Seminar
Screenshots mit Windows Boardmitteln ( Win + Druck )
Bildschirmlupe mit Windows Boardmitteln ( Win + + ;weglegen der Lupe mit Win + ESC )
Alternative Trainer-Tools (Bildschirmlupe "Virtual Magnifiying Glass" und Screenshots erstellen mit "Lightscreen") über Portal portableapps.com
Beitrag zum Thema "Shortcuts / Tastenkombinationen" auf diesem Portal
Ansprechpartner an der Ostfalia - Dezernat 2 - Personalentwicklung - Frau Haubold
Hinweis: manche Bücher zu diesen Themen heißen "... in 14 Tagen ..." ;-)
Seminar-Downloads / VBA-Snippets (Anm.: temporär!) auf Onedrive-Laufwerk Trainer J. Brandes
(inkl. beispielhaften VBA-PDFs aus dem Netz und weiteren Beispiel-VBA-Arbeitsmappen)
Nach dem Seminar: siehe Download am Ende des Seminarbeitrags!
Hinweis auf Online-Resourcen und Tools ... für die weiteren Arbeiten mit Excel
Erstellung von Screenshots mit Windows 10 Bordmittel (Tastenkombi: Win + Druck; png-Dateien in Ordner Bilder\Bildschirmfotos, bzw. Pictures\Screenshots)
und Bildschirmlupe mit Win + "+" (bzw. Win + "-"; Lupe deaktivieren mit Win + ESC)
früher: Trainer-Tools (Bildschirmlupe "Virtual Magnifiying Glass" und Screenshots erstellen mit "Lightscreen") über Portal portableapps.com (Nachfrage aus Seminar)
Freies WikiBook: https://de.wikibooks.org/wiki/VBA_in_Excel (auch als PDF verfügbar)
Skripte des Herdt-Verlag über das RRZN Uni Hannover zum kleinen Preis:
Link: http://www.rrzn.uni-hannover.de/buecher.html
Buchempfehlung: "VBA mit Excel", Bernd Held, (aktueller Link zur 4. Auflage)
Rheinwerk Verlag, 1016 Seiten, 4., aktualisierte und erweiterte Auflage 2019, gebunden
Rheinwerk Computing, ISBN 978-3-8362-7398-5
Anm.: Beispiele lassen sich downloaden, im Bundle erhältlich: +5,- € Aufschlag für DRM-freie PDF/EPUB/MOBI!
Arbeitsmappen mit Makros
... eigener Dateityp: *.xlsm (bzw. *.xltm für Vorlagen)
Beim Öffnen muss außerdem noch die Sicherheitswarnung beachtet werden, die dann überhaupt erst die "Aktivierung" der aktiven Inhalte - sprich unsere Makros - ermöglicht. Ohne diese Aktivierung sind die Makros nicht nutzbar!
Version | Dateiformate |
Excel 97-2003 | xls - das klassische Excel-Sheet (Arbeitsmappen) xlt - die passenden Vorlagen (engl.: Templates) |
Excel 2007 / 2010 / ... | xlsx - XML basiertes Dokumentformat (ohne Makros) xltx - die passenden Vorlagen xlsm - XML basierte Mappen inkl. Makros xltm - die passenden Vorlagen inkl. Makros |
Arbeitsmappenvorlagen (*.xltm)
Sammeln von Inhalten, Funktionen oder auch Makros in einer Mappe und bereitstellen als Template
Über neue Mappe - Meine Vorlagen lassen sich dann die Mappen inkl. der aktiven Elemente nutzen
Arbeitsmappenvorlagen einfach mittels "Speichern unter..." und Dateityp *.xltx
in passenden Vorlagenordner des Office-Users speichern.
Vorlagen für Mappen mit Makros natürlich mit *.xltm
speichern!
Aktueller Standardordner: C:\Users\benutzername\Documents\Benutzerdefinierte Office-Vorlagen
Anm.: im Windows Explorer einfach deutschen Ordner "Dokumente" aufsuchen...
Die Vorlagen über Menüband Datei - Neu - Rubrik: Persönlich aufrufen/nutzen.
Speicherort für Vorlagen in Vorgänger-Windows/Office:..\AppData\Roaming\Microsoft\Templates
Tipp: Unterordner im Templates-Ordner des Office lassen Registerkarten für Meine Vorlagen entstehen!
PERSONAL.XLSB: Excel kennt auch "Persönliche Makro-Arbeitsmappen": ..\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB
(siehe also Benutzerprofil)
Einfache Erstellung der PERSONAL.XLSB: Makro erstellen mit "Makro speichern in: Persönliche Makroarbeitsmappe"
Danach lässt sich diese Technik über den VBA-Editor - Projektexplorer verwalten (Code hinzufügen/hinkopieren).
Makros
... Erste Gehversuche mit VBA-Techniken über Aufzeichnungen von Makros
An dieser Stelle sei auf die Seminare mit entsprechendem Schwerpunkt "Excel - Makros" verwiesen (also ohne weitere Vertiefungen in VBA).
Tastenkombinationen:
- ALT + F8 öffnet Makro-Dialogfenster
- ALT + F11 öffnet Visual-Basic-Editor
Erinnerung: Menüband Entwicklertools einblenden!
Makros - Sicherheit
Konfiguration über Excel-Optionen - Vertrauensstellungscenter - Einstellungen für Vertrauensstellungscenter
Hier: Einstellungen für Makros (möglichst unverändert lassen); Vertrauenswürdige Speicherorte
alternativ erreichbar über Schaltfläche "Makrosicherheit" im Menüband Entwicklertools
Bei Laufwerkspfaden im Netzwerk (UNC) muss extra ein Kontrollkästchen für diese Nutzung aktiviert werden
Tipp: bei den "Vertrauenswürdigen Speicherorten" finden Sie auch Ihre Verzeichnisse für Benutzer und Templates!
Und wieder: Speicherorte auf Netzwerkressourcen müssen noch extra erlaubt werden.
VBA-Editor nutzen
... siehe Alt + F11
Manuelles Einfügen von Sub Routinen (Makros) oder Function (neue eigene Funktionen; Beispiel: NettoMwst)
Wichtig: falls noch keine Struktur "Module" im Projekt-Explorer vorhanden ist, dann bitte mittels Einfügen - Module diese notwendige Struktur erstellen
Mit mehreren Modulen lassen sich die VBA-Codes sauber organisieren!
Manuelles (zeilenweise) Abarbeiten mit Funktionstaste F8
Mehrzeiliger Code mit " _" als Zeilenumbruch: {code lang:freebasic showtitle:false lines:true hidden:false}' Über mehrere Zeilen mit Leertaste _ (in MsgBox Konstante vbLf)
Sub MsgBoxMehrzeiligAnzeigen()
MsgBox "Heute ist der " & Date & vbLf & _
"Es ist jetzt genau: " & Time & vbLf & _
"Sie sind der Anwender: " & Environ("username"), _
vbOKOnly, "Meldung"
End Sub{/code}Tipp: bei Code mit Vorgestellten Optionen bitte jeweils ein einzelnes Modul nutzen (siehe: Option Explicit
)!
Debugging: bei Fehlern lässt sich im Editor der fragliche Quellcode begutachten und korrigieren.
Für eine weitere Excel/VBA-Nutzung muss man den Fehler beheben oder die Ausführung des Makros stoppen (Stopptaste im Editor).
Symbolleiste "Bearbeiten" einfügen lassen im VBA-Editor: Einzüge, Haltepunkte, Sub/Makro (F5), Kommentierungen
Einstellungen für Tab-Schrittweite (z.B. 2 statt 4 Leerzeichen) und automatische "Option Explicit" für neue Module
Codeeingaben gerne in Small und ohne Leerzeichen:{code lang:freebasic showtitle:false lines:false hidden:false}worksheets("Tabelle1").range("a1").value=100
' wird zu
Worksheets("Tabelle1").Range("a1").Value = 100 {/code}Aber: erstellten Code immer kontrollieren/checken!
Eigenschaften (F4)
Übung: Sichtbarkeiten von Tabellenblättern manipulieren
- -1 – xlSheetVisible : Die Tabelle ist sichtbar.
- 0 – xlSheetHidden : Die Tabelle ist ausgeblendet.
- 2 – xlSheetVeryHidden : Die Tabelle ist sicher ausgeblendet, das heißt, der normale Anwender kann diese Tabelle nicht mehr einblenden.
Siehe auch: ScrollArea
Eigene Funktionen mit VBA
Mit ein wenig function VBA-Code lassen sich eigenen Funktionen deklarieren, die man dann in Excel wie die eingebauten nutzen kann.{code lang:freebasic showtitle:false lines:true hidden:false}Public Function NettoMwst(Betrag, Optional SteuerSatz As Single = 0.19)
'Quelle: Helmut Pirklbauer
Dim Netto As Double
Netto = Betrag / (1 + SteuerSatz)
NettoMwst = Excel.Application.Round(Netto, 4)
End Function{/code}Hinweis: die functions müssen sich bis auf weiteres in den Modulen von Arbeitsmappen befinden (Anm.: also nicht in der personal.xlsb persönlichen Arbeitsmappe).
Workbook_Open()
Routinen direkt beim Laden einer Arbeitsmappe automatisch ausführen lassen:{code lang:freebasic showtitle:false lines:true hidden:false}Private Sub Workbook_Open()
'Dieses Ereignis wird beim Öffnen der Mappe ausgeführt
Tabelle1.Visible = xlSheetVeryHidden
'Die ScrollArea für Tabelle2 setzen
Tabelle2.ScrollArea = "A1:D10"
End Sub{/code}Wichtig: dieser Code gehört jetzt mal nicht in die Module, sondern sozusagen wortwörtlich in "Diese Arbeitsmappe".
Tabellen ansprechen
... die Tabellennamen mit unterschiedlicher Ansprache ...
Die Tabellenblattnamen lassen sich ändern in der Blattansicht und über das Eigenschaftenfenster;
z.B. Eintrag: Tabelle3(tbl_Daten) mit:
- Codename: Tabelle3
- Normaler Name: tbl_Daten
hier muss Objekt Worksheets nutzen
Empfehlung: Codename ; wegen besserer Code/Syntaxcompletion, sicherer, weniger Pflegeaufwand!
Varianten zum Ansprechen eines Tabellenblatts:{code lang:freebasic showtitle:false lines:true hidden:false}' Codename:
Tabelle3.Range("A1").Value = 100
' Vollqualifiziert mit Worksheets
Worksheets("tbl_Daten").Range("A4").Value = 10
' Vollqualifiziert mit Worksheets und Index
Worksheets(3).Range("A2").Value = 10
' teilweise qualifiziert - Objekt Sheets arbeitet auch mit Diagrammblättern
Sheets("tbl_Daten").Range("A5").Value = 10
' völlig ungenau/gefährlich
Range("A6").Value = 10{/code}Die Variante mit Index kann besonders unglücklich/gefährlich sein: geänderte Reihenfolge, ausgeblendete Tabellen und auch hier übrigens keine Code-Unterstützung (Dropdown) im Editor.
Conclusio/Empfehlung: Tabellenblätter genau planen und strukturieren!
Direktfenster (Strg + G)
beispielhafte Direktaufrufe:?Environ("username")
?Environ("computername")
Übung - Funktionsnamen im Englischen Original ermitteln:
Wie heißt die Funktion MITTELWERT() in Zelle A1??range("A1").Formula
=AVERAGE(D1:D8)
Tipp: Formel in Zelle eintragen: Tabelle3.Range("A1").Formula = "=AVERAGE(D1:D8)"
Hinweis: FormulaLocal hat dann die länderspezifische Benennung!
Berechnungen (automatisch / manuell)
Anm.: SAP-Excel-Exports sind oft manuell eingestellt! Aufrufe auch gerne auch im Direktfenster:Application.Calculation=xlCalculationManual
oder dann wieder:Application.Calculation=xlCalculationAutomatic
Debug Ausgaben
z.B. zur Laufzeitmessung:Debug.Print "Start: " & Now
....Debug.Print "Ende: " & Now
oder einfach manuell einen Wert / Variable ausgeben!
Objektorientierung
Excel-VBA-Objekte haben
- Eigenschaften (Property - 80%) und
- Methoden (Methods - 20%)
Übung/Test mit Objekt "Application"{code lang:freebasic showtitle:false lines:true hidden:false}Sub UnterschiedMethodeUndEigenschaft()
With tbl_Matrix.Range("A1:D10")
'Eigenschaft
.Borders(xlInsideHorizontal).ColorIndex = 4
'Methode
.BorderAround Weight:=xlThick, ColorIndex:=3
End With
End Sub{/code}Beachte: Zuweisungen mit "=" und ":="
Bitte auch an Code-Completion mit Strg + Leertaste denken und die automatischen Auswahllistenfelder nutzen.
Variablen
Deklarieren mit Dim
; Tipp: Sonderzeichen vermeiden
lowerCamelCase empfohlen: intBeispielVar (Prefix empfohlen; hier: int für Integer-Variable)
Am Anfang der Sub-Routinen die Variablen deklarieren (lokale Variablen).
Beispielhafte Prefixes für die Datentypen:
bool Boolean , byte Byte , cur Currency , dtm Date , dec Decimal , dbl Double , int Integer , lng Long , obj Object , sng Single , str String , var Variant , rng Range , wkb Workbook
Speziell: Typ Enum
Übersicht zu Variablentypen: (Beachten: VB weicht teils von VBA ab; z.B. decimal not supported, ...)
Beispielhafte Links:
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/data-type-summary
https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/data-types/
https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/dim-statement
https://www.vba-tutorial.de/variablen/datentypen.htm
Anm.: nur eine kleine Linkauswahl ohne Anspruch auf Vollständigkeit ;-)
Statische/Static Variablen
bleiben nach Laufzeitende erhalten!{code lang:freebasic showtitle:false lines:true hidden:false}Sub VariablenInhaltBleibtBestehen()
Static lngAufrufe As Long
lngAufrufe = lngAufrufe + 1
MsgBox "Makro wurde " & lngAufrufe & " Mal ausgeführt!"
End Sub{/code}Öffentliche/Public Variablen Public dtmStartzeit As Date
sind auch über Modulgrenzen hinweg nutzbar!
Private/Private Variablen Private strPasswort As String
sind nur in ihrem Modul verfügbar!
Konstanten
... sind schneller als Variablen!{code lang:freebasic showtitle:false lines:true hidden:false}Const strArbeitsmappe as String = "Mappe1.xls"
Const dteStartDatum As Date = #1/1/2015#
Const strFehlermeldung as String = "Fehler beim Druck!"
Const sngMWST as Single = 1.19{/code}Auch hier: möglichst Typ definieren.
Textdateien einlesen
Übungen zu unterschiedlichen Varianten{code lang:freebasic showtitle:false lines:false hidden:false}....
Open ConstTxtDatei For Input As #1
Do Until EOF(1)
Line Input #1, strText
Debug.Print strText
Loop
Close #1
....
Open ConstTxtDatei For Input As #1
VarDat = Input$(LOF(1), 1)
Debug.Print VarDat
Close #1{/code}Zweite Variante ist schneller, da man keine VBA-Schleife (Loop) nutzt.
Kontrollstrukturen
Verwzeigungen
Inklusive Übungen und Beispielen
- If ... End If bzw.
- If ... Then ... Else ... End If bzw.
- IIf( Bedingung, Then, Else)
- Select Case ... Case(s) ... End Select
Übungen / Beispiel-Codes für TN
Schleifen
- For ... To ... Next
- For Each ... Next
- With ... End With
- Do Until ... Loop
- Do While ... Loop
Übungen / Beispiel-Codes für TN
UserForms
Übung mit Herdt-Taschenrechner:
Einbau einer neuen Schaltfläche (CommandButton cmdMultiplikation) und Code für eine Multiplikationsfunktion des Taschenrechners
Für weitere vertiefende Beschäftigungen mit dem Thema "UserForms" hier eine beispielhafte Anleitung im Internet:
VBA Tutorials (Link Übung Eingabemasken mit Excel)
Nutzung von UserForms: hier wichtig, dass die aktiven Elemente / VBA-Codes den Elementen des Formulars zugeordnet werden.
Das eigentliche Formular wird durch eine einfache Schaltfläche im Arbeitsblatt per Klick aufgerufen!
Beispiele für Sub / Prozeduren: cmdMulti_Click()
oder txtZahl1_Exit()
also immer der Name eines Form-Steuerelements und ein angehängtes Ereignis!
TN-Bescheinigungen, Feedback-Bögen, Letzte Fragen
Screenshots zu den Seminartagen liegen - auf Anfrage - auch in den Original-Qualitäten (Full-HD 1920x1080 Pixel) vor.
Anm.: pro Seminartag durchschnittlich ca. 150 Screenshots als quasi-Diashow ;-)
Menüband Entwicklertools
VBA-Editor - Alt+F11
Inhalt aktivieren
pers. Makroarbeitsmappe
Codevervollständigungen
Hilfe mit F1
Bibliothek "Excel Makros / VBA"
Vielen Dank für Ihre sehr freundlichen und positiven Rückmeldungen für unser 1-Tages-Seminar zum Thema "Makros - VBA mit Excel".
Ihr Trainer Joe Brandes
P.S.: Ihre Anregungen für eine Vertiefung bzw. Verlängerung des Seminars werden mit Ihren Feedbacks an die Ostfalia weitergeleitet.