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.