Anleitung zum Einfügen des Gehatsrechner-Makro
in eine EXCEL-Arbeitsmappe
  1. Kopieren des Gehaltsrechner-Makro in die eigene EXCEL-Arbeitsmappe:

Nach Öffnen des Gehaltsrechners (z.B von 2011 lohnst11.xls) mit Strg+F11 den Visual-Basic-Editor und dann mit Strg+R den Projekt-Explorer aufrufen. Dort bei VBA-Project (z.B. lohnst11.xls) das Modul (z. B. Lohnsteuer2011) aufrufen (anklicken) und den Code (im Fenster) mit Strg+A aktivieren und dann mit Strg+C in den Zwischenspeicher kopieren.

Anschliessend die eigene Arbeitsmappe, in die das Makro kopiert werden soll, ebenso öffnen, wieder den Visual-Basic-Editor aufrufen und dort unter Einfügen_Modul in die eigene Arbeitsmappe ein Modul1 einfügen (Bezeichnung erfolgt automatisch. Zur Namensänderung - z.B. in 'Lohnsteuer_2012' - Eigenschaftsfenster aufrufen - Modul1 vorher ausgewählt - und (Name) ändern). Modul1 anklicken und in das Modul-Fenster mit Strg+V den Code aus dem Zwischenspeicher kopieren und mit Strg+S abspeichern. Den Gehaltsrechner beenden und nur die eigene Mappe geöffnet lassen (bessere Übersicht).

- oder:

In VBA Projekt-Ebene Modul lohnsteuer2011 aktivieren, dann Datei_Datei exportieren.. anklicken. Modul wird dann als Datei lohnsteuer2011.bas in dem gewählten Ordner abgespeichert. Programm beenden und eigene Arbeitsmappe aufrufen. Dort auf VBA-Projekt-Ebene Datei_Datei importieren... anklicken und in den Ordner gehen, der die Datei lohnsteuer2011.bas enthält. Ausgewählte Datei wird dann als Modul in die eigene Arbeitsmappe übernommen.

2. anzusprechende Zellen im Makro der eigenen Arbeitsmappe anpassen:

Die ursprünglichen Zellaufrufe

    re4 = Range("B2").value  'Bruttolohn
    lzz = Range("B3").value   'Lohnzahlungszeitraum, Monat=2
    stkl = Range("B4").value  'Steuerklasse 1 - 6
    usw.
können verschieden angepasst werden. Günstig ist ein eigenes Arbeitsblatt (z.B. Stammdaten) einzufügen (mit Einfügen_Tabellenblatt, dann rechte Maustaste auf Umbenennen, "Tabelle2" z.B. in "Stammdaten" umbenennen)), um dort die Angaben für die Zellen B3 bis B15 zu erfragen bzw. zu speichern. Im Makro dann diese Werte mit z.B. lzz = Range("Stammdaten!D5").value abrufen (Ausrufezeichen nach Arbeitsblattnahme nicht vergessen! Der Arbeitsblattname muß bei der Zellbezeichnung immer dann angegeben werden, wenn die anzusprechende Zelle nicht im gerade aktivierten Arbeitsblatt liegt).

3. Zellen für Bruttolohn und Ergebnisse anpassen

Wenn man Arbeitsblätter z.B. "Januar", "Februar" usw. hat, in denen jeweils der Bruttolohn ermittelt wird, sollte dieser möglichst immer in der selben Zelle bei den 12 Monatsblättern stehen und ebenso sollte man für das Ergebnis

    Range("B17").value = stresult(0)  'Steuer im Lohnzahlungszeitraum
    Range("B18").value = stresult(1)   'SolZuschlag
    Range("B19").value = stresult(2)   'Kirchensteuer
    Range("B20").value = Application.Round(sozresult(0), 2) 'RentenV
    Range("B21").value = Application.Round(sozresult(1), 2) 'KrankenV
    Range("B22").value = Application.Round(sozresult(2), 2) 'PflegeV
    Range("B23").value = Application.Round(sozresult(3), 2) 'ArbeitslosenV
    
