Frage von mali1234, 42

Wie kann ich eine Tabelle in Access mit drei Spalten manipulieren über eine Formeingabe durch VBA-Code?

Hallo,

mein Problem ist folgendes:

Ich habe eine Tabelle in ACCESS NICHT EXCEL:

1.Spalte ist z.b. Rechnungsnummer 2.Spalte ist z.b. Brutto-Betrag 3.Spalte ist z.b. Mwst-Satz 4. soll berechnet werden z.b. Netto-Betrag (mit Brutto-Betrag mal 0.19)

Nun möchte ich eine Form bauen (ich weiß wie es geht). Sie soll 3 Text-Boxen haben um die Nummern 1-3 einzugeben, wobei der 1ste Wert sowieso automatisch vergeben werden würde, bzw. aus einer referenzierten Tabelle kommt (je nachdem..). Wie teile ich Access mit, dass er in Netto-Betrag einen Wert einfügen soll im Hintergrund, sobald ich auf den nächsten Datensatz gehe?

Was ich gerne wissen möchte ist der Code, der nötig wäre um die Eingabe aus 2 und 3 zu nehmen und sobald ich es wegschicke in die Spalte "Netto-Betrag" also inkl. Mwst einzutragen.

Kann mir jemand helfen?

Weiter würde mich interessieren, wo ich Funktionen nachschauen könnte, bzw. wie ich die richtige Funktion für meinen Bedarf finden kann.

Beispiel:

Ich möchte zwei Variabeln addieren (x,y) und daraus dann z.B. den Sinus berechnen und das ganze als Euro-Wert ausgeben.

Wie muss ich vorgehen um die richtigen Funktionen zu finden?

Antwort
von arminho1, 18

Zunächst mal ist der Nettowert nicht Brutto x 0,19 ;-)

Nehmen wir an, deine Felder heißen in der Tabelle RechNr, Netto, MwstSatz und Brutto. Die Feldreihenfolge im Formular ist jetzt wichtig. In dem Feld, in dem die letzte Eingabe erfolgt fügst du den Code im Eventhandler "Nach Aktualisierung" ein:

Netto = Brutto / (100 + MwstSatz) * 100

Wenn deine Felder auf dem Formular (theoretisch) RechNrFeld, NettoFeld, MwstSatzFeld und BruttoFeld heißen würden, könntest du auch schreiben:

Me.NettoFeld = Me.BruttoFeld / (100 + Me.MwstSatzFeld) * 100

Das Me-Objekt bezeichnet das Objekt, in dem aktuell Code ausgeführt wird, in diesem Fall das Formular. Im Beispiel könnte man "Me." auch weglassen. Das geht aber nicht immer.

Beachte auch, dass manchmal (nicht hier) eine Aktualisierung des Formulars notwendig wird. Dazu benötigst du dann

Me.Repaint (komplette "Neuzeichnung" des Formulars)
Me.Requery (Abfragen werden aktualisiert)
Me.Recalc (berechnete Felder werden aktualisiert)

Antwort
von Robsl, 32

Du kannst in Access ein Formular aufgrund einer vorhandenen Tabellendefinition erstellen, am besten mit dem Assistenten. Wenn der Nettobetrag in der Tabelle automatisch berechnet wird, dann tut es auch das Formular. Ebenso kannst du für eine Spalte einen DefaultWert vergeben, den es beim Anlegen eines neuen Datensatzes auch im Formular vergibt.

Probier 's einfach mal aus.

Kommentar von mali1234 ,

Vielen Dank für deine Hilfe. Das Problem ist foldendes: ich möchte ein Formular mit drei Feldern erstellen für eine Tabelle mit 4 Feldern. Das vierte Feld soll kalkuliert werden, nachdem ich die drei Felder gefüllt habe.

Es geht um Access nicht um Excel. Kann ich in Tabellen eine Funktion übergeben?

Würde es auch mit VBA gehen mit einer Funktions Prozedur?

Danke für die Hilfe.

Kommentar von Robsl ,

Du brauchst dafür kein VBA.

Du erstellst erst die Tabelle mit den Feldern (Spalten) ID, Brutto, MWStSatz. Beim Erstellen des Feldes Netto gibst du an, dass es sich um ein "berechnetes Feld" handeln soll. Du gibst in der Folgemaske die Berechnung ein (Brutto / 100 * MWStSatz). In den Feldeigenschaften gibst du jeweils bei "Beschriftung" die Namen der Felder für das Formular ein.

Jetzt weißt du dem Feld MWStSatz den Standardwert "19" zu.

Tabelle speichern.

Jetzt geht 's ans Formular. Gehe in die Kategorie "Formular" und dort zur Registerkarte "Erstellen" und dort in den "Formularassistenten". Hier erstellst du dann auf der Grundlage deiner Tabelle das Formular. Geht fast alles automatisch.

Am Ende sperrst du das Feld Netto im Formular für Eingaben.

Beim Springen mit der TAB-Taste wird Netto übersprungen. Beim Anlegen eines neuen Datensatzes bzw. beim Ändern eines bestehenden wird der Nettobetrag automatisch neu berechnet.

Fertig.

Kommentar von mali1234 ,

vielen dank für die informationen und die mühe. ich möchte das ganze allerdings in vba hinbekommen. es geht mir nicht darum, dass ich das über die berichte lösen kann oder über die spalteneigenschaften. ich möchte es über vba hinbekommen. der grund ist einfach: lerneffekt.

der vorteil ist, dass ich es dann auch auf andere fälle übertragen kann und erfahre, wie man es so hinbekommt, dass es im hintergrund ausgeführt wird.

ein weiterer vorteil ist, dass die eingabemaske=formular einfach gehalten werden kann und damit weniger fehler aus menschlicher sicht passieren können, da weniger eingegeben werden muss.

Kommentar von Robsl ,

Ich verstehe, dass du VBA üben willst, aber einfacher als auf die von mir geschilderte Weise kannst du das Formular nicht "stricken". Im MWSt-Feld steht immer 19 ("Prozent" kannst du in die Überschrift nehmen, genau wie "Euro" für die beiden anderen Felder), es ist aber überschreibbar, das Netto wird automatisch berechnet, welches der beiden Felder "Brutto" oder "MWSt-Satz" du auch immer änderst.

Wenn du VBA üben willst, dann stelle darüber fest, wie hoch das Netto ist und setze einen Grenzbetrag, bei dessen Überschreiten eine MsgBox darauf hinweist.

Oder erstelle eine weitere Tabelle "Artikel", in der du Waren mit Einheiten (Stück, Kilo, Set usw.) und Preisen einträgst. Ein weiteres Formular "Bestellungen" bietet dir dann eine ausreichende Spielwiese für VBA. Dazu gibt 's dann noch die Tabelle "Lagerbestand" der gleichen Artikel, mit deren Hilfe du im Bestellformular per VBA prüfen kannst, ob für die aktuelle Bestellung noch genügend Bestand vorhanden ist.

Die integrierten Werkzeuge von Access nicht zu nutzen ist, als würdest du in Excel die Summenfunktion per VBA neu erfinden.

Das Spielfeld hat fast keine Grenzen und das Zusammenwirken von Access-eigenen Funktionen mit VBA hat einen hohen Spaßfaktor. Je tiefer du einsteigst, desto "lustiger" wird es. Ich habe mit Access ernsthafte Anwendungen für meinen Arbeitgeber zusammengebaut, ich weiß also, wovon ich schreibe.

In diesem Sinne: Viel Freude :)

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten