{"id":55001634,"date":"2026-12-01T00:00:00","date_gmt":"2026-11-09T18:53:18","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1634"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Vereinsverwaltung_Beitraege_berechnen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/","title":{"rendered":"Vereinsverwaltung: Beitr&auml;ge berechnen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/5dbac60753b94fd1bfd05e6574dd73aa\" width=\"1\" height=\"1\" alt=\"\"><b>Wer die Beitr&auml;ge eines Vereins von Hand berechnet, muss f&uuml;r jedes Mitglied Alter, Beitragsart und Beitragssatz nachschlagen. Bei einem Eintritt oder Austritt im Laufe des Jahres kommt die Berechnung des anteiligen Beitrags hinzu, und bei Familien soll der Beitrag gedeckelt werden. Das ist aufwendig und fehleranf&auml;llig. Wie wir aus den Mitgliedschaften und den Beitragss&auml;tzen die Forderungen eines Beitragsjahres berechnen, zeigt der vorliegende Beitrag.<\/b><\/p>\n<h2>Die Regeln im &Uuml;berblick<\/h2>\n<p>Die Beispieldatenbank <b>VereinsverwaltungBeitraegeBerechnen.accdb<\/b> baut auf der Datenbank aus dem Beitrag <b>Vereinsverwaltung: Mitglieder, Bankverbindungen und Mandate (www.access-im-unternehmen.de\/1630)<\/b> auf.<\/p>\n<p>Hinzu kommt das Modul <b>mdlBeitraege<\/b> mit den Funktionen und Prozeduren dieses Beitrags. Die Berechnung folgt f&uuml;nf Regeln:<\/p>\n<ul>\n<li><b>Beitragsart:<\/b> Sie ergibt sich aus dem Alter des Mitglieds am Altersstichtag des Beitragsjahres.<\/li>\n<li><b>Beitragssatz:<\/b> Es gilt der Jahresbeitrag, der am <b>1. Januar<\/b> des Beitragsjahres f&uuml;r die Beitragsart g&uuml;ltig ist.<\/li>\n<li><b>Anteil:<\/b> Tritt ein Mitglied im Beitragsjahr ein oder aus, z&auml;hlt jeder angefangene Monat voll.<\/li>\n<li><b>Familiendeckel:<\/b> Die Summe der Beitr&auml;ge einer Familie darf einen H&ouml;chstbetrag nicht &uuml;berschreiten, wenn f&uuml;r die Familie der Deckel gilt. Wir k&uuml;rzen daf&uuml;r zuerst die Beitr&auml;ge der j&uuml;ngsten Mitglieder.<\/li>\n<li><b>Forderung:<\/b> Das Ergebnis speichern wir je Mitgliedschaft und Beitragsjahr in der Tabelle <b>tblBeitragsforderungen<\/b>.<\/li>\n<\/ul>\n<p>F&uuml;r die Regeln erweitern wir das Datenmodell um vier Felder. Die Tabelle <b>tblBeitragsarten<\/b> erh&auml;lt die Felder <b>AlterVon<\/b> und <b>AlterBis<\/b>, die den Altersbereich einer Beitragsart festlegen (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1634_001.png\" alt=\"Die neuen Alters-Felder in der Tabelle tblBeitragsarten\" width=\"649,559\" height=\"155,5829\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Die neuen Alters-Felder in der Tabelle tblBeitragsarten<\/span><\/b><\/p>\n<p>Die Tabelle <b>tblOptionen<\/b> erh&auml;lt das Feld <b>FamilienHoechstbetrag<\/b> (siehe Bild 2). Die Tabelle <b>tblFamilien<\/b> erh&auml;lt das Feld <b>Deckel<\/b> vom Datentyp <b>Ja\/Nein<\/b>, mit dem wir f&uuml;r jede Familie festlegen, ob der Familiendeckel gilt. Damit stehen die Altersgrenzen, der H&ouml;chstbetrag und die Entscheidung je Familie in den Daten und nicht im Code. Die Beispieldaten enthalten die Beitragsarten <b>Kinder<\/b> (<b>0<\/b> bis <b>13<\/b> Jahre), <b>Jugendliche<\/b> (<b>14<\/b> bis <b>17<\/b> Jahre), <b>Erwachsene<\/b> (<b>18<\/b> bis <b>64<\/b> Jahre) und <b>Senioren<\/b> (ab <b>65<\/b> Jahren). Der H&ouml;chstbetrag betr&auml;gt <b>150,00<\/b> Euro, der Altersstichtag ist der <b>31.12.2026<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1634_002.png\" alt=\"Das neue Feld FamilienHoechstbeitrag in der Tabelle tblOptionen\" width=\"649,559\" height=\"163,6107\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Das neue Feld FamilienHoechstbeitrag in der Tabelle tblOptionen<\/span><\/b><\/p>\n<h2>Die Beitragsart nach dem Alter bestimmen<\/h2>\n<p>Das Alter in vollen Jahren am Stichtag liefert die Funktion <b>AlterAm<\/b> im Modul <b>mdlBeispieldaten<\/b>. Die Prozeduren zum Anlegen der Beispieldaten verwenden sie bereits. Wir haben sie auf &ouml;ffentlich umgestellt. Welche Beitragsart zu einem Alter geh&ouml;rt, ermittelt die Funktion <b>BeitragsartFuerAlter<\/b> (siehe Listing 1).<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>BeitragsartFuerAlter(ByVal lngAlter<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Long<\/span>\r\n    ' Liefert die Beitragsart, deren Altersbereich das Alter enthaelt\r\n    BeitragsartFuerAlter = Nz(DLookup(\"BeitragsartID\", \"tblBeitragsarten\", _\r\n        \"AlterVon&lt;=\" & lngAlter & \" AND AlterBis&gt;=\" & lngAlter), 0)\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Die Beitragsart zu einem Alter ermitteln<\/span><\/b><\/p>\n<p>Die Funktion sucht mit <b>DLookup<\/b> die Beitragsart, deren Altersbereich das &uuml;bergebene Alter einschlie&szlig;t. Findet <b>DLookup<\/b> keine Beitragsart, liefert die Funktion <b>Nz<\/b> den Wert <b>0<\/b>. Das geschieht, wenn kein Altersbereich das Alter enth&auml;lt, etwa bei einer L&uuml;cke zwischen zwei Bereichen. F&uuml;r ein Alter von <b>14<\/b> Jahren liefert die Funktion die <b>BeitragsartID<\/b> <b>2<\/b>, also die Beitragsart <b>Jugendliche<\/b>.<\/p>\n<h2>Den Jahresbeitrag am Stichtag ermitteln<\/h2>\n<p>Den Beitragssatz zu einer Beitragsart liefert die Funktion <b>JahresbeitragAm<\/b> (siehe Listing 2).<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>JahresbeitragAm(ByVal lngBeitragsartID<span style=\"color:blue;\"> As Long<\/span>, ByVal datStichtag<span style=\"color:blue;\"> As Date<\/span>)<span style=\"color:blue;\"> As Currency<\/span>\r\n    ' Liefert den Jahresbeitrag, der an einem Stichtag gilt\r\n    <span style=\"color:blue;\">Dim <\/span>strDatum<span style=\"color:blue;\"> As String<\/span>\r\n    strDatum = \"#\" & Format(datStichtag, \"yyyy-mm-dd\") & \"#\"\r\n    JahresbeitragAm = Nz(DLookup(\"Jahresbeitrag\", \"tblBeitragssaetze\", _\r\n        \"BeitragsartID=\" & lngBeitragsartID & \" AND GueltigAb&lt;=\" & strDatum & _\r\n        \" AND (GueltigBis&gt;=\" & strDatum & \" OR GueltigBis IS NULL)\"), 0)\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Den g&uuml;ltigen Jahresbeitrag zu einem Stichtag ermitteln<\/span><\/b><\/p>\n<p>Sie arbeitet wie die Abfrage <b>qryBeitragssaetzeAmStichtag<\/b> aus dem Beitrag <b>Vereinsverwaltung: Datenmodell (www.access-im-unternehmen.de\/1629)<\/b>, fragt aber nur eine Beitragsart ab.<\/p>\n<p>Die Funktion setzt das Datum im Format <b>JJJJ-MM-TT<\/b> zwischen zwei Rautenzeichen (<b>#<\/b>) in die Bedingung ein.<\/p>\n<p>Dieses Format legt die Reihenfolge von Jahr, Monat und Tag fest. Ein offener Beitragssatz hat im Feld <b>GueltigBis<\/b> den Wert <b>NULL<\/b>, deshalb pr&uuml;fen wir das Feld zus&auml;tzlich mit <b>IS NULL<\/b>. Im Direktbereich pr&uuml;fen wir den Beitragswechsel der Erwachsenen mit der <b>BeitragsartID<\/b> <b>3<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> JahresbeitragAm(3, #6\/30\/2025#)\r\n55\r\n<span style=\"color:blue;\">Debug.Print<\/span> JahresbeitragAm(3, #1\/1\/2026#)\r\n60<\/pre>\n<p>F&uuml;r die Berechnung verwenden wir den <b>1. Januar<\/b> des Beitragsjahres als Stichtag. &Auml;ndert der Verein den Beitragssatz im Laufe des Jahres, gilt f&uuml;r das ganze Jahr der Beitragssatz vom Jahresbeginn.<\/p>\n<h2>Anteilige Beitr&auml;ge bei Eintritt und Austritt<\/h2>\n<p>Tritt ein Mitglied im Beitragsjahr ein oder aus, zahlt es nur f&uuml;r die Monate seiner Mitgliedschaft.<\/p>\n<p>Wie viele Monate das sind, ermittelt die Funktion <b>MonateImJahr<\/b> (siehe Listing 3). Sie erwartet den Eintritt, den Austritt und das Beitragsjahr. Der Parameter <b>varAustritt<\/b> hat den Datentyp <b>Variant<\/b>, weil das Feld <b>Austritt<\/b> der Tabelle <b>tblMitgliedschaften<\/b> den Wert <b>NULL<\/b> enthalten kann.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>MonateImJahr(ByVal datEintritt<span style=\"color:blue;\"> As Date<\/span>, ByVal varAustritt<span style=\"color:blue;\"> As Variant<\/span>, ByVal lngJahr<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Long<\/span>\r\n    ' Zaehlt die Monate der Mitgliedschaft im Jahr, angefangene Monate zaehlen voll\r\n    <span style=\"color:blue;\">Dim <\/span>lngVon<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngBis<span style=\"color:blue;\"> As Long<\/span>\r\n    lngVon = 1\r\n    lngBis = 12\r\n    <span style=\"color:blue;\">If <\/span>Year(datEintritt) &gt; lngJahr<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Exit Function<\/span>\r\n    <span style=\"color:blue;\">If <\/span>Year(datEintritt) = lngJahr<span style=\"color:blue;\"> Then<\/span> lngVon = Month(datEintritt)\r\n    <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> IsNull(varAustritt)<span style=\"color:blue;\"> Then<\/span>\r\n        <span style=\"color:blue;\">If <\/span>Year(varAustritt) &lt; lngJahr<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Exit Function<\/span>\r\n        <span style=\"color:blue;\">If <\/span>Year(varAustritt) = lngJahr<span style=\"color:blue;\"> Then<\/span> lngBis = Month(varAustritt)\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">If <\/span>lngBis &gt;= lngVon<span style=\"color:blue;\"> Then<\/span> MonateImJahr = lngBis - lngVon + 1\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Die Monate einer Mitgliedschaft im Beitragsjahr z&auml;hlen<\/span><\/b><\/p>\n<p>Die Funktion beginnt mit dem Zeitraum <b>1<\/b> bis <b>12<\/b>. Liegt der Eintritt im Beitragsjahr, beginnt der Zeitraum im Eintrittsmonat. Liegt der Eintritt in einem sp&auml;teren Jahr, gibt es keine Monate.<\/p>\n<p>Die Funktion endet dann mit dem Wert <b>0<\/b>. Liegt der Austritt in einem fr&uuml;heren Jahr, endet sie ebenfalls mit <b>0<\/b>. Liegt der Austritt im Beitragsjahr, endet der Zeitraum im Austrittsmonat. Das Ergebnis sind die Monate vom ersten bis zum letzten Monat einschlie&szlig;lich.<\/p>\n<p>Zwei Aufrufe im Direktbereich zeigen die Rechnung:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> MonateImJahr(#5\/10\/2019#, #6\/30\/2026#, 2026)\r\n6\r\n<span style=\"color:blue;\">Debug.Print<\/span> MonateImJahr(#3\/15\/2026#, Null, 2026)\r\n10<\/pre>\n<p>Das erste Mitglied ist am <b>10.05.2019<\/b> eingetreten und tritt am <b>30.06.2026<\/b> aus. Es zahlt daher sechs Monate.<\/p>\n<p>Das zweite Mitglied tritt am <b>15.03.2026<\/b> ein und ist weiterhin Mitglied.<\/p>\n<p>Es zahlt daher zehn Monate. Aus den Monaten ergibt sich der Anteil des Jahresbeitrags: F&uuml;r ein Mitglied mit einem Jahresbeitrag von <b>60,00<\/b> Euro und sechs Monaten sind das <b>30,00<\/b> Euro.<\/p>\n<p>Die Prozedur <b>ForderungenAnlegen<\/b> rundet den Anteil mit der Funktion <b>fctRound<\/b> auf zwei Nachkommastellen (die Funktion finden Sie im Modul <b>mdlTools<\/b>).<\/p>\n<p>Diese verwenden wir, da die VBA-Funktion Round nicht kaufm&auml;nnisch rundet, sondern das sogenannte Bankers Rounding nutzt.<\/p>\n<h2>Den Familiendeckel anwenden<\/h2>\n<p>Eine Familie zahlt h&ouml;chstens den Betrag, den der Verein als H&ouml;chstbetrag festlegt, im Beispiel <b>150,00<\/b> Euro im Jahr.<\/p>\n<p>Zun&auml;chst berechnen wir die Forderungen ohne den Deckel.<\/p>\n<p>Dazu setzen wir das Feld <b>Deckel<\/b> in der Tabelle <b>tblFamilien<\/b> bei allen Familien auf <b>Nein<\/b> und legen die Forderungen mit der Prozedur <b>ForderungenAnlegen<\/b> an, die wir weiter unten beschreiben.<\/p>\n<p>Die Forderungen der drei Familien summieren sich dann auf <b>180,00<\/b> Euro (Mueller), <b>156,00<\/b> Euro (Schmidt) und <b>120,00<\/b> Euro (Weber, siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1634_004.png\" alt=\"Die Forderungen der drei Familien ohne Familiendeckel im Formular frmFamilienForderungen\" width=\"599,559\" height=\"389,3026\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Die Forderungen der drei Familien ohne Familiendeckel im Formular frmFamilienForderungen<\/span><\/b><\/p>\n<p>Die Familien Mueller und Schmidt &uuml;berschreiten den H&ouml;chstbetrag. Die Prozedur <b>FamiliendeckelAnwenden<\/b> k&uuml;rzt die Forderungen der Familie, bis die Summe den H&ouml;chstbetrag erreicht (siehe Listing 4). Sie erwartet die <b>FamilieID<\/b> und das Beitragsjahr.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>FamiliendeckelAnwenden(ByVal lngFamilieID<span style=\"color:blue;\"> As Long<\/span>, ByVal lngJahr<span style=\"color:blue;\"> As Long<\/span>)\r\n    ' Kuerzt die Forderungen einer Familie mit Deckel, die juengsten zuerst\r\n    <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n    <span style=\"color:blue;\">Dim <\/span>curHoechst<span style=\"color:blue;\"> As Currency<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>curSumme<span style=\"color:blue;\"> As Currency<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>curUeberschuss<span style=\"color:blue;\"> As Currency<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>curKuerzung<span style=\"color:blue;\"> As Currency<\/span>\r\n    curHoechst = Nz(DLookup(\"FamilienHoechstbetrag\", \"tblOptionen\"), 0)\r\n    <span style=\"color:blue;\">If <\/span>curHoechst = 0<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Exit Sub<\/span>\r\n    If <span style=\"color:blue;\">Not<\/span> Nz(DLookup(\"Deckel\", \"tblFamilien\", _\r\n            \"FamilieID=\" & lngFamilieID), <span style=\"color:blue;\">True<\/span>) Then <span style=\"color:blue;\">Exit Sub<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> rst = CurrentDb.OpenRecordset(\"SELECT tblBeitragsforderungen.ForderungID, \" & _\r\n        \"tblBeitragsforderungen.Betrag FROM (tblBeitragsforderungen INNER JOIN \" & _\r\n        \"tblMitgliedschaften ON tblBeitragsforderungen.MitgliedschaftID = \" & _\r\n        \"tblMitgliedschaften.MitgliedschaftID) INNER JOIN tblPersonen ON \" & _\r\n        \"tblMitgliedschaften.PersonID = tblPersonen.PersonID \" & _\r\n        \"WHERE tblPersonen.FamilieID = \" & lngFamilieID & _\r\n        \" AND tblBeitragsforderungen.Beitragsjahr = \" & lngJahr & _\r\n        \" ORDER BY tblPersonen.Geburtsdatum DESC\", dbOpenSnapshot)\r\n    Do Until rst.EOF\r\n        curSumme = curSumme + rst!Betrag\r\n        rst.Move<span style=\"color:blue;\">Next<\/span>\r\n    <span style=\"color:blue;\">Loop<\/span>\r\n    curUeberschuss = curSumme - curHoechst\r\n    <span style=\"color:blue;\">If <\/span>curUeberschuss &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n        rst.MoveFirst\r\n        Do Until rst.EOF Or curUeberschuss &lt;= 0\r\n            curKuerzung = IIf(rst!Betrag &lt; curUeberschuss, rst!Betrag, curUeberschuss)\r\n            CurrentDb.Execute \"UPDATE tblBeitragsforderungen SET Betrag = Betrag - \" & _\r\n                <span style=\"color:blue;\">Replace<\/span>(CStr(curKuerzung), \",\", \".\") & \" WHERE ForderungID = \" & _\r\n                rst!ForderungID, dbFailOnError\r\n            curUeberschuss = curUeberschuss - curKuerzung\r\n            rst.Move<span style=\"color:blue;\">Next<\/span>\r\n        <span style=\"color:blue;\">Loop<\/span>\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    rst.Close\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Die Forderungen einer Familie auf den H&ouml;chstbetrag k&uuml;rzen<\/span><\/b><\/p>\n<p>Die Prozedur endet ohne &Auml;nderung, wenn im Feld <b>FamilienHoechstbetrag<\/b> der Wert <b>NULL<\/b> oder <b>0<\/b> steht oder wenn die Familie im Feld <b>Deckel<\/b> den Wert <b>Nein<\/b> hat. Andernfalls &ouml;ffnet sie die Forderungen der Familie, absteigend nach dem Feld <b>Geburtsdatum<\/b> sortiert, sodass die j&uuml;ngsten Mitglieder zuerst erscheinen.<\/p>\n<p>In einem ersten Durchlauf summiert sie die Werte des Feldes <b>Betrag<\/b>. Ist die Summe gr&ouml;&szlig;er als der H&ouml;chstbetrag, geht sie die Forderungen in einem zweiten Durchlauf durch und k&uuml;rzt sie jeweils um den &Uuml;berschuss, der noch &uuml;ber dem H&ouml;chstbetrag liegt, h&ouml;chstens aber um den Betrag der Forderung.<\/p>\n<p>Die K&uuml;rzung schreibt die Prozedur mit einer <b>UPDATE<\/b>-Anweisung, in der sie das Dezimaltrennzeichen vom Komma (<b>,<\/b>) auf den Punkt (<b>.<\/b>) umstellt.<\/p>\n<p>Bei der Familie Mueller betr&auml;gt der &Uuml;berschuss <b>30,00<\/b> Euro. Hans, das j&uuml;ngste Mitglied, zahlt <b>24,00<\/b> Euro und wird auf <b>0,00<\/b> Euro gek&uuml;rzt. Die restlichen <b>6,00<\/b> Euro k&uuml;rzt die Prozedur bei Jens von <b>36,00<\/b> auf <b>30,00<\/b> Euro.<\/p>\n<p>Bei der Familie Schmidt betr&auml;gt der &Uuml;berschuss <b>6,00<\/b> Euro. Die Prozedur k&uuml;rzt ihn bei Emma, deren Forderung von <b>36,00<\/b> auf <b>30,00<\/b> Euro sinkt. Die Familie Weber liegt unter dem H&ouml;chstbetrag, ihre Forderungen bleiben unver&auml;ndert (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1634_005.png\" alt=\"Die Forderungen der drei Familien mit dem Familiendeckel\" width=\"599,559\" height=\"387,6103\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Die Forderungen der drei Familien mit dem Familiendeckel<\/span><\/b><\/p>\n<h2>Die Forderungen eines Beitragsjahres anlegen<\/h2>\n<p>Legen wir die Forderungen eines Beitragsjahres ein zweites Mal an, etwa nach einer &Auml;nderung der Beitragss&auml;tze, sollen die alten Forderungen nicht stehen bleiben.<\/p>\n<p>Die Prozedur <b>ForderungenLoeschen<\/b> entfernt deshalb vorab die Forderungen des Jahres (siehe Listing 5).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ForderungenLoeschen(ByVal lngJahr<span style=\"color:blue;\"> As Long<\/span>)\r\n    ' Entfernt die offenen Forderungen eines Beitragsjahres, die in keiner Position stehen\r\n    CurrentDb.Execute \"DELETE FROM tblBeitragsforderungen WHERE Beitragsjahr = \" & _\r\n        lngJahr & \" AND Status = 'Offen' AND ForderungID NOT IN (SELECT \" & _\r\n        \"ForderungID FROM tblLastschriftpositionen)\", dbFailOnError\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Die offenen Forderungen eines Beitragsjahres entfernen<\/span><\/b><\/p>\n<p>Die <b>DELETE<\/b>-Anweisung entfernt nur Forderungen mit dem <b>Status<\/b> <b>Offen<\/b>, die in keiner Position eines Lastschriftlaufs stehen. Forderungen, die bereits eingezogen werden oder bezahlt sind, bleiben unver&auml;ndert. Ein Aufruf im Direktbereich l&ouml;scht die Forderungen f&uuml;r <b>2026<\/b>:<\/p>\n<pre>ForderungenLoeschen 2026<\/pre>\n<p>Die Prozedur <b>ForderungenAnlegen<\/b> setzt die f&uuml;nf Regeln um (siehe Listing 6). Sie erwartet das Beitragsjahr als Parameter und ruft zu Beginn <b>ForderungenLoeschen<\/b> auf.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ForderungenAnlegen(ByVal lngJahr<span style=\"color:blue;\"> As Long<\/span>)\r\n    ' Legt die Forderungen eines Beitragsjahres an und wendet den Familiendeckel an\r\n    <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n    <span style=\"color:blue;\">Dim <\/span>rstForderung<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n    <span style=\"color:blue;\">Dim <\/span>datStichtag<span style=\"color:blue;\"> As Date<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngMonate<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngBeitragsartID<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>curJahresbeitrag<span style=\"color:blue;\"> As Currency<\/span>\r\n    ForderungenLoeschen lngJahr\r\n    datStichtag = DLookup(\"Altersstichtag\", \"tblOptionen\")\r\n    datStichtag = DateSerial(lngJahr, Month(datStichtag), Day(datStichtag))\r\n    <span style=\"color:blue;\">Set<\/span> rst = CurrentDb.OpenRecordset(\"SELECT tblMitgliedschaften.MitgliedschaftID, \" & _\r\n        \"tblMitgliedschaften.Eintritt, tblMitgliedschaften.Austritt, \" & _\r\n        \"tblPersonen.Geburtsdatum FROM tblMitgliedschaften INNER JOIN tblPersonen \" & _\r\n        \"ON tblMitgliedschaften.PersonID = tblPersonen.PersonID \" & _\r\n        \"ORDER BY tblMitgliedschaften.MitgliedschaftID\", dbOpenSnapshot)\r\n    <span style=\"color:blue;\">Set<\/span> rstForderung = CurrentDb.OpenRecordset(\"tblBeitragsforderungen\", dbOpenDynaset)\r\n    Do Until rst.EOF\r\n        lngMonate = MonateImJahr(rst!Eintritt, rst!Austritt, lngJahr)\r\n        If lngMonate &gt; 0 And DCount(\"*\", \"tblBeitragsforderungen\", \"MitgliedschaftID=\" & _\r\n                rst!MitgliedschaftID & \" AND Beitragsjahr=\" & lngJahr) = 0 Then\r\n            lngBeitragsartID = BeitragsartFuerAlter(AlterAm(rst!Geburtsdatum, datStichtag))\r\n            curJahresbeitrag = JahresbeitragAm(lngBeitragsartID, DateSerial(lngJahr, 1, 1))\r\n            rstForderung.Add<span style=\"color:blue;\">New<\/span>\r\n            rstForderung!MitgliedschaftID = rst!MitgliedschaftID\r\n            rstForderung!Beitragsjahr = lngJahr\r\n            rstForderung!Betrag = fctRound(curJahresbeitrag * lngMonate \/ 12, 2)\r\n            rstForderung.Update\r\n            CurrentDb.Execute \"UPDATE tblMitgliedschaften SET BeitragsartID = \" & _\r\n                lngBeitragsartID & \" WHERE MitgliedschaftID = \" & _\r\n                rst!MitgliedschaftID, dbFailOnError\r\n        <span style=\"color:blue;\">End If<\/span>\r\n        rst.Move<span style=\"color:blue;\">Next<\/span>\r\n    <span style=\"color:blue;\">Loop<\/span>\r\n    rst.Close\r\n    rstForderung.Close\r\n    <span style=\"color:blue;\">Set<\/span> rst = CurrentDb.OpenRecordset(\"SELECT FamilieID FROM tblFamilien\", dbOpenSnapshot)\r\n    Do Until rst.EOF\r\n        FamiliendeckelAnwenden rst!FamilieID, lngJahr\r\n        rst.Move<span style=\"color:blue;\">Next<\/span>\r\n    <span style=\"color:blue;\">Loop<\/span>\r\n    rst.Close\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 6: Die Forderungen eines Beitragsjahres anlegen<\/span><\/b><\/p>\n<p>Die Prozedur bildet aus dem Feld <b>Altersstichtag<\/b> der Tabelle <b>tblOptionen<\/b> den Stichtag des Beitragsjahres, indem sie Monat und Tag &uuml;bernimmt und das Jahr ersetzt. Dann geht sie alle Mitgliedschaften durch. F&uuml;r jede Mitgliedschaft z&auml;hlt sie die Monate im Beitragsjahr. Hat die Mitgliedschaft keine Monate oder besitzt sie f&uuml;r das Beitragsjahr bereits eine Forderung, &uuml;berspringt die Prozedur sie.<\/p>\n<p>Andernfalls bestimmt sie die Beitragsart aus dem Alter, den Jahresbeitrag am <b>1. Januar<\/b> und den Betrag nach den Monaten. Die ermittelte Beitragsart schreibt sie zus&auml;tzlich in das Feld <b>BeitragsartID<\/b> der Tabelle <b>tblMitgliedschaften<\/b>, damit das Formular <b>frmMitglieder<\/b> die aktuelle Beitragsart anzeigt.<\/p>\n<p>Zum Schluss wendet sie den Familiendeckel auf jede Familie an.<\/p>\n<p>Wegen <b>ForderungenLoeschen<\/b> und der Pr&uuml;fung auf vorhandene Forderungen k&ouml;nnen wir die Prozedur mehrmals f&uuml;r dasselbe Beitragsjahr aufrufen, ohne dass Forderungen doppelt entstehen. Die offenen Forderungen berechnet sie dabei neu, Forderungen in einem Lastschriftlauf oder mit einem anderen <b>Status<\/b> l&auml;sst sie unver&auml;ndert.<\/p>\n<p>Wir starten sie im Direktbereich: <\/p>\n<pre>ForderungenAnlegen 2026<\/pre>\n<p>In den Beispieldaten entstehen <b>40<\/b> Forderungen mit einer Gesamtsumme von <b>2.100,00<\/b> Euro. Ohne den Familiendeckel w&auml;ren es <b>2.136,00<\/b> Euro gewesen.<\/p>\n<p>Die drei Mitglieder, die zum <b>30.06.2026<\/b> austreten, zahlen anteilig: Die beiden Mitglieder der Beitragsart <b>Erwachsene<\/b> zahlen je <b>30,00<\/b> Euro, das Mitglied der Beitragsart <b>Senioren<\/b> zahlt <b>24,00<\/b> Euro. Die Summe je Beitragsjahr zeigt die Abfrage <b>qryForderungenProJahr<\/b>:<\/p>\n<pre>SELECT Beitragsjahr, Count(*) AS Anzahl,\r\n    Sum(Betrag) AS Summe\r\nFROM tblBeitragsforderungen GROUP BY Beitragsjahr;<\/pre>\n<p>F&uuml;r das Beitragsjahr <b>2026<\/b> zeigt die Spalte <b>Anzahl<\/b> den Wert <b>40<\/b> und die Spalte <b>Summe<\/b> den Wert <b>2.100,00<\/b> Euro.<\/p>\n<h2>Die Forderungen im Formular verwalten<\/h2>\n<p>Bisher starten wir die Prozeduren im Direktbereich. F&uuml;r die t&auml;gliche Arbeit im Verein erweitern wir das Formular <b>frmFamilienForderungen<\/b>.<\/p>\n<p>Mit dem erweiterten Formular legen wir das Beitragsjahr fest, legen die Forderungen an oder l&ouml;schen sie und bestimmen je Familie, ob der Deckel gilt (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1634_006.png\" alt=\"Das Formular frmFamilienForderungen mit Beitragsjahr, Schaltfl&auml;chen und dem Kontrollk&auml;stchen Deckel\" width=\"649,559\" height=\"328,3981\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Das Formular frmFamilienForderungen mit Beitragsjahr, Schaltfl&auml;chen und dem Kontrollk&auml;stchen Deckel<\/span><\/b><\/p>\n<p>Die Meldung unter den Schaltfl&auml;chen liefert die Funktion <b>ForderungenText<\/b> im Modul <b>mdlBeitraege<\/b>. Sie beschreibt Anzahl und Summe der Forderungen eines Beitragsjahres (siehe Listing 7).<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>ForderungenText(ByVal lngJahr<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n    ' Beschreibt Anzahl und Summe der Forderungen eines Beitragsjahres\r\n    <span style=\"color:blue;\">Dim <\/span>strBedingung<span style=\"color:blue;\"> As String<\/span>\r\n    strBedingung = \"Beitragsjahr=\" & lngJahr\r\n    ForderungenText = DCount(\"*\", \"tblBeitragsforderungen\", strBedingung) & _\r\n        \" Forderungen, \" & Format(Nz(DSum(\"Betrag\", \"tblBeitragsforderungen\", _\r\n        strBedingung), 0), \"#,##0.00\") & \" Euro\"\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 7: Anzahl und Summe der Forderungen eines Beitragsjahres als Text<\/span><\/b><\/p>\n<p>Die Funktion z&auml;hlt mit <b>DCount<\/b> die Forderungen des Beitragsjahres und summiert mit <b>DSum<\/b> ihre Betr&auml;ge. <b>Nz<\/b> ersetzt eine fehlende Summe durch <b>0<\/b>, denn f&uuml;r ein Jahr ohne Forderungen liefert <b>DSum<\/b> den Wert <b>Null<\/b>.<\/p>\n<p>Nach dem Anlegen der Forderungen f&uuml;r <b>2026<\/b> liefert die Funktion den Text <b>40 Forderungen, 2.100,00 Euro<\/b>, ohne Forderungen den Text <b>0 Forderungen, 0,00 Euro<\/b>.<\/p>\n<p>Zuerst bereiten wir die Daten vor. F&uuml;gen Sie der Tabelle <b>tblFamilien<\/b> das Feld <b>Deckel<\/b> vom Datentyp <b>Ja\/Nein<\/b> hinzu und tragen Sie bei der Eigenschaft <b>Standardwert<\/b> den Wert <b>Ja<\/b> ein.<\/p>\n<p>Die vorhandenen Familien erhalten dabei zun&auml;chst den Wert <b>Nein<\/b>. Setzen Sie sie mit einer Aktualisierungsabfrage auf <b>Ja<\/b>:<\/p>\n<pre>UPDATE tblFamilien SET Deckel = True;<\/pre>\n<p>&Ouml;ffnen Sie danach die Abfrage <b>qryFamilienForderungen<\/b> in der Entwurfsansicht und f&uuml;gen Sie aus der Tabelle <b>tblFamilien<\/b> das Feld <b>Deckel<\/b> hinter dem Feld <b>Familienname<\/b> ein.<\/p>\n<p>Das Kontrollk&auml;stchen im Formular ist an dieses Feld gebunden. Das Formular erweitern wir in diesen Schritten:<\/p>\n<ul>\n<li>&Ouml;ffnen Sie das Formular <b>frmFamilienForderungen<\/b> in der Entwurfsansicht. Vergr&ouml;&szlig;ern Sie den Formularkopf nach unten und verschieben Sie die Bezeichnungsfelder der Spalten an den unteren Rand des Formularkopfes.<\/li>\n<li>F&uuml;gen Sie im Formularkopf oberhalb der Spalten&uuml;berschriften ein ungebundenes Textfeld ein und benennen Sie es <b>txtBeitragsjahr<\/b>. Stellen Sie bei <b>Format<\/b> den Wert <b>0<\/b> und bei <b>Standardwert<\/b> den Ausdruck <b>=Jahr(Datum())<\/b> ein. &Auml;ndern Sie die Beschriftung des zugeh&ouml;rigen Bezeichnungsfeldes in <b>Beitragsjahr<\/b>.<\/li>\n<li>F&uuml;gen Sie rechts neben dem Textfeld zwei Schaltfl&auml;chen ein, ohne den Assistenten zu verwenden. Benennen Sie diese <b>btnForderungenAnlegen<\/b> und <b>btnForderungenLoeschen<\/b> und geben Sie ihnen die Beschriftungen <b>Forderungen anlegen<\/b> und <b>Offene Forderungen l&ouml;schen<\/b>.<\/li>\n<li>F&uuml;gen Sie unterhalb der Schaltfl&auml;chen ein Bezeichnungsfeld ein und benennen Sie es <b>lblHinweis<\/b>. Als Beschriftung gen&uuml;gt ein Leerzeichen, denn der Code setzt den Text sp&auml;ter.<\/li>\n<li>Ziehen Sie aus der Feldliste das Feld <b>Deckel<\/b> in den Detailbereich rechts neben das letzte Textfeld. Access legt daf&uuml;r ein Kontrollk&auml;stchen an. Benennen Sie es <b>chkDeckel<\/b>, schneiden Sie das Bezeichnungsfeld aus, f&uuml;gen Sie es im Formularkopf &uuml;ber dem Kontrollk&auml;stchen ein und &auml;ndern Sie die Beschriftung in <b>Deckel<\/b>.<\/li>\n<li>W&auml;hlen Sie f&uuml;r beide Schaltfl&auml;chen auf der Registerkarte <b>Ereignis<\/b> bei <b>Beim Klicken<\/b> den Eintrag <b>[Ereignisprozedur]<\/b> und vervollst&auml;ndigen Sie die Prozeduren wie in Listing 8. Speichern Sie das Formular.<\/li>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnForderungenAnlegen_Click()\r\n    <span style=\"color:blue;\">If <\/span>IsNull(Me.txtBeitragsjahr)<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Exit Sub<\/span>\r\n    ForderungenAnlegen Me.txtBeitragsjahr\r\n    Me.lblHinweis.Caption = ForderungenText(Me.txtBeitragsjahr)\r\n    Me.Requery\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Private Sub <\/span>btnForderungenLoeschen_Click()\r\n    <span style=\"color:blue;\">If <\/span>IsNull(Me.txtBeitragsjahr)<span style=\"color:blue;\"> Then<\/span> <span style=\"color:blue;\">Exit Sub<\/span>\r\n    ForderungenLoeschen Me.txtBeitragsjahr\r\n    Me.lblHinweis.Caption = ForderungenText(Me.txtBeitragsjahr)\r\n    Me.Requery\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 8: Die Ereignisprozeduren der beiden Schaltfl&auml;chen<\/span><\/b><\/p>\n<\/ul>\n<p>Beide Prozeduren verlassen sich darauf, dass ein Beitragsjahr im Textfeld steht, und rufen dann <b>ForderungenAnlegen<\/b> oder <b>ForderungenLoeschen<\/b> auf.<\/p>\n<p>Danach zeigt das Bezeichnungsfeld <b>lblHinweis<\/b> das Ergebnis von <b>ForderungenText<\/b>, und <b>Requery<\/b> baut die Liste neu auf.<\/p>\n<p>Das Kontrollk&auml;stchen <b>chkDeckel<\/b> &auml;ndert nur die Einstellung der Familie. Die Forderungen berechnet erst ein Klick auf <b>Forderungen anlegen<\/b> neu.<\/p>\n<p>Forderungen, die in einem Lastschriftlauf stehen oder nicht mehr den <b>Status<\/b> <b>Offen<\/b> haben, bleiben dabei unver&auml;ndert.<\/p>\n<p>Die Wirkung zeigt die Familie Mueller. Ohne Haken bei <b>Deckel<\/b> ergibt <b>ForderungenAnlegen 2026<\/b> f&uuml;r die Familie <b>180,00<\/b> Euro und insgesamt <b>2.130,00<\/b> Euro, mit Haken <b>150,00<\/b> Euro und <b>2.100,00<\/b> Euro.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Wir haben die Beitragsart aus dem Alter abgeleitet, den Jahresbeitrag zum Stichtag gelesen, anteilige Beitr&auml;ge berechnet und den Familiendeckel angewendet.<\/p>\n<p>Die Prozedur <b>ForderungenAnlegen<\/b> setzt diese Schritte um und legt die Forderungen eines Beitragsjahres an.<\/p>\n<p>Im n&auml;chsten Beitrag erzeugen wir aus den Forderungen und den Mandaten die Datei f&uuml;r die Bank.<\/p>\n<p>Wie wir die Positionen eines Einzugs ausw&auml;hlen und die Datei im Format <b>pain.008<\/b> per VBA-Prozedur schreiben, zeigt der Beitrag <b>Vereinsverwaltung: pain.008-Datei erzeugen (www.access-im-unternehmen.de\/1632)<\/b> in der folgenden Ausgabe.<\/p>\n<p>Die Vorabinformation der Mitglieder und die Spendenbescheinigungen folgen in sp&auml;teren Beitr&auml;gen.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>VereinsverwaltungBeitraegeBerechnen.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/413632F9-055C-4687-AA2C-9E56579D31A3\/aiu_1634.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer die Beitr&auml;ge eines Vereins von Hand berechnet, muss f&uuml;r jedes Mitglied Alter, Beitragsart und Beitragssatz nachschlagen. Bei einem Eintritt oder Austritt im Laufe des Jahres kommt die Berechnung des anteiligen Beitrags hinzu, und bei Familien soll der Beitrag gedeckelt werden. Das ist aufwendig und fehleranf&auml;llig. Wie wir aus den Mitgliedschaften und den Beitragss&auml;tzen die Forderungen eines Beitragsjahres berechnen, zeigt der vorliegende Beitrag.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[662026,66062026,44000027],"tags":[],"class_list":["post-55001634","post","type-post","status-publish","format-standard","hentry","category-662026","category-66062026","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Vereinsverwaltung: Beitr&auml;ge berechnen - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vereinsverwaltung: Beitr&auml;ge berechnen - Access im Unternehmen\" \/>\n<meta property=\"og:description\" content=\"Wer die Beitr&auml;ge eines Vereins von Hand berechnet, muss f&uuml;r jedes Mitglied Alter, Beitragsart und Beitragssatz nachschlagen. Bei einem Eintritt oder Austritt im Laufe des Jahres kommt die Berechnung des anteiligen Beitrags hinzu, und bei Familien soll der Beitrag gedeckelt werden. Das ist aufwendig und fehleranf&auml;llig. Wie wir aus den Mitgliedschaften und den Beitragss&auml;tzen die Forderungen eines Beitragsjahres berechnen, zeigt der vorliegende Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-09T18:53:18+00:00\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Beitraege_berechnen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Beitraege_berechnen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/5efd1af2265d5b82ecce8bdb2db6694d\"},\"headline\":\"Vereinsverwaltung: Beitr&auml;ge berechnen\",\"datePublished\":\"2026-11-09T18:53:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Beitraege_berechnen\\\/\"},\"wordCount\":2314,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Beitraege_berechnen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/5dbac60753b94fd1bfd05e6574dd73aa\",\"articleSection\":[\"2026\",\"6\\\/2026\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Beitraege_berechnen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Beitraege_berechnen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Beitraege_berechnen\\\/\",\"name\":\"Vereinsverwaltung: Beitr&auml;ge berechnen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Beitraege_berechnen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Beitraege_berechnen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/5dbac60753b94fd1bfd05e6574dd73aa\",\"datePublished\":\"2026-11-09T18:53:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Beitraege_berechnen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Beitraege_berechnen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Beitraege_berechnen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/5dbac60753b94fd1bfd05e6574dd73aa\",\"contentUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/5dbac60753b94fd1bfd05e6574dd73aa\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Beitraege_berechnen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Vereinsverwaltung: Beitr&auml;ge berechnen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/5efd1af2265d5b82ecce8bdb2db6694d\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Vereinsverwaltung: Beitr&auml;ge berechnen - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/","og_locale":"de_DE","og_type":"article","og_title":"Vereinsverwaltung: Beitr&auml;ge berechnen - Access im Unternehmen","og_description":"Wer die Beitr&auml;ge eines Vereins von Hand berechnet, muss f&uuml;r jedes Mitglied Alter, Beitragsart und Beitragssatz nachschlagen. Bei einem Eintritt oder Austritt im Laufe des Jahres kommt die Berechnung des anteiligen Beitrags hinzu, und bei Familien soll der Beitrag gedeckelt werden. Das ist aufwendig und fehleranf&auml;llig. Wie wir aus den Mitgliedschaften und den Beitragss&auml;tzen die Forderungen eines Beitragsjahres berechnen, zeigt der vorliegende Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/","og_site_name":"Access im Unternehmen","article_published_time":"2026-11-09T18:53:18+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/5efd1af2265d5b82ecce8bdb2db6694d"},"headline":"Vereinsverwaltung: Beitr&auml;ge berechnen","datePublished":"2026-11-09T18:53:18+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/"},"wordCount":2314,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/5dbac60753b94fd1bfd05e6574dd73aa","articleSection":["2026","6\/2026","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/","url":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/","name":"Vereinsverwaltung: Beitr&auml;ge berechnen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/5dbac60753b94fd1bfd05e6574dd73aa","datePublished":"2026-11-09T18:53:18+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/#primaryimage","url":"http:\/\/vg01.met.vgwort.de\/na\/5dbac60753b94fd1bfd05e6574dd73aa","contentUrl":"http:\/\/vg01.met.vgwort.de\/na\/5dbac60753b94fd1bfd05e6574dd73aa"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Beitraege_berechnen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Vereinsverwaltung: Beitr&auml;ge berechnen"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/5efd1af2265d5b82ecce8bdb2db6694d","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001634"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001634\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}