Neuigkeiten:

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

Mobiles Hauptmenü

Preis/Zeit in Intervallen

Begonnen von PoweredbyApple, März 03, 2013, 19:39:25

⏪ vorheriges - nächstes ⏩

PoweredbyApple

Servus Leute, ich habe folgendes Problem:
Ich habe ein Formular erstellt, mit dem ein Preis auf Grund von verstrichender Zeit ausgegeben werden soll.
Das Zeitfeld heißt: "DateTime" & das Preisfeld: "fnPreis". Es gibt einen Grundpreis von 2.5€. Jetzt sollen alle 10 Minuten 1.5€ dazu kommen. Beispiel:
00:01-00:10 (fnPreis = 2.5€), 00:11-00:20 (fnPreis = 4€), 00:21-00:31 (fnPreis = 5.5€) und soo weiter....bis zu einer Stunde. Bei einer Stunde und mehr, sollen nur noch
1€ statt 1.5€ dazu kommen. Beispiel: 01:01-01:10 (fnPreis = 11€), 01:11-01:20 (fnPreis = 12) und das bist in die Unendlichkeit und noch weiter.
Ich habe jetzt mit Hilfe von anderen Foren bereits einen Code dafür geschrieben, der ungefähr so aussieht:

If Me!DateTime <= 60  Then
       fnPreis = 2.5 + (Me!DateTime / 10 - 1) * 1.5
   If Me!DateTime >= 60  Then
       fnPreis = 2.5 + 6 * 1.5 _
                     + (Me!DateTime / 10 - 1) * 1
End If
End If


Leider funktioniert dieser Code nicht richtig und ich weiß nicht mehr weiter.
Kann mir hier jemand vielleicht helfen?!

Mit freundlichen Grüßen,
PoweredbyApple

MzKlMu

#1
Hallo,
und warum wechselst Du jetzt das Forum?
Im anderen Forum hast Du doch geschrieben, dass es funktioniert.
Was funktioniert denn nun nicht nicht?

http://www.ms-office-forum.net/forum/showthread.php?t=297988
und hier:
http://www.office-loesung.de/ftopic578473_0_0_asc.php

PS:
Auch in diesem Forum ist Grossposting unerwünscht. Kannst Du in den Regeln nachlesen.
Und es nutzt auch nichts das Forum zu wechseln, da sind überall die gleichen Leute.
Gruß Klaus

PoweredbyApple

Ich bekomme falsche Werte.
Ich bekomme immer 0€ als Ergebnis :/

database

Hallo,

die Formel stimmt nicht ganz mit deinen Angaben überein!

Weiter muss die Bedingung zum Anfang ebenfalls auf den Umstand Rücksicht nehmen, dass du für die ersten 10 Minuten den Grundpreis rechnest!

If Me!DateTime >10 AND Me!DateTime <= 60 Then
   fnPreis = 2.5 + Int(Me!DateTime / 10) * 1.5

Zitatbis zu einer Stunde.
das geht genau bis 59 Minuten, denn deiner Angabe nach soll ab einer Stunde (also 60 Minuten) der Grundpreis 10 lauten.

Muss auch so sein sonst kommst du bei dieser Bedingung nicht ins Reine:

ZitatBeispiel: 01:01-01:10 (fnPreis = 11€),

Wenn also folgende Aussagen stimmen ...

5 Min fnPreis = 2,5
11 Min fnPreis = 4
59 Min fnPreis = 10
60 Min fnPreis = 10
61 Min fnPreis = 11
75 Min fnPreis = 12

... kannst du untenstehenden Code einsetzen.


   If Me!DateTime > 10 And Me!DateTime <= 59 Then
       fnPreis = 2.5 + (Int(Me!DateTime / 10) * 1.5)
   End If
   If Me!DateTime >= 60 Then
       fnPreis = 10 + (Int(Me!DateTime / 10) - 5) * 1
   End If
   If Me!DateTime <= 10 Then
       fnPreis = 2.5
   End If


HTH


PoweredbyApple

Endlich!! & unendlich vielen Dank!! Jetzt passt's :))) Danke Schöööööön!!

PoweredbyApple

