Beschreibung/Inhalt

Transcription

Beschreibung/Inhalt
Rechnungsformulare im Vergleich
Beispieldatei und Lerngrundlage zugleich
Häufig sieht man in der Praxis, dass sich die Arbeit in Excel viel zu schwer gemacht wird. So
werden alle Daten doppelt und dreifach eingegeben, Formulare werden ständig neu erstellt,
usw. Dem Abhilfe zu schaffen soll diese Beschreibung in Verbindung mit der zugehörigen
Exceldatei dienen.
Anhand dieser Datei soll gezeigt werden, wie ein Rechnungsformular in verschiedenen
Variationen erstellt und verarbeitet werden kann. Die Spannweite reicht dabei vom
umständlichen manuellen Ausfüllen über verschiedene Formellösungen bis hin zu einer
vollständigen Automatisierung per VBA.
Dadurch, dass alle Schritte der Erstellung von Formeln und der Erstellung des VBA-Codes
beschrieben sind, sind diese Beispiele auch Grundlage für die Erstellung anderer Formulare –
egal, ob Bestellverwaltung, Arbeitszeitverwaltung, oder ...
Die Excel-Beispieldatei erhalten Sie auf http://www.vba-beispiele.de/angebot.php?was=3507.
1. Inhalt
Rechnungsformulare .................................................................................................................. 1
1. Inhalt................................................................................................................................... 1
2. Ziele dieser Datei: .............................................................................................................. 2
3. Grundlagen:........................................................................................................................ 2
4. Inhalte................................................................................................................................. 2
5. Prinzip der Automatisierung der Rechnung in diesem Beispiel: ....................................... 3
6. Rechnung1 – ohne Automatisierung .................................................................................. 3
7. Rechnung2 - Formellösung ................................................................................................ 4
8. Rechnung3 – Formellösung ............................................................................................... 5
9. Rechnung4 - Formellösung ................................................................................................ 7
10.
Rechnung5 – Makrolösung ............................................................................................ 7
11.
Rechnung6 – Makrolösung ............................................................................................ 8
12.
Rechnung7 – Makrolösung .......................................................................................... 12
12.1 Schaltfläche erstellen................................................................................................ 12
12.2 Vorüberlegungen...................................................................................................... 13
12.2.1
Speichern.......................................................................................................... 13
12.2.2
Löschen der Inhalte .......................................................................................... 14
12.2.3
Rechnungsnummer eintragen........................................................................... 14
12.3 Der Code .................................................................................................................. 15
12.4 Zusammenfassung.................................................................................................... 15
2. Ziele dieser Datei:
Darstellung der Erstellung von verschiedenen Varianten eines Formulars am Beispiel
einer Rechnung
Erläuterung der einzelnen Schritte
Darstellung von Zusammenhängen
Darstellung von Vor- und Nachteilen der verschiedenen Varianten
Demonstration der verschiedenen Varianten am Beispiel, damit man sich je nach
Einsatzzweck für eine Variante entscheiden kann
Erläuterung der eingesetzten Mittel
Lerngrundlage
Einsatz jeder Variante in der Praxis nach kleinen Anpassungen möglich
3. Grundlagen:
Grundlage der Arbeit sind diese Tabellen innerhalb dieser Datei:
Formular
In diesem sind die grundlegenden Formatierungen und die gleichbleibenden Inhalte
enthalten.
DB-Lebensmittel
Hier sind die Artikel, die in die Rechung eingetragen werden sollen, aufgelistet.
Wichtig ist hierbei, dass jeder Datensatz mit einer eindeutigen Nummer versehen ist,
der ID (Identifikationsnummer). Dies sollte generell der Fall sein, wenn Daten
gesammelt werden – egal, welche. Jede ID darf dabei nur einmal vergeben sein.
Dabei spielt es auch keine Rolle, ob die IDs fortlaufend sind oder einmal eine fehlen
sollte. Wichtig ist die Eindeutigkeit.
DB-Kunden
Diese Liste wird bei den fortgeschrittenen Versionen verwendet und hat die gleichen
Merkmale wie die DB-Lebensmittel. Also spielt auch hier die Eindeutigkeit der
Nummern (IDs) die größte Rolle.
DB-Rechnung*
Auf diesem Blatt werden bei bestimmten Rechnungsversionen die Rechnungen
automatisch gespeichert.
Rechung*
In diesen Blättern wird die Arbeit mit den vorgestellten Möglichkeiten demonstriert.
4. Inhalte
1. Rechnung1
Leeres, formatiertes Formular. Alle Angaben müssen manuell eingetragen werden.
2. Rechnung2
Leeres Formular, in dem durch Formeln die Preise automatisch berechnet werden.
3. Rechnung3
Formular, in dem durch Formeln alle Angaben zu den Artikeln automatisch
eingetragen und die Preise berechnet werden.
4. Rechnung4
Formular, in dem durch Formeln Kundenangaben, Angaben zu den Artikeln und
Preise automatisch eingetragen werden.
5. Rechnung5
Formular, in dem durch VBA (Makros) durch Ereignisprozeduren die Preise und das
Datum automatisch eingetragen werden.
6. Rechnung6
Formular, in dem durch VBA zusätzlich die Kunden- und Artikelangaben
automatisch eingetragen werden.
7. Rechnung7
Formular, in dem alles automatisch eingetragen wird, also auch die
Rechnungsnummer. Zusätzlich wird jede Rechnung als eigene Datei gespeichert und
alle Rechnungen u. a. mit Bruttopreisen in einer Tabelle.
5. Prinzip der Automatisierung der Rechnung in diesem
Beispiel:
Bei der Rechnung soll es darum gehen, dass diese ausgefüllt werden soll, wenn ein Kunde
etwas kauft. Dabei werden die Artikel eingetragen, bis hin zum Bruttopreis, also dem Preis,
den der Kunde zahlen muss. Die Preise der einzelnen Artikel stellen in diesem Fall
Nettopreise dar, also ohne Mehrwertsteuer. Diese wird erst am Ende der Rechnung
aufgeschlagen. Rabatte und Skonti werden in diesem Beispiel vernachlässigt. Wurde diese
Datei verstanden, sollte es aber kein Problem darstellen, diese Funktionen selbstständig
einzubauen.
Zum Schluss der Erstellung der Rechnung kann diese gedruckt werden. Danach sollte wieder
das leere Rechnungsformular zur Verfügung stehen – und der nächste Kunde kann kommen.
Zu beachten sind jedoch auch rechtliche Grundlagen:
Die Rechnung muss ein Datum aufweisen, das sich bei einem späteren Aufruf der
Rechnung nicht ändern darf. Die Formel =HEUTE() ist daher verboten.
Die Rechnung muss eine fortlaufende Nummer haben.
Es muss die Steuernummer bzw. die Umsatzsteuer-ID enthalten sein.
6. Rechnung1 – ohne Automatisierung
In dieser Rechnung sind keinerlei Automatismen enthalten. Alle Einträge müssen selbst
eingegeben werden. Dies ist für einen Excel-Anfänger am leichtesten, jedoch auch am
umständlichsten.
Die Schritte sind dabei sehr umfangreich:
1. Eintragen des Rechnungsdatums
2. Eintragen der Rechnungsnummer, die fortlaufend sein muss. Es muss also die
Nummer der vorherigen Rechnung bekannt sein.
3. Eintragen der Anschrift des Kunden
4. Eintragen der Nummer des Artikels
5. Eintragen der Anzahl des gekauften Artikels
6. Eintragen des Artikelnamens
7. Eintragen des Liefermaßes
8. Eintragen der Einheit
9. Eintragen der Liefereinheit
10. Eintragen des Einzelpreises des Artikels
11. Ausrechnen und Eintragen des einzelnen Gesamtpreises
12. Ausrechnen und Eintragen der Nettosumme
13. Ausrechnen und Eintragen der Mehrwertsteuer
14. Ausrechnen und Eintragen des Bruttopreises
15. Ausdrucken der Rechnung
16. Speichern der Rechnung oder Ablage für die eigene Buchführung
17. Löschen der eingegebenen Daten oder erneuter Aufruf des leeren Formulars
Es sind also pro Kunden 17 Schritte durchzuführen, wobei sich die Schritte 4 bis 11 pro
gekauftem Artikel wiederholen – es bleibt also in den seltensten Fällen bei diesen 16
Schritten.
Neben dem Aufwand kommen noch Nachteile hinzu:
Das Ablagesystem für die eigene Buchführung muss eingerichtet und konsequent
eingehalten werden.
Es können Tippfehler passieren.
Man kann sich verrechnen.
7. Rechnung2 - Formellösung
In dieser Rechnung sind bereits einfache Formeln enthalten, die einen kleinen Teil der Arbeit
abnehmen. Und zwar handelt es sich um folgende Formeln:
Formeln zur Berechnung der einzelnen Nettopreise.
Dabei wird einfach die Anzahl des gekauften Artikels
mit dem Einzelpreis multipliziert.
Berechnung der Nettosumme, indem die Funktion
SUMME() verwendet wird.
Berechnung der Mehrwertsteuer, indem die
Nettsumme mit der Zelle, in der die Mehrwertsteuer
in Prozent enthalten ist, multipliziert wird.
Berechnung
des
Bruttopreises,
indem
die
Nettosumme und die Mehrwertsteuer addiert werden.
Die Bereiche mit den Formeln sind gelb gekennzeichnet, die
Bereiche, die manuell eingetragen werden müssen, grau.
Bei dieser Variante der Rechnung müssen folgende Schritte ausgeführt werden:
1. Eintragen des Rechnungsdatums
2. Eintragen der Rechnungsnummer, die fortlaufend sein muss. Es muss also die
Nummer der vorherigen Rechnung bekannt sein.
3. Eintragen der Anschrift des Kunden
4. Eintragen der Nummer des Artikels
5. Eintragen der Anzahl des gekauften Artikels
6. Eintragen des Artikelnamens
7. Eintragen des Liefermaßes
8. Eintragen der Einheit
9. Eintragen der Liefereinheit
10. Eintragen des Einzelpreises des Artikels
11. Ausdrucken der Rechnung
12. Speichern der Rechnung oder Ablage für die eigene Buchführung
13. Löschen der eingegebenen Daten oder erneuter Aufruf des leeren Formulars
Wir sehen, dass hier nur noch 13 Schritte erforderlich sind, abgesehen davon, dass auch hier
die Schritte 4 bis 10 für jeden gekauften Artikel wiederholt werden müssen. Aber es stellt
bereits eine kleine Arbeitserleichterung dar.
Vorteile:
Man muss weniger Schritte ausführen.
Man kann sich nicht verrechnen, da die Berechnung durch Formeln erfolgt.
Jedoch hat auch diese Version noch Nachteile bzw. Risiken:
Das Ablagesystem für die eigene Buchführung muss eingerichtet und konsequent
eingehalten werden.
Es können Tippfehler passieren.
Formeln können versehentlich gelöscht werden, so dass die Berechnungen nicht mehr
zuverlässig funktionieren.
8. Rechnung3 – Formellösung
Bei dieser Rechnung gehen wir einen Schritt weiter: Es sollen innerhalb des Formulars nur
noch Nummer und Anzahl der gekauften Artikel eingetragen werden, der Rest soll
automatisch zu den Artikeln ausgefüllt werden. Dazu verwenden wir die Funktion
SVERWEIS, die in den Spalten Artikel, Liefermaß, Einheit, Liefereinheit und Einzelpreis
zum Einsatz kommt.
Die Daten, die in die Rechnung eingelesen werden sollen, befinden sich ja in der Tabelle DBLebensmittel. Nun sorgen wir dafür, dass aufgrund der eingegebenen Nummer die Daten aus
dieser Tabelle in die Rechnung eingelesen werden.
Die Artikelnummern werden in der Rechung in Spalte A eingegeben, beginnend ab Zeile 15.
Die erste Zelle, in die die Nummer eines gekauften Artikels eingegeben werden soll, wäre
demzufolge die Zelle A15.
Wir beginnen also die erste Formel mit der Funktion SVERWEIS in der Zelle, in der der erste
Artikelname erscheinen soll, also in Zelle C15. Dabei prüfen wir zuerst, ob in dieser Zeile
eine Artikelnummer eingegeben wurde, um eventuelle Fehlermeldungen zu unterdrücken:
=WENN(A15="";"";
Das heißt: Wenn in A15 nichts eingetragen wurde, soll auch nichts erscheinen.
Nun setzen wir die Formel für den Fall fort, dass eine Artikelnummer eingetragen wurde,
denn dann soll ja der Artikelname erscheinen, der in der DB-Lebensmittel dieser Nummer
zugeordnet ist. Die Fortsetzung der Formel wäre dann nach dem Semikolon:
SVERWEIS(A15;'DB-Lebensmittel'!$A$1:$G$200;2))
Dies bedeutet:
Sieh nach, welche Nummer in A15 eingetragen ist.
Suche in der Tabelle DB-Lebensmittel in der ersten Spalte des Bereiches A1 bis G200
nach dieser Nummer.
Liefere aus diesem Bereich den Namen, der in der 2. Spalte steht.
Die vollständige Formel in C15 wäre also:
=WENN(A15="";"";SVERWEIS(A15;'DB-Lebensmittel'!$A$1:$G$200;2))
Wenn wir jetzt in A15 eine Artikelnummer eintragen, müsste bereits der zugehörige
Artikelname erscheinen.
Genau diese Formel kann nun in die anderen Spalten eingetragen werden, also in D15 bis
G15, mit dem kleinen Unterschied, dass in der Funktion SVERWEIS die 2 geändert werden
muss – schließlich stehen in der DB-Lebensmittel die anderen Angaben nicht in der 2. Spalte,
sondern in der 3. bis 6. Spalte. So müsste in der Rechnung in der Spalte Einzelpreis diese
Formel stehen, da sich der Einzelpreis in der Lebensmittelliste ja in Spalte 6 befindet:
=WENN(A15="";"";SVERWEIS(A15;'DB-Lebensmittel'!$A$1:$G$200;6))
Diese Formeln aus der Zeile 15 der Spalten C bis G können wir nun einfach nach unten
kopieren, bis in die letzte Zeile, in die ein Artikel eingegeben werden kann. Im Beispiel wäre
das der Bereich C31 bis G31.
Nun können wir in alle vorgesehenen Zellen eine Artikelnummer eingeben und es müsste in
jedem Fall jede Angabe zu dem eingetragenen Artikel erscheinen.
Aber: Was ist denn nun mit den Preisen? Dort
erscheint die Fehlermeldung #Wert!, wo kein
Artikel eingetragen wurde.
Der Grund ist, dass sich in den Zellen für den
Einzelpreis ja nun die Formel mit dem SVERWEIS
befindet, der als Ergebnis ““ ergibt, also nichts.
Dieses „nichts“ ist für Excel keine Zahl, sondern
ein (leerer) Text, mit dem natürlich nicht gerechnet
werden kann. Die Formel bei den Gesamtpreisen
(Anzahl * Einzelpreis) soll also mit „nichts“
rechnen, was aber nicht geht, wodurch diese
Fehlermeldung erscheint. Also müssen wir die
Formel bei den Gesamtpreisen auch ändern, indem
sie nichts berechnen soll, wenn keine Anzahl
eingetragen wurde:
=WENN(B15="";"";B15*G15)
Das heißt: Wenn in B15 (Anzahl) nichts steht, soll nichts erscheinen,. sonst Anzahl mal
Einzelpreis.
Kopieren wir diese Formel nach unten, sollten die Fehlermeldungen
verschwunden sein und die Preise richtig berechnet werden. Auch hier
sind nun wieder die Bereiche mit den Formeln gelb dargestellt; die
Bereiche, die manuell ausgefüllt werden müssen, grau:
Bei dieser Rechnungsversion müssen nun noch folgende Schritte
ausgeführt werden, wenn die Rechnung ausgefüllt werden soll:
1. Eintragen des Rechnungsdatums
2. Eintragen der Rechnungsnummer, die fortlaufend sein muss. Es muss also die
Nummer der vorherigen Rechnung bekannt sein.
3. Eintragen der Anschrift des Kunden
4. Eintragen der Nummer des Artikels
5. Eintragen der Anzahl des gekauften Artikels
6. Ausdrucken der Rechnung
7. Speichern der Rechnung oder Ablage für die eigene Buchführung
8. Löschen der eingegebenen Daten oder erneuter Aufruf des leeren Formulars
Nun sind also nur noch 8 Schritte erforderlich, wobei das Ausfüllen der Artikelnummern und
der Anzahlen natürlich nicht automatisiert werden können – Excel kann ja nicht wissen, was
und wie viel der Kunde kauft.
Vorteile:
Man muss noch weniger Schritte ausführen.
Man kann sich nicht verrechnen, da die Berechnung durch Formeln erfolgt.
Jedoch hat auch diese Version noch Nachteile bzw. Risiken:
Das Ablagesystem für die eigene Buchführung muss eingerichtet und konsequent
eingehalten werden.
Es können immer noch Tippfehler passieren.
Formeln können versehentlich gelöscht werden, so dass die Berechnungen nicht mehr
zuverlässig funktionieren.
9. Rechnung4 - Formellösung
Bei der vorherigen Version wurde ja bereits weitestgehend automatisiert; nun stößt man mit
Formellösungen auch fast an Grenzen.
Was man aber noch automatisieren könnte, ist das Ausfüllen der
Anschrift des Kunden. Hierbei wäre das Vorgehen ähnlich dem
Ausfüllen des Artikelnamens: Man verwendet eine Zelle zur
Eingabe der Kundennummer und mit der Funktion SVERWEIS
lässt man die entsprechenden Daten aus der Kundentabelle
einlesen. Nun braucht man noch weniger einzugeben, wie man
am Beispiel mit den gelben und grauen Bereichen sieht:
Die Vor- und Nachteile der bisherigen Rechnungsversionen
bleiben weitestgehend erhalten. Natürlich sind die Formeln in der
Beispieldatei eingetragen, so dass diese nachvollzogen werden
können.
10. Rechnung5 – Makrolösung
Bei den folgenden Rechnungen kommen keine Formeln zum Einsatz, es wird alles per VBA
eingetragen.
In diesem ersten Beispiel zur Makrolösung soll gezeigt
werden, wie man die Rechnung2 per VBA ausfüllen
lassen kann.
Grundlage dieser Lösung ist, dass man mit
Ereignisprozeduren arbeitet. Das heißt: Die Arbeit findet
in dieser Datei auf dem Blatt „Rechnung5“ statt, deshalb
klickt man im VBA-Editor (Alt + F11) doppelt auf dieses
Blatt. Dadurch hat man eine leere Arbeitsfläche oder im
Falle dieser Beispieldatei bereits den vorhandenen Code.
Dieser Code befindet sich unter der Überschrift
Private Sub Worksheet_Change(ByVal Target As Range)
Dadurch, dass der Code diese Überschrift (Change) hat, wird er bei jeder Änderung auf
diesem Tabellenblatt ausgeführt, egal, ob man auf dem Blatt etwas eingibt oder löscht. Das
heißt wiederum, dass die Berechnungen sofort stattfinden, wenn man eine Eingabe vornimmt.
Auf den Code selbst soll hier nicht eingegangen werden; dieser ist im Modul des Blattes
kommentiert (beschrieben).
Bei dieser Variante sind folgende Schritte erforderlich:
1. Eintragen der Rechnungsnummer, die fortlaufend sein muss. Es muss also die
Nummer der vorherigen Rechnung bekannt sein.
2. Eintragen der Anschrift des Kunden
3. Eintragen der Nummer des Artikels
4. Eintragen der Anzahl des gekauften Artikels
5. Eintragen des Artikelnamens
6. Eintragen des Liefermaßes
7. Eintragen der Einheit
8. Eintragen der Liefereinheit
9. Eintragen des Einzelpreises des Artikels
10. Ausdrucken der Rechnung
11. Speichern der Rechnung oder Ablage für die eigene Buchführung
12. Löschen der eingegebenen Daten oder erneuter
Aufruf des leeren Formulars
11. Rechnung6 – Makrolösung
Dieses Beispiel entspricht den Formelbeispielen der
Rechnungen 3 und 4. Es arbeitet auch wie die
vorherige Rechnung auf der Grundlage von
Ereignisprozeduren. Das heißt, die Angaben werden
automatisch eingetragen, sobald eine Artikelnummer,
eine Anzahl oder eine Kundennummer eingetragen wird.
Zu den Preisen und den zugehörigen Variablen erfolgt im Code keine Erläuterung, da dieses
Vorgehen exakt dem der vorherigen Rechnung entspricht. Ansonsten sind alle erforderlichen
Erläuterungen im Code selbst als Kommentare enthalten.
Die hier vorgestellte Lösung ist eine Variante von unzähligen möglichen Varianten, es ist also
nicht die einzige Lösung. Bei allen Möglichkeiten steht aber eins im Vordergrund: Die
Überlegung, was wie geschehen soll. Hier wurde so vorgegangen:
1.
Abfrage, ob mehrere Zellen markiert
sind oder nur eine Zelle aktiviert ist.
Dies spielt deshalb eine Rolle, weil man
zum Erstellen einer leeren Rechnung
normalerweise jeden einzelnen Posten
einzeln löschen muss. So fragen wir ab, ob mehrere Zellen markiert sind und wenn ja,
prüfen wir jede einzelne Zelle in der Markierung. Befindet sich die jeweilige Zelle im
Bereich der Artikelnummern, werden alle Angaben zur gerade geprüften Zelle gelöscht,
also alle Angaben zum Artikel. Somit ist es möglich, die zu löschenden Artikel in Spalte
A (Artikelnummer) zu markieren und mit einem Druck auf die Entf-Taste alle Artikel zu
löschen. Dadurch hat man schnell eine leere Rechnung für den nächsten Kunden.
Man könnte hier noch weitere Prüfungen einzubauen, was aber im konkreten Beispiel
überflüssig ist. Grund: Beim Erstellen einer Rechnung ist es in keinem weiteren Fall
erforderlich, mehrere Zellen zu markieren.
Nun kommen wir zu den Fällen, in denen nur eine Zelle aktiviert ist:
1.1. Zuerst fragen wir ab, ob die
Eingabezelle C8 ist, also ob in der
Zelle für die Kundennummer eine
Eingabe vorgenommen wurde. Wenn
ja, passieren folgende Schritte:
1.1.1. Ist die Zelle C8 leer? Dies passiert, wenn die Kundennummer gelöscht wurde.
Wenn ja, werden alle Kundenangaben gelö scht. In diesem Fall kann man z. B.
Angaben zum Kunden manuell eingeben, wenn dieser vielleicht nicht in der
Datenbank enthalten sein soll.
1.1.2. Ist die Zelle C8 nicht leer? Wurde also eine Kundennummer eingegeben?
Wenn ja, sollen ja die Angaben aus der Kundentabelle eingelesen werden.
Dazu wird die eben eingegebene Kundennummer in der Kundentabelle in
Spalte 1, also A, gesucht. Nun gibt es zwei Möglichkeiten:
1.1.2.1. Die Kundennummer wurde nicht in der Kundentabelle gefunden. In
diesem Fall erscheint eine Meldung und die Kundenangaben werden in
der Rechnung gelöscht.
1.1.2.2. Die Kundennummer wurde in der Kundentabelle gefunden und die Daten
werden aus der entsprechenden Zeile in die Rechnung eingelesen.
1.2. Nun geht es mit den
Artikeln weiter. Hier
ist ja der Hintergrund,
dass nur die Nummer
des gekauften Artikels sowie die Anzahl eingetragen werden. Also prüfen wir, ob die
Eingabe im entsprechenden Bereich der Artikelnummern erfolgte. Wenn ja:
1.2.1. Ist die Zelle mit der Artikelnummer leer? Das kann sein, wenn eine
Artikelnummer gelöscht wurde. In diesem Fall sollen auch die zugehörigen
Angaben zur gelöschten Artikelnummer gelöscht werden.
1.2.2. Es
wurde
eine
Nummer
eingegeben. Diese Nummer wird
nun in der ersten Spalte der
Artikeltabelle gesucht. Nun gibt
es zwei weitere Möglichkeiten:
1.2.2.1. Die Nummer wurde in der
Artikeltabelle
nicht
gefunden, wie es zum
Beispiel bei einem Tippfehler der Fall sein kann. Deshalb gibt es eine
Meldung und eventuell in der Rechnung eingetragene Artikelangaben
werden gelöscht.
1.2.2.2. Die Nummer wurde in der Artikeltabelle gefunden und aus der Zeile
werden die restlichen Angaben in die entsprechende Zeile der Rechnung
eingelesen.
1.2.3. Da wir es uns so bequem wie möglich machen möchten, wird nun in Spalte B
die Zelle neben der eingetragenen Artikelnummer aktiviert. Grund:
Normalerweise gibt man etwas ein und per Enter wird eine Zeile nach unten
aktiviert. Nun sparen wir uns den Schritt, zur Artikelnummer erst die
zugehörige Zelle für die Anzahl auszuwählen.
1.3. Ist die Zelle, in die wir etwas eingegeben haben, aber weder C8 noch eine
Artikelnummer, kann es sich auch um eine Anzahl handeln. In diesem Fall ist es
natürlich arbeitserleichternd, wenn nach der Eingabe der Anzahl gleich die nächste
freie Zelle für eine Artikelnummer aktiviert wird. Somit sind beim Eintragen der
gekauften Artikel nur zwei Schritte erforderlich:
-
Nummer eingeben, Enter
- Anzahl eingeben, Enter.
2. Nun sind die Überlegungen für die Kundenangaben und die Artikel fertig; es bleiben noch
die Preise. Da diese immer berechnet werden sollen, schreiben wir den Code nicht in den
Punkt 1, sondern separat, so dass er immer ausgeführt wird. Das heißt also, dass die
folgenden Schritte immer, egal, wo was wie eingegeben oder gelöscht wurde, abgearbeitet
werden müssen. Wird also ein Bereich mit Artikelnummern gelöscht, werden die Schritte
auch ausgeführt und die Preise damit berechnet.
Der Code entspricht dem aus der Rechnung5, so dass im Code selbst an dieser Stelle keine
Erläuterungen vorhanden sind.
Am Anfang des Codes wird eine Variable auf 0 gesetzt, die dann zum
Addieren der einzelnen Gesamtpreise verwendet wird.
Anschließend lassen wir eine Schleife über die Zeilen 15 bis 31 laufen
und in jeder Zeile prüfen, ob in Spalte B und in Spalte G eine Zahl
steht. Nun gibt es zwei Möglichkeiten:
2.1. Es sind Zahlen eingetragen. In diesem Fall wird Anzahl mal
Einzelpreis ausgerechnet und in der Zeile als Gesamtpreis
eingetragen. Dieser Preis wird auf den Wert der Variablen addiert
(die ja bei der ersten Zeile 0 ist) und als neuer Wert an die Variable
übergeben.
2.2. Es sind nicht zwei Zahlen eingetragen. In diesem Fall kann
natürlich keine Berechnung Anzahl mal Einzelpreis vorgenommen
werden und ein eventuell beim Artikel eingetragener Gesamtpreis
wird gelöscht.
Wenn alle Zeilen der Artikel abgearbeitet sind, wird der Gesamtpreis
(Netto) eingetragen, der ja in der Variablen steckt. Anschließend
erfolgen noch das Eintragen der Mehrwertsteuer und des
Bruttopreises.
3. Zum Schluss wird noch das aktuelle Datum eingetragen.
Bei dieser Variante sind folgende Schritte erforderlich:
1. Eintragen der Rechnungsnummer, die fortlaufend sein muss. Es muss also die
Nummer der vorherigen Rechnung bekannt sein.
2. Eintragen der Kundennummer
3. Eintragen der Nummer des Artikels
4. Eintragen der Anzahl des gekauften Artikels
5. Ausdrucken der Rechnung
6. Speichern der Rechnung oder Ablage für die eigene Buchführung
7. Löschen der eingegebenen Daten oder erneuter Aufruf des leeren Formulars
Nun sind also nur noch 7 Schritte erforderlich, wobei das Ausfüllen der Artikelnummern und
der Anzahlen natürlich auch hier nicht automatisiert werden können – Excel kann ja nicht
wissen, was und wie viel der Kunde kauft.
Vorteile:
Man muss noch weniger Schritte ausführen.
Man kann sich nicht verrechnen, da die Berechnung durch VBA erfolgt.
Man kann Formeln nicht versehentlich löschen, da die Inhalte durch VBA immer von
außen eingetragen werden.
Auch das Rechnungsdatum kann automatisch eingetragen werden, da es nach dem
Eintrag statisch erhalten bleibt (wichtig für die Buchführung).
Tippfehler können zwar immer noch passieren, diese sind aber auf ein Minimum
beschränkt, da in den meisten Fällen eine Warnung erscheint.
Jedoch hat auch diese Version noch Nachteile, z. B.:
Das Ablagesystem für die eigene Buchführung muss eingerichtet und konsequent
eingehalten werden.
Es ist festzustellen, dass diese Version die Arbeit bereits weitestgehend automatisiert; jedoch
muss man Schritte, wie z. B. das Eintragen der Rechnungsnummer und das Speichern selbst
erledigen.
12. Rechnung7 – Makrolösung
Grundlage dieser Rechnung ist die Rechnung6. Das heißt, die Eintragungen sollen –
abgesehen von Artikelnummer und Anzahl – weitestgehend automatisch erfolgen. Darüber
hinaus sollen folgende Zielstellungen verwirklicht werden:
Jede Rechnung soll „per Knopfdruck“ automatisch gespeichert werden.
Gleichzeitig soll die Rechnungsnummer automatisch um 1 hochgezählt werden, so
dass diese nicht mehr manuell eingetragen werden muss.
Beim Erstellen einer neuen Rechnung (also für den nächsten Kunden) sollen die
Angaben der alten Rechnung automatisch gelöscht werden.
Das Prinzip der Rechnung6 bleibt erhalten, also auch der Code. Deshalb wird darauf hier
nicht eingegangen; auch die umfangreichen Kommentierungen im Code sind nicht mehr
vorhanden. Ausführlich eingegangen wird aber auf die Umsetzung der genannten
Zielstellungen.
12.1 Schaltfläche erstellen
Die genannten Zielstellungen sollen ja „per Knopfdruck“, also beim
Ausführen einer Aktion erfolgen. Dafür gibt es verschiedene
Möglichkeiten;: man könnte zum Beispiel den bereits vorhandenen Code so
ergänzen, dass die Zielstellungen verwirklicht werden, wenn man in eine
bestimmte Zelle einen bestimmten Wert eingibt. Dies ist jedoch
umständlich und außerdem auch nicht benutzerfreundlich, da man wissen
muss, in welche Zelle man etwas eingeben muss. Wenn man es selbst
immer ausführt, ist es sicher kein Problem – aber was passiert, wenn
aufgrund eines Krankheitsfalles schnell eine Vertretung einspringen muss?
Wir entscheiden uns deshalb für eine Schaltfläche, die entsprechend
beschriftet ist.
Für diese Schaltfläche blenden wir zuerst eine Tabellenblatt-Symbolleiste ein, die
die dafür erforderlichen Elemente enthält: die Steuerelement-Toolbox. Diese neue
Symbolleiste kann nun irgendwo im Fenster sein, enthalten muss sie aber die in
der rechten Abbildung dargestellten Elemente.
Wir klicken das Symbol für eine Schaltfläche an (siehe
Abbildung). dadurch ändert sich der Mauszeiger zu einem
kleinen schwarzen Kreuz und es erscheint ein neues Symbol mit
einem Zeichendreieck (Entwurfsmodus beenden). Dieses
Symbol benötigen wir jetzt noch nicht. sondern wir klicken es an, wenn die Schaltfläche fertig
ist.
Mit dem Mauszeiger ziehen wir nun einen Rahmen an die Stelle, an der
die Schaltfläche erscheinen soll. Nach dem Loslassen der Maustaste haben wir
bereits die Schaltfläche mit einer neutralen Beschriftung, die wir natürlich noch
ändern.
Nach dem Erstellen der Schaltfläche klicken wir doppelt darauf. Wichtig ist, dass am
Mauszeiger dabei vier Pfeile sind. Nach dem Doppelklick
wurde automatisch der VBA-Editor aufgerufen und wir
sehen bereits zwei Zeilen Code:
Zwischen diese beiden Zeilen werden wir später unsere Anweisungen
schreiben.
Zunächst wenden wir uns aber der Beschriftung der Schaltfläche zu.
Ebenfalls im VBA-Editor müssten wir nun auf der linken Seite unten
die Eigenschaften der Schaltfläche sehen. Sollte dieses
Eigenschaftenfenster nicht vorhanden sein, kann man es über das
Menü Ansicht oder mit F4 einblenden.
Die Beschriftung der Schaltfläche ändern wir, indem wir den Eintrag
hinter „Caption“ löschen und dafür unseren Text eingeben, z. B.
„Neue Rechnung“ (ohne Anführungszeichen), und dies mit Enter
bestätigen. Soll die Schaltfläche auch mit der Tastenkombination Alt und unterstrichener
Buchstabe betätigt werden können, schreibt man in das Feld hinter „Accelerator“ den
Buchstaben, der unterstrichen sein soll. Hierbei muss man allerdings aufpassen, dass man
keinen Buchstaben verwendet, der bei einem Menü unterstrichen ist. Das „n“ ist z. B. in der
deutschen Version beim Menü „Daten“ unterstrichen – würden wir es auch verwenden,
könnten wir das Menü „Daten“ nicht mehr mit diesem Buchstaben aufrufen.
Nun können wir wieder zu Excel wechseln und den Entwurfsmodus mit einem Klick auf das
Zeichendreieck beenden. Wenn wir jetzt die
-Schaltfläche anklicken sehen wir,
dass sie sich anklicken lässt. Natürlich passiert noch nichts – wir haben ja noch nichts
programmiert. Bevor wir dazu kommen, sind jedoch ein paar Vorüberlegungen erforderlich:
12.2 Vorüberlegungen
Noch mal: Was soll beim Klick auf die Schaltfläche passieren? Ziel ist ja, dass die aktuelle
Rechnung mit dem Bruttobetrag und anderen Angaben gespeichert wird, die Inhalte gelöscht
und die neue Rechnungsnummer eingetragen werden.
12.2.1 Speichern
Zum Speichern müssen wir natürlich als erste Vorüberlegung den Speicherort und die
Datenstruktur festlegen. Damit gelangen wir in den Bereich der Datenbanken, denn hier
gelten bereits einige Grundsätze. Die erste Frage ist, wohin die Daten gespeichert werden
sollen.
Wir entscheiden uns hier für ein Tabellenblatt in der Datei – wenn es auch nicht die
günstigste Methode ist. Besser ist, dafür eigene Dateien zu verwenden, damit das eigentliche
Programm und die Daten getrennt sind. Auf der Grundlage des hier Gezeigten kann eine
spätere Erweiterung aber noch erfolgen – hier soll es nur um das Prinzip gehen.
Das Tabellenblatt soll bzw. muss einen festgelegten Namen haben, denn darauf wird in der
Folge immer zugegriffen – beim Speichern, aber auch beim Auslesen der
Rechnungsnummern, um die nächste Rechnungsnummer bestimmen zu können.
Weiterhin muss man sich darüber Gedanken machen, was mit den Daten geschehen soll. In
einem Tabellenblatt lassen sich nur begrenzt Daten speichern, also sollten die Daten in
regelmäßigen Abständen (täglich, wöchentlich, monatlich?) ausgelagert und in der Tabelle
gelöscht werden. Hierzu könnte man sich ein eigenes kleines Programm erstellen, das diese
Arbeit übernimmt und das Tabellenblatt z. B. als csv-Datei unter einem bestimmten Namen
speichert. Dadurch hat man auch die Möglichkeit, die Rechnungen durch andere Programme
importieren zu lassen, z. B. in Datenbanksysteme wie MySQL.
Sehr wichtig ist die Datenstruktur. Diese muss so angelegt sein, dass spätere Änderungen
nicht mehr erfolgen müssen – jede Änderung der Datenstruktur hat eine Änderung bzw.
Anpassung des Programmcodes zur Folge. Wir werden die Spalten wie folgt aufteilen:
1. Rechnungsnummer
2. Datum
3. Kundennummer
4. Netto
5. MwSt.
6. Brutto
Die Spaltenbeschriftungen werden dabei in der Rechnungsübersicht nicht gespeichert. Der
Hintergrund ist auch hier wieder die Trennung von Daten und anderen Möglichkeiten. So
kann zur Auswertung der gespeicherten Rechnungen entweder ein weiteres kleines Programm
erstellt oder eine Ausgabemaske geschaffen werden.
Äußerst wichtig für die Datenstruktur ist, dass jeder Datensatz eine eindeutige Nummer hat,
in Datenbanksystemen auch ID genannt. Deshalb muss sichergestellt werden, dass jede
gespeicherte Rechnung anhand der Nummer zu identifizieren ist. Zur Not muss vor dem
Speichern die zu speichernde Rechnung eine neue Nummer bekommen.
12.2.2 Löschen der Inhalte
Das Löschen der Inhalte der aktuellen Rechnung sollte natürlich nur dann erfolgen, wenn man
sich ganz sicher ist, dass es keine Änderungen mehr gibt. Dazu könnte man folgende
Mechanismen einbauen (auch mehrere gleichzeitig möglich):
Frage, ob gedruckt werden soll.
Automatisches Drucken der Rechnung.
Frage, ob die aktuelle Rechnung gespeichert werden soll.
Speichern der aktuellen Rechnung unter einem eindeutigen Dateinamen.
Frage, ob man sich sicher ist, dass wirklich gelöscht werden soll.
Soll die Rechnung unter einem eindeutigen Namen gespeichert werden (wie im Beispiel
gezeigt), kann dazu die Rechnungsnummer dienen – denn diese muss ja eindeutig sein.
Sicherheitshalber kann man noch eine Abfrage einbauen, ob die eingetragene
Rechnungsnummer bereits vergeben ist.
Danach werden die Inhalte der aktuellen Rechnung gelöscht, was die einfachste
Angelegenheit ist.
12.2.3 Rechnungsnummer eintragen
Zum Eintragen der Rechnungsnummer kann man einfach die alte Rechnungsnummer um 1
erhöhen. Vorsichtshalber sollte man aber bei den gespeicherten Rechnungen prüfen, ob die
Rechnungsnummer bereits vergeben wurde.
12.3 Der Code
Der Code befindet sich auch hier kommentiert in der Beispieldatei auf dem Klassenmodul zur
Rechnung7 (Alt + F11. dann Doppelklick auf Tabellenblatt Rechnung7). Im unteren Bereich
befindet sich der Code aus Rechnung6, der unverändert übernommen wurde. Darüber befindet
sich der Code, der zu der neuen Schaltfläche gehört und zwischen die oben genannten Zeilen
geschrieben wurde.
Wir beginnen mit einigen Sicherheitsmaßnahmen (1).
Zuerst lassen wir eine Meldung erscheinen, ob die Inhalte wirklich gelöscht werden sollen.
Wenn nein, wird der Code, also die Routine, einfach verlassen.
Anschließend wird die eingetragene Rechnungsnummer geprüft:
1. Ist überhaupt eine eingetragen?
2. Handelt es sich um eine Zahl?
3. Ist die Rechnungsnummer bereits vergeben?
Im Fehlerfall wird die höchste der bereits gespeicherten Rechnungsnummern plus 1
verwendet.
Danach wird die aktuelle Rechnung, so, wie sie ist, als separate Exceldatei gespeichert (2).
Dazu wird der Pfad festgelegt, natürlich einschließlich eines eindeutigen Dateinamens. Das
Schema wurde so gewählt, dass sich die Rechnungen im Windows-Explorer gut sortieren
lassen.
Dann werden die wichtigsten Daten der aktuellen Rechnung in die Rechnungsliste, also in das
Blatt mit allen gespeicherten Rechnungen, übertragen (3).
Nun sind die Daten der Rechnung gesichert und die Daten in der aktuellen Rechnung können
gelöscht werden (4).
Zum Schluss wird die neue Rechnungsnummer eingetragen (5).
12.4 Zusammenfassung
Bei dieser Rechnung wurde weitestgehend alles, was möglich ist, automatisiert. Dabei wurden
auch die Gesetze beachtet, vor allem was die Inhalte der Rechnung und die Aufbewahrung
betrifft.
Folgende Schritte sind bei dieser Variante erforderlich:
1.
2.
3.
4.
5.
Eintragen der Kundennummer
Eintragen der Nummer des Artikels
Eintragen der Anzahl des gekauften Artikels
Ausdrucken der Rechnung
Klick auf die Schaltfläche
In regelmäßigen Abständen kommt noch das Sichern der Rechnungsliste hinzu. Welche
Abstände dies sind, ist von Fall zu Fall unterschiedlich. Aber auch diesen Vorgang kann man
automatisieren, indem man einfach ein Makro aufzeichnet oder eine Routine schreibt.