Hallo zusammen,
ich habe folgenden Ausgangssituation:
In einem Eingabeformular wir in ein Textfeld eine festgelegte Kombination geschrieben.
Bsp.: 1/2/3/4*5/1*11/3*6 oder A10/5*S1/B11/2*F2
Jede Zahl ist einmalig und entspricht den festgelegten Werten aus einer Tabelle
Tabelle1:
1 = 1€
2 = 2€
usw........
jetzt brauche ich eine Funktion, die auf Knopfdruck prüft, wie das Ergebnis des Textinhaltes in € ist.
Dieser Wert soll dann in die Tabelle geschrieben werden.
Ich habe versucht, das Textfeld auszuwerten komme aber nicht weiter.
Vom Prinzip muss die Funktion prüfen welche Zahl ist enthalten, die mit 5* zusätzlich noch Multiplzieren und dann aus der Tabelle die festgelegten Preise zusammenzählen.
Theorie soweit aber ich bekomme es einfach nicht hin........
Hoffe hier kann mir jemand den entscheidenden Tip geben.
Danke schon mal
Grüsse aus HD
Hallo,
ich verstehe nur "Bahnhof" und vermute, dass ich damit nicht allein dastehe.
Vielleicht könntest du die Sache noch einmal etwas präziser und weniger konfus formulieren?
Ich versuch mal licht ins dunkle zu bringen: 8)
Ich habe eine Tabelle in der in einem Textfeld folgender Inhalt steht:
1/3/5/1*7/60*6/
Das muss leider so sein und kann nicht anders eingegeben werden, bzw. wird so vorgegeben.
jetzt muss ich folgendes Berechnen
Es gibt eine weitere Tabelle in der definiert ist was den Zahlen zwischen den // entspricht.
1=100
3=50
5=10
7=15
6=1
1* oder 60* ist der Multiplikator.
Steht kein Multiplikatior ist immer ein mal.
Jetzt möchte ich aus dem String oben die Summe errechnen (nur bei bedarf)
Das wären nach dem Beispiel oben 235.........
Ich hoffe das war jetzt einfacher......
Gruß aus HD
Sorry, aber das ist für mich immer noch nicht nachvollziehbar.
ZitatDas wären nach dem Beispiel oben 235
Kannst du das bitte anhand eines konkreten Beispiels schrittweise erläutern?
Hi,
siehe Anhang.
Hilft das?
Harald
Sorry, aber jetzt verstehe ich dein Problem ehrlich gesagt überhaut nicht mehr.
Zitatjetzt brauche ich eine Funktion...
Die ist ja offensichtlich bereits vorhanden.
ZitatDieser Wert soll dann in die Tabelle geschrieben werden.
Warum? Dieser Wert kann doch jederzeit aktuell berechnet werden.
Hallo zusammen,
erst mal danke für die Antworten, leider ist das nicht das was ich brauche.
Ich habe schnell ein Beispiel zusammengeklckt um es besser zu beschreiben.
Tabelle1: Hier gibt es eine Spalte (LP) mit Zahlenkombinationen
Tabelle2: Hier wird definiert welcher Betrag zu jeder Zahl zugeordnet wird.
Jetzt soll die im Formular befindliche Schaltfläche folgendes machen:
Schauen welche Zahlen zwischen den / vorhanden ist
die Zahlen einzeln zwischenspeichern
Aus der Tabelle 2 den Betrag zu den Zahlen holen
Ergebnis Anzeigen (Im ungebundenen Feld)
Gruß Stefan
Hi,
jetzt kann ich Dein Unverständnis nicht verstehen. :-[
In meinem Beispiel gibt es eine Tabelle mit einem Feld, das Zahlenkombinationen - wie im Anfangsbeitrag vorgegeben - enthalten kann.
Weiterhin gibt es eine Tabelle, die eine Übersetzung in der Art 6=1 auflistet.
Dann gibt es eine Abfrage, die eine Public-Function aufruft, die das Zahlen-Kauderwelsch in eine Summe überführt.
Was hindert Dich daran, in einem Formular einen Button zu haben, bei dem diese Public Function mit Übergabe des aktuellen Datensatzes (bzw. Teile davon) aufgerufen wird?
Das Speichern in einer Tabelle hatte ich in meinem Beispiel bewußt nicht gemacht, da es (meistens) nicht ratsam ist, berechnete Werte (in diesem Fall deine Summe) redundant zu speichern.
Harald
Nachtrag:
Die Aufgabe "die Zahlen einzeln zwischenspeichern" ist jetzt neu hinzugekommen, gell? ;D
Hallo bahasu,
sorry, aber ich war heute morgen wohl noch nicht bei der sache :)
das ist natürlich genau der Ansatz den ich brauche...........
Ich sehe nur nicht wo du die "Preise" herholst aber sonst ist das schon genau der weg den ich suche :)
Danke schon mal jetzt verusche ich das mal zum laufen zu bringen.......
gruß Stefan
Hallo,
Du hast zwar oben geschrieben, dass es so vorgeben wird, aber trotzdem der Hinweis, dass das in eine Datenbank so nicht gemacht wird. Hier sollten für jeden Eintrag ein Feld verwendet werden in dem man auch die Schlüsselzahlen speichert. Das zerpflücken des Feldes entfällt dann.
Der jetzige Aufbau verstößt bereits gegen die 1.Normalform (=atomare Inhalte).
Nur noch als Hinweis.
Hi,
das "Zahlenkauderwelsch" steht in meinem Beispiel in der Tabelle "Zahlen" im Feld "Zahlen_Text".
Vermutlich bist Du aber eher an der Abfrage in meinem Beispiel interessiert: Dort wird die Public Function aufgerufen und es wird das "Zahlenkauderwelsch" als Parameter übergeben.
Wenn Du in eine Abfrage oder in einem Steuerelement eines Formulars diese Funktion einträgst und Deine "Preise" (?) übergibst, sollte es hinkommen.
Allerdings müssen in der Public Function die Datenquelle und die Namen an Deine "Umwandlungstabelle" (das ist wo 6=1 steht ;D) angepasst werden (das ist da, wo "dlookup" steht ;D).
Harald
@MzKlMu
Ich gebe dir vollkommen recht, muss aber mit dem arbeiten was mir aus einem anderen Programm vorgegeben wird.
@bahasu
Danke für den Ansatz. Das war genau was ich brauche, jedoch möchte ich keine durchgehende berechnung sondern nur nach bedarf.
So wie n meinem Beispiel: Erst wenn ich den Button Berechnen betätige soll er mir das Ergebnis in in ein ungebundenes Formularfeld eintragen.
Jetzt leider noch ein weiteres Problem. Es kann zukünftig auch vorkommen, das an Stelle 1/2/ usw. A10/B20 genutzt wird.
Dazu kann man die Tabelle Umwandlung (alt) auf Textfeld ändern, jetzt bekomme ich aber eine Fehlermeldung in der Schleife
If InStr(TeilString, "*") = 0 Then
ZwischenSumme = ZwischenSumme + DLookup("Neu", "Umwandlung", "Alt=" & Val(TeilString))
Danke noch mal für die Hilfe
Gruß Stefan
Hi,
Knackpunkt ist wohl: val (A10)
Public Function fSumme(Eingabe As String) As Integer 'Eingabe = 1/3/5/1*7/60*6/
Dim ZwischenSumme As Long
Dim TeilString As String
Dim RestString As String
If Nz(Eingabe, "") > "" And InStr(Eingabe, "/") > 0 Then
ZwischenSumme = 0
RestString = Eingabe
Do Until RestString = ""
TeilString = Left(RestString, InStr(RestString, "/") - 1)
If InStr(TeilString, "*") = 0 Then
ZwischenSumme = ZwischenSumme + DLookup("Neu", "Umwandlung", "Alt='" & TeilString & "'")
Else
ZwischenSumme = ZwischenSumme + Val(Left(TeilString, InStr(TeilString, "*") - 1)) * DLookup("Neu", "Umwandlung", "Alt = '" & Mid(TeilString, InStrRev(TeilString, "*") + 1) & "'")
End If
RestString = Mid(RestString, InStr(RestString, "/") + 1)
Loop
fSumme = ZwischenSumme
End If
End Function
Habe bei den ehemaligen val-Stellen einige Hochkomma spendiert.
Ohne Gewähr, da ich keine Zeit zum Testen habe.
Wäre leichter gewesen, wenn von Anfang an die möglichen Konstellationen bekannt gewesen wären. >:(
Harald
Hallo Harald,
erst noch mal vielen Dank, das funktioniert alles super, auch mit (A10).
Hatte das aber in meinem ersten Post auch beschrieben :)
Jetzt habe ich nur noch ein kleine Problem, das ich noch lösen möchte.
Derzeit ist es ein public funktion und wird also immer durchgeführt.
Ich möchte das aber als Private Sub Befehlxx_Click() ausführen und das ergebnis in einem ungebundenen Textfeld im Formular anzeigen.
Kannst du mir da noch den entscheidenden hinweis geben wie ich das umsetzen kann.
Danke schon mal vorab.
Gruß Stefan
Hi,
freut mich.
Kannst Du eine abgespeckte Version mit wenigen Spieldaten im access 2003-Format als zip-Datei zur Verfügung stellen?
Hätte den Vorteil, dass ich Deine Konstellation besser sehe.
Harald
Hallo Harald,
hier eine einfache Version.
Die im frm erstellte Schaltfläche soll das Ergebnis im ungebundenen Feld anzeigen.
Speichern in einer Tabelle ist nicht notwendig.
Gruß Stefan
Hi,
siehe Anhang.
Bitte keine Leerzeichen oder sonstigen Sonderzeichen als Bezeichner verwenden: siehe "Preis_ LP"
Habe dem Button im Formular eine VBA-Zeile verpasst, in der die Public Function (siehe Modul) aufgerufen wird.
Zugewiesen wird das Umrechnungsergebnis (diese habe ich nicht mehr kontrolliert) dem ungebundenen Steuerelement, dem ich die Bezeichnung "Ergebnis" gegeben habe. Dieses Ergebnis-Feld wird bei jedem Datensatzwechsel auf "" gesetzt, damit keinen alten Werte rumgeistern (siehe Ereignis "Beim Anzeigen").
Harald
Hallo,
mein Senf dazu.. 8)
Hallo Harald,
funktioniert super, hat zwar ein paar kleine macken in der live version ist aber auch gut,
(wenn der Textfeldinhalt fehler enthält, bsp: es fehlt am ende / oder xx*6 oder eine nicht in der tabelle umrechnung enthaltene kombi) damit prüfe ich gleich ob auch alles korrekt geschrieben ist :)
Danke für die schnelle und vor allem auch gute hilfe.
@GF6GL
auch ein Ansatz, jedoch wollte ich es vermeiden das immer auszuführen, deshalb die Schaltfläche, danke für die mühe :)
Gruß Stefan