Kann ich gleich noch eine zweite Frage stellen?!
Also, diese Rechnung die du mir eben gegeben hast, zählt für minderjährige Pilotschüler.
Diese sind über eine Tabelle in einem Kombinationsfeld in meinem Formular. Also zahlen die weniger als die volljährigen Schüler, bzw. Scheininhaber.
Diese zahlen statt 2.5€, 3.5€ mit der selben Prozedur, also immer 1.5€ dazu bis zu einer vollen Stunde, wo sie dann nur noch 1€ dazu zahlen.
Beispiel: 00:01-00:10 (fnPreis = 3.5€), 00:51-01:00 (fnPreis = 11€) & bei einer Stunde, 01:01-01:10 (fnPreis = 12€). Ich habe das jetzt mal versucht mit deiner Formel umzusetzen, aber da bekomme ich wieder nur den Standartwert raus..
If Me!DateTime > 10 And Me!DateTime <= 59 And (cmbPilot = 3 Or cmbPilot = 38 Or cmbPilot = 39 Or cmbPilot = 43) Then
        fnPreis = 2.5 + (Int(Me!DateTime / 10) * 1.5)
    End If
    If Me!DateTime >= 60 And (cmbPilot = 3 Or cmbPilot = 38 Or cmbPilot = 39 Or cmbPilot = 43) Then
        fnPreis = 10 + (Int(Me!DateTime / 10) - 5) * 1
    End If
    If Me!DateTime <= 10 And (cmbPilot = 3 Or cmbPilot = 38 Or cmbPilot = 39 Or cmbPilot = 43) Then
        fnPreis = 2.5
    End If
    If Me!DateTime > 10 And Me!DateTime <= 59 And (cmbPilot <> 3 Or cmbPilot <> 38 Or cmbPilot <> 39 Or cmbPilot <> 43) Then
        fnPreis = 3.5 + (Int(Me!DateTime / 10) * 1.5)
    End If
    If Me!DateTime >= 60 And (cmbPilot <> 3 Or cmbPilot <> 38 Or cmbPilot <> 39 Or cmbPilot <> 43) Then
        fnPreis = 11 + (Int(Me!DateTime / 10) - 5) * 1
    End If
    If Me!DateTime <= 10 And (cmbPilot <> 3 Or cmbPilot <> 38 Or cmbPilot <> 39 Or cmbPilot <> 43) Then
        fnPreis = 3.5
    End If

database

Aber bitte schön ... ::)

wichtig ist viel mehr noch dass du den Code verstehst!  ;) :D


für die neue Frage...


If Me!DateTime > 10 And Me!DateTime <= 59 And (cmbPilot = 3 Or cmbPilot = 38 Or cmbPilot = 39 Or cmbPilot = 43) Then
       fnPreis = 2.5 + (Int(Me!DateTime / 10) * 1.5)
   End If
   If Me!DateTime >= 60 And (cmbPilot = 3 Or cmbPilot = 38 Or cmbPilot = 39 Or cmbPilot = 43) Then
       fnPreis = 10 + (Int(Me!DateTime / 10) - 5) * 1
   End If
   If Me!DateTime <= 10 And (cmbPilot = 3 Or cmbPilot = 38 Or cmbPilot = 39 Or cmbPilot = 43) Then
       fnPreis = 2.5
   End If

   'ab hier darf cmbPilot nicht mehr 3 UND nicht 38 UND nicht 39 ... sein

   If Me!DateTime > 10 And Me!DateTime <= 59 And (cmbPilot <> 3 AND cmbPilot <> 38 AND cmbPilot <> 39 AND cmbPilot <> 43) Then
       fnPreis = 3.5 + (Int(Me!DateTime / 10) * 1.5)
   End If
   If Me!DateTime >= 60 And (cmbPilot <> 3 AND cmbPilot <> 38 AND cmbPilot <> 39 AND cmbPilot <> 43) Then
       fnPreis = 11 + (Int(Me!DateTime / 10) - 5) * 1
   End If
   If Me!DateTime <= 10 And (cmbPilot <> 3 AND cmbPilot <> 38 AND cmbPilot <> 39 AND cmbPilot <> 43) Then
       fnPreis = 3.5
   End If


HTH


PoweredbyApple

