Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

ganz einfache Berechnung

Begonnen von Ilias, Januar 26, 2013, 14:23:14

⏪ vorheriges - nächstes ⏩

Ilias

Lieber Mitglieder,
ich möchte eine ganz einfache Berechung durchführen, und komme nicht weiter >:( Könntet ihr mir bitte helfen?
Ich habe im Formular ein Textfeld (Format: Standardzahl, Name: Aufwand_AK). Inhalt soll wie folgt berechnet werden:
Aufwand = Stundensatz * Anzahl_Stunden * Anzahl_Personen.
Wo: Stundensatz in einer Tabelle (tbl_Step4) im Feld ("Stundensatz", vom Typ: Zahl) steht.
Benutzer wählt:
1. über Combobox (Name: cmb_Arbeitskraft) Typ der Arbeiter, davon ist Stundensatz abhängig.
2. gibt Anzahl_Stunden in Textfeld (Format: Standardzahl, Name: AS)
3. gibt Anzahl_Personen in Textfeld (Format: Standardzahl, Name: AP)


Um das zu realisieren habe ich in VBA eine Funktion erstellt:


Private Function Arbeitsaufwand()

If IsNull(Me!AP) Or IsNull(Me!AS) Then
Me!Aufwand_AK = ""
Else
Me.Aufwand_AK = DLookup("[Stundensatz]", "tbl_Step4", "[ID]=" & Me.cmb_Arbeitskraft) * Me!AS * Me!AP
End If

End Function


sobald ich das Formular aufrufe und Arbeiter wähler, popt VBA Fehlermeldung "Typen unverträglich" :-(
ich komme einfach nicht weiter... Bitte um hilfe.


Danke und Gruß,
Ilias

bahasu

Hi,

"[ID]=" & Me.cmb_Arbeitskraft) * Me!AS * Me!AP

soll dieser Teil soll dazu dienen, den Datensatz mit dlook zu finden?
Üblicherweise ist ID eine inter- bzw. long-Zahl ohne Nachkommastellen (und die nicht berechnet wird).
Ich kann mir vorstellen, dass bei Deiner Multiplikation eine Zahl mit Nachkommastellen herauskommt.

Weiterhin ist das ein rekursiver Aufruf: Du suchst den Stundensatz, indem Du aus dem Produkt von Stundensatz * AS * AP filterst.

Welche Bedingung soll gelten, um in der Tabelle den Stundensatz zu ermitteln?

Harald
Servus

Ilias

Hallo Harald,

ich möchte "nur" Stundensatz mit "Anzahl Personen" und "Anzahl Stunden" multiplizieren.
wenn ich nur
Me.Aufwand_AK = DLookup("[Stundensatz]", "tbl_Step4", "[ID]=" & Me.cmb_Arbeitskraft)[/sub]
lasse erscheint Stundensatz im Feld "Aufwand_AK" (also filtert er schon richtig nach Art der Arbeiter)
wie kann ich den Stundensatz jetzt mit "Anzahl Personen" und "Anzahl Stunden" multiplizieren???

Vielen Vielen Dank für Deine Hilfe,
Ilias

database

#3
Hallo,

welchen Felddatentyp hast du denn 'Stundensatz' in der tbl_Step4 verpaßt?
Das Kombifeld cmb_Arbeitskraft muss als gebundene Spalte die ID der Tbl_Step4 enthalten!

versuche mal ...

Me.Aufwand_AK = CDbl(DLookup("[Stundensatz]", "tbl_Step4", "[ID]=" & Me.cmb_Arbeitskraft)) * CLng(Me!AS) * CLng(Me!AP)

Siehe auch das kleine Bsp. im Anhang


[Anhang gelöscht durch Administrator]

Ilias

Hi database,

Danke für Deine Antwort.
Stundensatz ist bei mir "Zahl"

Dein Code hat leider die gleiche Ergebnis. Ich weiß nicht ob es eine Rolle spielt, aber! wenn ich Fehler ignoriere, indem ich auf "Beenden" gehe, dann rechnet sich mein Feld genau so, wie ich das wollte.. nur blöd ist, dass diese Fehlermeldung kommt :-(

Gruß,
Ilias

database

Schau dir mal das Beispiel an!
Setze in DEINEM Beispiel einen Haltepunkt an den Beginn der Function und spring mit F8 in den Code, schau mal wo es hakt

Ilias

jetzt muss ich blöd fragen wie es geht? :-(

Sorry, bin ganz neu hier in ACCESS Welt...

Ilias

es hack beim versuch mit Me!AS oder Me!AP zu multiplizieren...

Funktion:
Me.Aufwand_AK = DLookup("[Stundensatz]", "tbl_Step4", "[ID]=" & Me.cmb_Arbeitskraft)

gibt im Feld Aufwand_AK genau den richtigen Stundensatz,
wenn ich versuche
Me.Aufwand_AK = DLookup("[Stundensatz]", "tbl_Step4", "[ID]=" & Me.cmb_Arbeitskraft) * 2
dann kommt das doppelte heraus,
warum kann ich nicht mit Me!AP oder mit Me!AS multiplizieren?

Danke,
Ilias

database

Die Felder AS und AP existieren auf deinem Formular - kontrolliere bitte mal ob die auch wirklich so heißen - eine beliebte Fehglerquelle.

Schreibe den Teil noch mal neu DLookup("[Stundensatz]", "tbl_Step4", "[ID]=" & Me.cmb_Arbeitskraft) * Me.AS * Me.AP
... und verwende statt der Rufzeichen Punkte, so wie ich es geschrieben habe. Im Kontext müsste dann der Steuerelementname 'AS' bzw. AP uftauchen - wenn die Felder unter diesem Namen vorhanden sind.

Sonst kann ich dir nur anbieten eine Kopie deine DB hochzuladen (komprimieren/reparieren und dann zippen)

DF6GL

Hallo,

Du musst besser auf die Datentypen acht geben...


"Zahl" allein reicht nicht. Wenn Du mit Dezimalzahlen rechnen willst, müssen die Datentypen Double (Gleitkomma) oder Währung (Currency, Festkomma) lauten.

Zudem dürfen natürlich Textfelder nicht mit einem Leerstring ("") "genullt" werden:


Private Function Arbeitsaufwand()
Me!Aufwand_AK = nz(DLookup("[Stundensatz]", "tbl_Step4", "[ID]=" & Me!cmb_Arbeitskraft),0) * nz(Me!AS ,0) * nz(Me!AP,0)
End Function

Ilias

Das war's...

"Zudem dürfen natürlich Textfelder nicht mit einem Leerstring ("") "genullt" werden:"

Vielen Dank!

database

So war's in meinem Beispiel dargestellt. ;)