in jedem Arbeitsblatt die gleichen Zellen zur Ausgabe vorsehen.

Damit das Programm weiß, welchen Bruttolohn es übernehmen soll, und in welches Arbeitsblatt das Ergebnis geschrieben werden soll, übergibt man beim Funktionsaufruf den Namen des Arbeitsblattes mit und ändert die Zeile Function Gehaltsrechner() im Modul1 entsprechend in z.B.

    Function Gehaltsrechner(Monat)
sowie die nächste Zeile (die das jeweilige Arbeitsblatt aktiviert) in
  Sheets(Monat).Activate
(statt Sheets("Gehaltsrechner 2011").Activate)

4. Aufruf des Makro

Damit das Gehaltsrechner-Makro weiß, dass er rechnen soll, muß man es aufrufen. Dazu gibt es z.B. folgende Möglichkeiten:

- mit Eventhandler

Das Prinzip dabei ist, dass jedesmal wenn auf dem Arbeitsblatt eine Veränderung registriert wird, der Eventhandler "feuert", d.h. auch genutzt werden kann, um das Makro aufzurufen. Um einen Event-Handler zu kreieren, wird in der Visual-Basic-Editor-Ebene das entsprechende Tabellenblatt z.B. "Januar" aufgerufen (nicht Modul1) und dort folgender Code hineinkopiert:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Target, Range("B2:B16")) Is Nothing Then
      Gehaltsrechner("Januar")
    End If

 End Sub
Mit Range("B2:B16") ist der Bereich der Zellen angegeben, bei deren Änderung (nach Betätigung der ENTER-Taste) jeweils der Eventhandler aktiv wird und der Gehaltsrechner aufgerufen wird. Den Zellbereich muß man entsprechend seinen Arbeitsmappen anpassen. Wichtig: Die Ausgabezellen dürfen nicht in diesem Bereich liegen!!!, sonst kommt der Eventhandler nicht mehr zur Ruhe und das Programm hängt sich auf.

- mit Befehlsschaltfläche

Zum Einfügen einer Befehlsschaltfläche auf EXCEL-Ebene auf Ansicht_Symbolleiste gehen und die Steuerelemente-Toolbox aktivieren. In der Toolbox dann das Befehlsschaltflächen-Icon anklicken, außerhalb der Toolbox gehen und das Kreuz dorthin bewegen, wo die Schaltfläche liegen soll (läßt sich nach Aktivieren jederzeit wieder verschieben). Schaltfläche deaktivieren (Mausklick ausserhalb der Schaltfläche), mit Mauszeiger auf Schaltfläche zurück gehen, rechte Maustaste betätigen und aus dem gezeigten Menue den Punkt Code anzeigen anklicken. Dadurch wird automatisch im Tabellenblatt der Code erzeugt (und angezeigt):

Private Sub CommandButton1_Click()

End Sub
Diesen dann analog mit dem Funktionsaufruf für den Gehaltsrechner ergänzen:
Private Sub CommandButton1_Click()
 Gehaltsrechner("Januar")
End Sub
Die Schaltfläche kann man auch umbenennen. Dazu wieder mit Mauszeiger auf (deaktivierte) Schaltfläche gehen, rechte Maustaste betätigen und dann Befehlsschaltfläche-Objekt_Bearbeiten anklicken.
 

Neu: Aufruf des Makros mit einem Funktionaufruf, der alle Parameter übergibt.

Ein Beispiel für diese Möglichkeit ist die Datei lohnst11_netto.xls. Bei dieser EXCEL-Mappe werden dem Makro mit dem Funktionsaufruf alle Parameter übergeben, wenn auch immer nur ein Wert zurückgegeben werden kann. Durch eine Indexzahl, die auch dem Makro im Funktionsaufruf übergeben wird, ist sichergestellt, ob an die Zelle, in der der Funktionsaufruf steht, die Lohnsteuer, der SoliZuschlag oder die Kirchensteuer bzw. einer der Sozialbeiträge zurückgegeben werden soll. In der lohnst2011_netto.xls-Mappe stehen in den Zellen B23 bis B28 diese (gleichen) Funktionsaufrufe - nur mit jeweils ener anderen Indexzahl (im Beispielfall = 0).

 =LSt(B2;B3;B4;B6;B7;B8;B9;B10;B11;B12;B13;B14;B15;B17;B18;B19;B16;B5;0)

