Rechnung in Word - ohne Excel

Mit etwas einfacher Makroprogrammierung lässt sich in Word auch ohne Excel rechnen und somit eine Rechnung erstellen. Das Tutorial zeigt in mehreren Teilen, wie sich eine Rechnung mit allem Drum und Dran erstellen lässt.
Rechnung in Word - ohne Excel
Filter in zwei oder mehr Spalten zu setzen, die nicht voneinander abhängig sind, ist mit den Filtermöglichkeiten, die Excel bietet, nicht möglich. Angenommen Sie haben eine Tabelle mit ein paar Städten, zwei verschiedene Kategorien und zugehörigen Umsätzen. Aktivieren Sie über das Menüband Daten in der Gruppe Sortieren und Filtern den
Zwei Filter setzen mit ODER(...)
Mir gefiehlen die guten alten Weblinks von Joomla nicht, als ich diese Site relaunchte. Beispielsweise war es nicht möglich die Sprache der verlinkten Site per Landesfahne zu kennzeichnen. Auch waren
SEBLOD: Weblinks mit automatisierten Screenshots

Excel-Lösungen

  • Tutorials zu Fragen rund um Excel
  • Teilweise mit Makroprogrammierungen.
  • Fertige Excel-Sheets mit Teillösungen zum Download