Achso. Danke Schön. Hm, jetzt passen die Standartwerte bei den verschiedenen Piloten. Aber die Preiswerte ändern sich nicht bei verschiedenen Zeiten.

database

#8
Da kann ich dich nur um diese Nacht Geduld ersuchen,
ich kann  mir das gerne morgen anschauen.

Jetzt gehts auf die Matratze, meine Nacht endet um 04:00  :(

aber dennoch schnell...


If Me!cmbPilot = 3 Or Me!cmbPilot = 38 Or Me!cmbPilot = 39 Or Me!cmbPilot = 43 Then

   If Me!DateTime > 10 And Me!DateTime <= 59 Then
       fnPreis = 2.5 + (Int(Me!DateTime / 10) * 1.5)
   End If
   If Me!DateTime >= 60 Then
       fnPreis = 10 + (Int(Me!DateTime / 10) - 5) * 1
   End If
   If Me!DateTime <= 10 Then
       fnPreis = 2.5
   End If

Else

   'ab hier darf cmbPilot nicht mehr 3 UND nicht 38 UND nicht 39 ... sein

   If Me!DateTime > 10 And Me!DateTime <= 59 Then
       fnPreis = 3.5 + (Int(Me!DateTime / 10) * 1.5)
   End If
   If Me!DateTime >= 60 Then
       fnPreis = 11 + (Int(Me!DateTime / 10) - 5) * 1
   End If
   If Me!DateTime <= 10 Then
       fnPreis = 3.5
   End If

End If


...versuch das noch schnell  ;)

PoweredbyApple

Nein, leider immer noch nichts. Ich danke dir aber schon mal für die ganze Hilfe. Schlaf Gut & wenn du wieder Zeit findest, dann können wir ja weiter machen.

database

#10
Hallo,

sollte eigentlich funktionieren,
ich hab das provisorisch nachgestellt - die Sprünge und Ergebnisse sollten passen!

EDIT:
Im Anhang findest du eine Beispielanwendung mit einem Formular - probier mal das aus.

[Anhang gelöscht durch Administrator]

PoweredbyApple

Ah, ich glaube jetzt weiß ich das Problem. Das Zeitfeld ist als 24 Stunden-Format ausgelegt. Das habe ich natürlich vergessen zu erwähnen. Also wird dabei  natürlich nicht die Minutenanzahl berechnet. :// Dann müsste ich ja eig. nur das Zeitfeld (Me!DateTime * 24 * 60*) rechnen oder?! Aber wie muss ich dann die größer kleiner Rechnung ändern?! If Me!DateTime > 0,167 And Me!DateTime <= 0,98 Then
       fnPreis = 2.5 + (Int((Me!DateTime * 24 * 60) / 10) * 1.5)
   End If
Etwa so, dass ich die Zeit einfach durch 60 rechne?!

database

Hallo,

wenn das heißt, dass du in DateTime die Zeit in der Form erfaßt 01:15 ...  dann


Private Sub Befehl0_Click()

Dim fnPreis As Double
Dim minuten As Long

minuten = Me.DateTime * 1440

If Me!cmbPilot = 3 Or Me!cmbPilot = 38 Or Me!cmbPilot = 39 Or Me!cmbPilot = 43 Then

    If minuten > 10 And minuten <= 59 Then
        fnPreis = 2.5 + (Int(minuten / 10) * 1.5)
    End If
    If minuten >= 60 Then
        fnPreis = 10 + (Int(minuten / 10) - 5) * 1
    End If
    If minuten <= 10 Then
        fnPreis = 2.5
    End If

Else

     If minuten > 10 And minuten <= 59 Then
        fnPreis = 3.5 + (Int(minuten / 10) * 1.5)
    End If
    If minuten >= 60 Then
        fnPreis = 11 + (Int(minuten / 10) - 5) * 1
    End If
    If minuten <= 10 Then
        fnPreis = 3.5
    End If

End If

PoweredbyApple

Richtig. Vielen Vielen Vielen Vielen Vielen Vielen Dank!! Jetzt passt alles. :))

database

Hallo,

na schön, dass es letztendlich doch noch funktioniert  ;)

Setze doch bitte den Thread in DEINEM ersten Beitrag auf 'gelöst'

DANKE