Neuigkeiten:

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

Mobiles Hauptmenü

Excel-Formel in Access darstellen

Begonnen von lutschi83, November 23, 2016, 08:45:01

⏪ vorheriges - nächstes ⏩

lutschi83

Hallo Leute,
ich habe folgendes Problem. Ich bilde eine Excel-Datei nun in Access ab, da es zu viele Datensätze werden und auch um Auswertungen etc. machen zu können. Nun habe ich leider folgendes Problem, dass in Excel bei bestimmten Zellen Formel hinterlegt sind. Ein paar konnte ich selbst lösen, aber folgende übersteigt irgendwie meinen Horizont :-).
=WENN(I78>0;WENN(J78="AIR";I78+7-REST(I78+3;7);WENN(J78="SEA";I78+7-REST(I78+3;-42);"")))
Zur Erläuterung:
Zelle 78 ist in der Datenbank "ETD_from_BA", J78 ist in der Datenbank "delivery_method". Delivery_Method ist ein kombinationsfeld mit der Auswahl "Sea" und "Air". In "ETD_from_BA" muss man ein Datum eingeben, kann aber auch Text sein. Wenn Text, dann soll das Feld "ETA_in_TYO" leer bleiben, ansonsten soll er die Formel berechnen und den Wert in das Feld "ETA_in_TYO" schreiben.

Ich hoffe man kann das irgendwie darstellen... :-[


Joe0301

Hallo,
Ich verstehe zwar nicht warum man da auch Text eingeben können soll, aber erstmal unwichtig.
    Ich denke es ist mit einer If Bedingung möglich
    wenn Datum zwischen Grenzdatum und anderes Grenzdatum liegt dann
   Feld = berechnungsformel
   sonst
   Feld = leer
   end if

Sobald igrendein text drin steht sollte die Bedingung dann False werden.
Einfach so aus dem Bauch heraus, Könnte eventuell Probleme mit dem Format des Datums geben, denn da gibt es auch viele eingabevarianten.

Warum muss denn auch Text eingegeben werden können ?  Vielleicht kann man das auch anders lösen um ein reines datumfeld zu schaffen. (was logischer wäre)

MfG
Joe0301




lutschi83

#2
Ja, ich hab mir da jetzt auch Gedanken gemacht. Ich ändere es auf ein Datumsfeld.
Aber wie sieht der Code dann genau aus für die Formel?

Wenn([deliver_method]="Air";([etd_from_ba]+7)-(([etd_from_ba]+3) Mod 7);([etd_from_ba]+7)-(([etd_from_ba]+3) Mod -42))

Aber wo und wie lasse ich diese Prozedur starten?

Joe0301

Dafür werden ein paar mehr Informationen über den Aufbau der Datenbank benötigt.
-soll es nur im Formular berechnet und angezeigt werden ?
oder nur in der Tabelle und später angezeigt werden ?
-geht es nur um neue einträge
- werden vorhandene einträge geändert
- Du sprichst von zwei datenbänken wie sind die verbunden.



lutschi83

Es ist ein Endlosformular und der Wert wird in die Tabelle "tbl_order_entry" eingetragen.
In diesem Endlosformular wähle ich dann für den jeweiligen Datensatz aus ob es per "air" oder "Sea" verschickt wird.
Wenn es via "air" verschickt wird, dann folgende formel: ([deliver_method]="Air";([etd_from_ba]+7)-(([etd_from_ba]+3) Mod 7).
Wenn es via "sea" verschickt wird, dann folgende formel: ([etd_from_ba]+7)-(([etd_from_ba]+3) Mod -42))
Ich habe es so versucht:
If IsNull(test = [Delivery_Method] = "AIR") = True Then

test = ([ETD_from_BA] + 7) - (([ETD_from_BA] + 3) Mod 7)

Else

test = ([ETD_from_BA] + 7) - (([ETD_from_BA] + 3) Mod -42)

End If

Me.ETA_TYO = test

End Sub


Und im Feld wird auch was berechnet, wenn "air" ausgewählt wird, aber bei "sea" kommt nichts...

Lachtaube

Im Steuerelementinhalt eines Textfelds (in einer Zeile):=[ETD_from_BA] + 7 - Wenn([Delivery_Method] = "AIR";
                          ([ETD_from_BA] + 3) Mod 7;
                          ([ETD_from_BA] + 3) Mod 42)
Grüße von der (⌒▽⌒)

Beaker s.a.

Moin,
Wie wäre es denn, aus dem Nachschlagefeld eine echte 1:n Beziehung zu
machen, und die Werte 7 und -42 in der dazu nötigen Tabelle mitzuführen?
Zitatwähle ich dann für den jeweiligen Datensatz aus ob es per "air" oder "Sea" verschickt wird.
Vermutlich mit einem Kombi.
Dieses um eine Spalte erweitert entfällt der If-Konstrukt
test = ([ETD_from_BA] + 7) - (([ETD_from_BA] + 3) Mod Me!DeinKombi.Column(2))
.Column(2) = dritte Spalte bei "ID, Text, Wert"
Wenn du das direkt in die ControlSource schreiben willst (s. #5), musst du "Me" in den
vollständigen Formularbezug auflösen
Formulare!DeinForm!


gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)