Excel-Lösungen
Dieses Tutorial steht im Downloadcenter (http://www.time4mambo.de/downloads/viewcategory/3.html) als PDF zur Verfügung Einfache Rechnung Einzelpostenauflistung, Zwischensumme, Gesamtsumme und Mehrwertsteuer – für den Geschäftsmann
Rechnungserstellung mit Word und Excel
Seit Joomla 3 ist das CSS-Framework Bootstrap fester Bestandteil in Joomla und kann für eigene Templates somit einfach benutzt werden. Auf time4jaoomla erfahren Sie, wie es geht.
Bootstrap mit Joomla
Original-Auszug aus dem Buch Die Überlegung: Wir haben eine Kulturredaktion, der eine Kategorie zugeordnet ist. Und wir haben eine Politikredaktion, die in zwei Kategorien schreibt. Beide Redaktionen sollen nur ihre eigenen Beiträge bearbeiten, veröffentlichen und löschen können. Außerdem bekommen beide Redaktionen noch einen Chefreakteur zur Seite, der in allen
Fallbeispiel: Redaktionssystem
Schaut man sich das erste Mal einen CSS-Befehl an, führt das meistens zu einem panischen Weiterklicken, weil das alles sehr kompliziert ausschaut. Aber eigentlich ist es das nicht. Bei genauer Betrachtung ist CSS eigentlich sogar selbsterklärend und wenn man eine Weile damit umgegangen ist, geht es schon beinahe wie von
Wie funktioniert CSS
Das Tutorial steht auf time4mambo zum Download bereit: http://www.time4mambo.de/das-unternehmen/downloads/category/11-joomla-1-5.html (http://www.time4mambo.de/das-unternehmen/downloads/category/11-joomla-1-5.html) Dieses Tutorial ist ursprünglich für Joomla! 1.5 geschrieben worden. So ich es derzeit überblicke hat das Tutorial aber auch in Joomla!
Community Builder
Grafische Rollovers mit dem JCE zu machen ist ja recht einfach, weil der JCE hier schon fertige Einstellmöglichkeiten sehr einfach mitbringt.Aber wie wird ein Rollover-Effekt bei einer Textmarke erzielt? Eigentlich genauso wie ein grafischer Rollover-Effekt - nur mit einem klitzekleinen Trick: Zunächst schreiben wir den Text: Lass uns was schreiben und mittendrin einen
Text-Rollover mit dem JCE
Dieses Tutorial steht als PDF-Download im http://www.time4mambo.de/webdesign/referenz.html (http://www.time4mambo.de/webdesign/referenz.html)
SEBLOD: Einführung am Beispiel eines selbsterstellten Portfolios

Joomla Toplist

Seblod in deutsch

Zu dritt haben wir die deutschsprachige SEBLOD®-Community gegründet. Neben Ressourcen und Webseiten , die mit SEBLOD® gemacht sind, bieten wir ein Supportforum zu Fragen rund um SEBLOD® an.

https://seblod.time4mambo.de

Nonverbale und paraverbale Kommunikation

KörperspracheDamit ist zum einen die Körpersprache gemeint und zum anderen die Art, wie wir kommunizieren. Zu letzterem gehören der Tonfall, Sprachmelodie, Artikulation, Sprechtempo und auch die Pausen zwischen den Wörtern.

Das reine Wort, der Inhalt, machen 7% unserer Kommunikation aus. Die para- und nonverbale Kommunikation zusammen 93%. Wie Sie 93% mehr Erfolg haben können, erfahren Sie auf dieser Website:

https://koerpersprache.time4mambo.de

 

Newsletter

captcha 

Schulungen

Langjährige Erfahrung als Dozent zu verschiedenen Themen.
Ich komme zu Ihnen in die Firma oder organisiere Räume vor Ort. Dazu steht mir ein Netzwerk aus vielen Jahren Tätigkeit als freier Dozent zur Verfügung.
Weitere Informationen, sowie Referenzen finden Sie auf der Firmenseite time4mambo

    MS-Excel
    2003 / 2007/ 2010
    MS-Project
    2003 / 2007
    MS-Word
    2003 / 2007 / 2010
    MS-PowerPoint 2010
    Joomla! 1.5 / 2.5
    Körpersprache für Präsentation und zur verkaufsfördernen Motivation

    Weitere Themen auf Anfrage

Interesse? Lust? Zeit? Dann freue ich mich über eine eMail oder Anruf.
Kontaktdaten im Impressum


Newsletter

Nach Bestätigung des Buttons wird eine Bestätigungs-eMail versendet, die Sie bitte durch anklicken bestätigen. So kann Missbrauch mit Ihrer eMail-Adresse ausgeschlossen werden

Gesamtblick auf die Rechnung

Rechnungserstellung - Teil 3 - Automatisierte Auftragseingabe, UserForms und Inputboxen

Word
2013

So mancher Kunde verlangt ein bestimmtes Aussehen in der Rechnung. Zumindest habe ich ein paar solcher Kunden, wo der Auftragsaufbau ein bestimmtes Aussehen haben muss, bzw. bestimmte Daten enthalten sein müssen. Darüberhinaus habe ich immer wiederkehrende Aufträge bei gleichen Kunden und natürlich wäre es schön, wenn dann beispielsweise die Adresse oder eben der Auftrag entsprechend automatisiert werden kann.

 

UserForms einfügen

Unsere bisherige Rechnung wird nun erweitert und auch etwas umgebaut. Für die Individualität einzelner Kunden werden Userforms eingefügt. Entweder klicken Sie dazu auf das Icon oben oder im Pulldownmenü auf Einfügen und anschließend UserForm. Sie erhalten danach eine leere Form mit dem Namen UserForm 1.

Neben Ihrer Form sollte eine kleine Toolbox aufgehen, die die möglichen Steuerelemente enthält. Falls Sie diese nicht sehen, klicken Sie in der Iconleiste auf das Werkzeug-Icon oder im Pulldownmenü auf Ansicht / Werkzeugsammlung.

Toolbox zur UserForm

Was macht was:

  • Pfeil = wird zum Verschieben oder Auswählen benötigt und kehrt standardmäßig immer wieder zu dieser Auswahl zurück
  • A = das große "A" ist ein Labelfeld. Also ein reines Beschriftungsfeld
  • ab| = Fügt einen Eingabebereich für einen Text ein.
  • "Pulldown-Icon" = Damit können Sie einen Pulldownbutton einfügen, der eine Auswahl enthält.
  • "Listbox-Icon" = Eine Auswahlliste mit Mehrfachauswahl-Möglichkeit
  • Checkbox = Auswahlfeld mittels Checkbox
  • Radiobutton = Nur eine Auswahl von mehreren vorgegebenen ist möglich
  • xyz = Macht einen Frame, eine Umrandung, um Ihre Felder. Sie müssen aber erst das Frame und dann die Felder, die im Frame liegen sollen auswählen
  • Button = Zum Beispüiel einen Okay-Button einfügen, mit dem das Formular abgesendet und verarbeitet wird
  • Registerkarten = Sie können auf die einzelnen Tabs nur programmiertechnisch zugreifen nd so beispielsweise dynamische Auswertungen erzeugen
  • Multisites = Hier können Sie in jedem Tab Ihre eigenen Steuerelemente/Formulartfelder unterbringen
  • Scrollbalken = Wenn Sie in Ihrem Formular scrollen möchten
  • Drehfeld = Damit können Sie beispielsweise Zahlenfelder nach vorn oder hinten in Ihren gewählten Schritten durchqueeren
  • Imagefeld = Um ein Bild einzufügen

Bei allen Elementen erscheinen auf der linken Seite die Eigenschaften, wo Sie die einzelnen Einstellungen vornehmen.

Leider kann ich Ihnen in diesem Tutorial keinen umfassenden Überblick über alle Elemente und den Möglichkeiten der UserForms geben. Lediglich einen kleinen Einblick und einfachen Formen, wie sie für unsere Rechnung reichen sollten.

 

 

Auftragsformular

Eine einfache UserForm zur Auftragserfassung.

Zunächst ändere ich den Namen der UserForm in "ufAndere". uf steht dabei für UserForm. In der Programmierung benutze ich diesen Namen und kann jederzeit erkennen, dass es sich um eine UserForm handelt. Auch wenn ich den Code erst wieder nach Monaten anfasse. Das Formular hat auch einen Titel, den ich in der Caption ändere.

Zunächst füge ich ein Labelfeld ein (das Feld mit dem großen "A" in der Toolbox) und ändere die Beschriftung mittels der Caption-Eigenschaft, wie auch schon beim Fenstertitel der ganzen Form. Daneben ziehe ich ein Textfeld ("ab|") über die restliche Form. Den Namen nenne ich in "txbAuftrag" um. txb steht dabei für "Textbox". Geben Sie hier unbedingt einen aussagenden Namen ein, weil mit den Eingabefeldern programmiert wird!

Unten drunter wieder ein Labelfeld. Ich habe meist Aufträge über mehrere Tage, manchmal aber auch nur für einen Tag. Deswegen prüfe ich später in der Programmierung ab, ob in "Bis" was steht oder nur ein eintägiger Auftrag vorlag. Deswegen die Bezeichnung "Von / Am". Aber natürlich können und müssen Sie das auch an Ihren Bedürfnissen anpassen. Zu guter Letzt muss das Honorar noch rein. Die Mehrwertsteuer wird dann automatisch berechnet.

Zuletzt den Okay-Button nicht vergessen. Einfach einen Button in das Feld ziehen, einen sprechenden Namen in Name eintragen, damit Sie den Button einwandfrei zuordnen können, und "Okay" in die Caption schreiben.

Danach klicken Sie doppelt auf Ihren Okay-Button. Damit kommen Sie direkt in die Programmierung.

Private Sub cmdAndereOk_Click()
Dim strAusgabe As String

strAusgabe = ufAndere.txbAuftrag & " - " & ufAndere.txbDatumVonAm
If ufAndere.txbDatumBis <> "" Then
strAusgabe = strAusgabe & " bis " & ufAndere.txbDatumBis
End If
ActiveDocument.Bookmarks("Auftrag").Range.InsertBefore strAusgabe
ufAndere.Hide
End Sub

Nach dem Doppelklick auf den OK-Button finden Sie eine zunächst leere Subroutine:

Private Sub cmdAndereOk_Click()

End Sub

Hier nun programmieren wir unsere erste Ausgabe:

in der Variablen strAusgabe setzen wir unsere bisherigen Eingaben in der UserForm zusammen. Also zunächst den Auftrag, gefolgt von einem Bindestrich und dann das erste Datum. Danach wird abgeprüft, ob im zweiten Datumfeld etwas steht. Wenn ja, dann erweitere die bisherige strAusgabe mit dem Wort "bis" und dem Inhalt des zweiten Textfeldes.

An dieser Stelle ist unsere Auftragsform bereits abgearbeitet. Deshalb kann nun die UserForm geschlossen werden mit ufAndere.Hide.

Private Sub Document_New()
On Error GoTo Fehler

Dim Zahl As Word.Table
Dim Rechnung(2) As Double
Dim Summe As String
Dim MwstHono As Double, MwstSpes As Double
Dim Ergebnis As Double
Dim Befreit As Boolean
Dim Kunde As String

Befreit = False
Ergebnis = 0
Set Zahl = ActiveDocument.Tables(1)

Kunde = InputBox("Kunde auswählen" & Chr(13) & "1 = Kunde x" & Chr(13) & "2 = Andere", "Kunde")
If Kunde <> "" Then
If Kunde = 1 Then
ActiveDocument.Bookmarks("Auftraggeber").Range.InsertBefore "Firmenname" & Chr(10) & _
"Straße mit Hausnummer" & Chr(10) & "PLZ Ort"
ufKundeX.Show
Else
ufAndere.Show
End If
End If

'Zwischensumme Honorar auslesen
If ufAndere.txbHonorar <> "" Then Rechnung(1) = CDbl(ufAndere.txbHonorar)
Ergebnis = 0
Zahl.Cell(1, 2).Range.Text = Format(Rechnung(1), "#,##0.00 \€")
Zahl.Cell(1, 2).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
Zahl.Cell(1, 2).Range.Font.Bold = False

'Zwischensumme Spesen auslesen
Ergebnis = InputBox("Spesen eingeben" & Chr(13) & "0 = Ignorieren | 1 = Von MwSt befreit:", "Honorar")
If Ergebnis = 1 Then
Zahl.Cell(4, 1).Range.Text = "Das Honorar ist nach $4 Nr. 21 b) bb) UstG von der Umsatzsteuer befreit."
Zahl.Cell(5, 1).Range.Text = ""
Ergebnis = 0
Befreit = True
Else
Rechnung(2) = Ergebnis
End If

'MwSt berechnen
If Befreit = False Then
MwstHono = Rechnung(1) * 0.19
Zahl.Cell(2, 2).Range.Text = MwstHono
Zahl.Cell(2, 2).Range.Text = Format(MwstHono, "#,##0.00 \€")
Zahl.Cell(2, 2).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
Zahl.Cell(2, 2).Range.Font.Bold = False
End If
If Rechnung(2) > 0 Then
Zahl.Cell(4, 2).Range.Text = Format(Rechnung(2), "#,##0.00 \€")
Zahl.Cell(4, 2).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
Zahl.Cell(4, 2).Range.Font.Bold = False
MwstSpes = Rechnung(2) * 0.19
Zahl.Cell(5, 2).Range.Text = MwstSpes
Zahl.Cell(5, 2).Range.Text = Format(MwstSpes, "#,##0.00 \€")
Zahl.Cell(5, 2).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
Zahl.Cell(5, 2).Range.Font.Bold = False
End If

'Gesamtsumme berechnen
Summe = Rechnung(1) + MwstHono + Rechnung(2) + MwstSpes
Zahl.Cell(8, 2).Range.Text = Summe
Zahl.Cell(8, 2).Range.Text = Format(Summe, "#,##0.00 \€")
Zahl.Cell(8, 2).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
Zahl.Cell(8, 2).Range.Font.Bold = True


Exit Sub
Fehler:
MsgBox Err.Description
Resume Next
End Sub

Nun öffnen wir im Projekt-Editor unter "Microsoft Word Objekte" die "Rechnung" oder das "ThisDocument", wenn Sie noch keinen eigenen Namen vergeben haben.Achten Sie aber darauf, dass Sie im Bereich der Rechnungserstllung sind und nicht oben unter "Normal". Im Tab vorher gibt es einen Screenshot dazu.

Das ist viel Code, der da erscheint. Einen Teil davon kennen Sie jedoch bereits aus den vorangegangen Teilen. Der Code ist aber ein wenig erweitert und befindet sich jetzt an einer anderen Stelle. Die "andere Stelle" ist notwendig, da die ganzen Eingaben und automatischen Berechnungen bereits beim Aufruf der Vorlage stattfinden sollen und müssen. Wir benutzen dafür die Document-Ereignisse. Wenn Sie ganz oben im Kopfbereich des Dokuments "Document" auswählen, erhalten Sie rechts eine Liste der verfügbaren Ereignisse: Ereignisse in Word

Damit ist sichergestellt, dass, immer wenn Sie eine neue Rechnung auswählen, die Programmierung automatisch startet. Dazu gehört dann sowohl die eben erstellt UserForm, als auch das ein oder andere Inputfeld, welches wir jetzt erzeugen.

Unsere erste Inputbox starten wir in dieser Zeile:

 

Kunde = InputBox("Kunde auswählen" & Chr(13) & "1 = Kunde x" & Chr(13) & "2 = Andere", "Kunde")

In meinem Rechnungsvordruck habe ich im Adressfeld ein Bookmark gesetzt. Wie das geht habe ich im zweiten Teil dieser Rechnungsserie beschrieben. Wenn die Taste "1" gedrückt wurde, wird die Adresse des Kunden automatisch in das Adressfeld geschrieben. So können Sie eine Liste Ihrer wichtigsten wiederkehrenden Kunden zusammenstellen.

Wird die "2" ausgwählt, gibt es kein Adressfeld. Egal wie die Entscheidung ausfällt wird eine passende UserForm dazu geöffnet. Kunde 1 hat eine sehr komplexe Auftragsbeschriftung, die ich mit einer eigenen Form versehen habe (Kunde X). Alle anderen Kunden benötigen lediglich die Projektbeschreibung und das Datum. Und natürlich das Honorar. Also all das, was wir in der UserForm ufAndere eingetragen haben.

Nun geht es an der Berechnung (wobei ich im obigen Code lediglich das UserForm ufAndere berücksichtigt habe. Das deswegen, weil sich zum einen der Ablauf sehr ähnelt und ein paar wenige Kunden sehr spezielle Angaben benötigen, die ich hier nicht abbilden möchte).

If ufAndere.txbHonorar <> "" Then Rechnung(1) = CDbl(ufAndere.txbHonorar)

Eine kleine Sicherheitsabfrage, ob das Honorarfeld auch wirklich beschrieben ist. Ist das leer, gibt es ansonsten eine Fehlermeldung. Wenn ja, dann wird dem Arrayfeld Rechnung(1) der Inhalt des Textfeldes zugewiesen. Allerdings muss ich den Inhalt des Textfeldes, der ja eine Zeichenkette ist, zuvor in einen Doublewert umwandeln. Zeichenkette (String), Double, Integer und all diese Typenbezeichnungen haben etwas mit der Darstellung von Inhalten zu tun und wirken sich auch auf den Speicherbereich aus. Wichtig ist: damit Word mit dem eingegebenen Honorar rechnen kann, müssen wir zunächst eine Zahl daraus machen, die auch Nachkommastellen anzeigen kann.

Die Zeile danach kennen wir schon aus dem ersten Teil:

Zahl.Cell(1, 2).Range.Text = Format(Rechnung(1), "#,##0.00 \€")

Der Inhalt vom Array "Rechnung(1)" wird, richtig formatiert, in unsere Tabelle geschrieben. Die nachfolgenden zwei Zeilen formatieren diese Zahl noch ein wenig.

Ergebnis = InputBox("Spesen eingeben" & Chr(13) & "0 = Ignorieren | 1 = Von MwSt befreit:", "Honorar")
    If Ergebnis = 1 Then
            Zahl.Cell(4, 1).Range.Text = "Das Honorar ist nach $4 Nr. 21 b) bb) UstG von der Umsatzsteuer befreit."
            Zahl.Cell(5, 1).Range.Text = ""
            Ergebnis = 0
            Befreit = True
    Else
        Rechnung(2) = Ergebnis
End If

Ich habe ab und an Kunden, die von der Mehrwertsteuer befreit sind. Die benötigen dann eine Mitteilung auf der Rechnung, dass sie befreit sind. Gleiches ist natürlich auch für das Finanzamt wichtig. Dieser Block fragt zunächst in der Inputbox ab, ob der Kunde von der MwSt befreit ist. Ist er das, wird der Satz "Das Honorar ist nach $4 Nr. 21 b) bb) UstG von der Umsatzsteuer befreit." ausgegben und die MwSt-Zellen in der Tabelle gelöscht. Ist der Kunde nicht befreit, wird die Zahl "0" für "Ignorieren" gedrückt oder wahlweise ein Spesensatz eingegeben. Bei mir fällt das ab und an für Fahrtkosten oder auch Übernachtungen vor Ort an. Rechnung mit MwSt und ohne Spesen


Rechnung mit Spesen


 

rech mwstbefr

 

Was nun noch gemacht werden muss, ist das alles zu berechnen und in der Tabelle auszugeben. Die grundsätzliche Berechnung steht im ersten Teil. Hier ist sie lediglich ein wenig erweitert durch die mögliche Befreiung.

Haben Sie mehrere Kunden und zugehörige UserForms brauchen Sie lediglich im oberen Bereich, wo ich das Beispiel mit der Adresse abgebildet habe, Ihre Forms einzugeben und auszuwerten. Auch wenn Sie mit der Programmierung nicht so fit sind, sollten Sie mit den Beispielen die ein oder andere Idee haben, wie Sie das umsetzen können.

 

 

 

 

 

 

 

 

 

 

 

 

UserForms mit Projekteditor im EditorGesamtblick auf die Rechnung

webdesign von time4mambo

www.time4joomla.de is not affiliated with or endorsed by the Joomla! Project or Open Source Matters. The Joomla! name and logo is used under a limited license granted by Open Source Matters the trademark holder in the United States and other countries.