Vorteil ist, dass das Makro ohne jede Änderung in die eigene Mappe übernommen werden kann und die Funktionsaufrufe in jeder Zelle stehen können, wobei es dann nicht notwendig ist, bei geänderter Anordnung der Ausgabezellen entsprechende Änderungen im Makro zu machen. Bei geänderter Anordnung der Eingabezellen muss natürlich der Funktionsaufruf mit den neuen Zellbezügen erstellt werden und natürlich immer in der gleichen Reihenfolge der Werte (wie sie vom Makro erwartet werden).

  Function LSt(re4, lzz, stkl, krv, zkf, kist, kv, pkpv, mitag, pvz, ost,
               pvs, alter1, jfreib, sonstb, jsonstb, mj, f, indicator)
Dazu genügt es aber einen Funktionsaufruf anzupassen. Diesen kann man in die verschiedenen Ausgabezellen kopieren und muß dann jeweils nur die Indexzahl anpassen.

Gewählt wurde diese Möglichkeit übrigens, um die GoalSeek Funktion für die Netto aus Brutto-Berechnung zu nutzen (siehe Funktion Wunschnetto() am Ende des Moduls 'lohnsteuer2010').

Das Erstellen eines AddIns ist so auch einfach zu realisieren. Zur Vereinfachung kann man die für die vorgesehenen Berechnungen nicht notwendigen/gleichbleibenden Parameter in der Funktionsklammer weglassen und in der Funktion entsprechend feste Werte zuweisen, sodass man z.B. nur Bruttolohn, Steuerklasse und gegebenfalls Kinderfreibetrag sowie den Indicator/Index beim AddIn-Aufruf eingeben muß. Ein mit dem Makro so erstelltes AddIn ist zu finden unter lohnsteuer2010.xla
 


Ein Beispiel für die Einfügung des Makros in eine EXCEL-Datei mit mehreren Arbeitsblättern ist zu finden (für 2009) unter stundenabrechnung.xls (260 kB) bzw. stundenabrechnung.zip (79 kB). Neu: Dieter Huhnen hat dieses Programm für 2008 zum direkten Einsatz vervollständigt (incl. November und Dezember 2007). Zu finden unter stundenabrechnung(1.0).xls (890 kB). Ein weiteres Programm mit dem Makro LGH-Abrechnung (96 kB) ist von Bernd Jankofsky und als Erfassungshilfe für die Lohn- u. Gehaltsabrechnungen konzipiert.

Ein Beispiel für die Einbindung des Makro in ein Arbeitsblatt, in dem mehrere Nettolohnberechnungen durchgeführt werden sollen, ist zu finden unter mehrfachabrechnung.xls (mit Makro von 2009). Dazu wird das Makro in einer Schleife mehrfach angesprochen. Vorraussetzung ist in diesem Fall, dass jede Berechnung in einer eigenen Reihe durchgeführt wird und die notwendigen Werte immer in den gleichen Zeilen stehen bzw. auch die Ergebnisse in immer die gleichen Zeilen geschrieben werden können.

Eine Arbeitszeitabrechnung mit gleichzeitiger Lohnabrechnung für 2010, die das Makro mit Parameterübergabe im Funktionsaufruf nutzt, ist zu finden unter stundenabrechnung2010.xls (1.5 MB) bzw. gepackt unter stundenabrechnung2010.zip (300 kB). Die Lohnabrechnung wird immer für den jeweils abgeschlossenen Monat erstellt und die Werte auch in ein Lohnjournal übernommen.