none
InputBox Access 2003 mit Cancel/Abbrechen

    Frage

  • Hallo

    ich möchte eine Inputbox haben in der ich den Button Cancel/Abrechen abfangen kann

    wenn ich Cancel/Abrechen klicke hat ATR den wert 0 springt aber nicht in Case 0 rein

    auch nicht in Case Else

    Case Cancel habe ich nur zur Info drin weil dort soll er eigentlich bei Abbruch rein gehen nur weiss ich nicht was wie ich Cancel abfangen kann

    Dim ATR As Double
    Select Case ATR = InputBox("Auftragsrabatt", "Titel", 0)

        Case Cancel
       
        Case 0
       
        Case Else

    End Select

    Mittwoch, 23. Januar 2013 12:16

Antworten

  • Hallo MCDPone

    "MCDPone" schrieb im Newsbeitrag news:824492dc-4cf9-4b5e-9535-5fdb1f7e0645@communitybridge.codeplex.com...

    ich möchte eine Inputbox haben in der ich den Button Cancel/Abrechen
    abfangen kann
    wenn ich Cancel/Abrechen klicke hat ATR den wert 0 springt aber nicht
    in Case 0 rein
    auch nicht in Case Else
    Case Cancel habe ich nur zur Info drin weil dort soll er eigentlich bei
    Abbruch rein gehen nur weiss ich nicht was wie ich Cancel abfangen kann
    Dim ATR As Double
    Select Case ATR = InputBox("Auftragsrabatt", "Titel", 0)
       Case Cancel
       Case 0
       Case Else
    End Select

    Dein Select Statement wird True oder False zurückgeben, weil das = nicht als Zuweisung, sondern als Vergleich interpretiert wird.
    ATR hast Du gleich vorher deklariert, es dürfte also 0 (Double) drin haben. Wenn der Wert von ATR gleich dem Wert der InputBox() Rückgabe Funktion ist, dann ist das SELECT Statement True (-1). Nun ist aber der Wert der InputBox im Falle des Abbrechens ein leerer String. Dies zwingt Access dazu auch den Inhalt von ATR auf String umzuwandeln, damit verglichen werden kann, also wird daraus "0" werden. Und damit wird Dein SELECT CASE Statement zu

    SELECT CASE ("0" = "")

    Dies wird also False zurück geben. Und wieso springt er nicht in 0 rein? Ganz einfach: Du verwendest die Variable Cancel, welche oftmals als Parameter für Ereignisprozeduren reserviert ist. Wenn Cancel = False ist (das ist der Default), wird das Select Statement also in den Cancel Zweig reinspringen und damit hat sichs.

    Was Du machen möchtest ist vermutlich Folgendes (ungetestet)

    Dim strRetValue As String
    Dim ATR as Double
    strRetValue = InputBox("Auftragsrabatt", "Titel", 0)
    if strRetValue = "" Then 'Abbrechen gedrückt oder nichts eingegeben
     ATR = 0
    Else
     if not IsNumeric(ATR) Then 'es wurde keine Zahl eingegeben
         ATR = 0 'setzen wir ATR mal auf 0, allenfalls wäre hier der Abbrechen 
    Zweig richtiger
     Else
         ATR = CDbl(strRetValue) 'es wurde eine Zahl einegeben
         'Hier kannst Du nun noch auf Eingabe 0 prüfen
     End If
    End If

    Und nun kannst Du, wenn es noch nötig ist, das Case Statement auf ATR ausführen. Ich denke allerdings, dass sich das damit erledigt hat.
    Gruss
    Henry

    • Als Antwort markiert MCDPone Donnerstag, 24. Januar 2013 16:04
    Donnerstag, 24. Januar 2013 02:09

Alle Antworten

  • Hallo MCDPone,

    MCDPone schrieb folgendes:

    Hallo

    ich möchte eine Inputbox haben in der ich den Button Cancel/Abrechen abfangen kann

    wenn ich Cancel/Abrechen klicke hat ATR den wert 0 springt aber nicht in Case 0 rein

    auch nicht in Case Else

    Case Cancel habe ich nur zur Info drin weil dort soll er eigentlich bei Abbruch rein gehen nur weiss ich nicht was wie ich Cancel abfangen kann

    Dim ATR As Double
    Select Case ATR = InputBox("Auftragsrabatt", "Titel", 0)

        Case Cancel
            Case 0
            Case Else

    End Select

    Die Rückgabe aus der Inputbox ist ein STRING.

    Dim ATR As String
    Select Case ATR = InputBox("Auftragsrabatt", "Titel", "0")
        Case "0"
       
        Case Else
            ' Sontige Werte
    End Select

    Gruß
    Gunter


    Access FAQ: http://www.donkarl.com

          http://www.avenius.de - http://www.AccessRibbon.de
    http://www.ribboncreator.de - http://www.ribboncreator2010.de

    Mittwoch, 23. Januar 2013 12:38
    Moderator
  • OK - Danke

    aber wenn ich den wert "0" benötige aber auch wissen möchte wurde Abgebrochen

    sprich wurde "0" übergeben mit Enter oder OK Button oder wurde der Cancel Button geklickt

    vorgabe soll aber "0" sein

    • Bearbeitet MCDPone Mittwoch, 23. Januar 2013 14:40
    Mittwoch, 23. Januar 2013 14:35
  • Hallo MCDPone,

    MCDPone schrieb folgendes:
    ...
    Wenn Du "Abrechen" wählst wird von der Inputbox ein leer String
    zurüchgeben ("").

    Gruß
    Gunter


    Access FAQ: http://www.donkarl.com

          http://www.avenius.de - http://www.AccessRibbon.de
    http://www.ribboncreator.de - http://www.ribboncreator2010.de

    Mittwoch, 23. Januar 2013 14:55
    Moderator
  • Sieht jetzt so aus

    Dim ATR As String
    Select Case ATR = InputBox("Vorgangsrabatt", "Titel""0")
        Case ""
       
        Case "0"
       
        Case Else

    End Select

    bei OK oder Enter springt er jetzt in Case "" rein und nicht in Case "0" obwohl 0 als STandard gesetzt ist und beim aufruf auch die 0 in der Inputbox angezeigt wird

    Mittwoch, 23. Januar 2013 15:18
  • Hallo MCDPone,

    MCDPone schrieb folgendes:

    Sieht jetzt so aus

    Dim ATR As String
    Select Case ATR = InputBox("Vorgangsrabatt", "Titel <http://www.csr-software.de/>""0")
        Case ""
            Case "0"
            Case Else

    End Select

    bei OK oder Enter springt er jetzt in Case "" rein und nicht in Case "0" obwohl 0 als STandard gesetzt ist und beim aufruf auch die 0 in der Inputbox angezeigt wird

    Dann drösel es auf und kontrolliere den Inhalt der Variable:

    [code]
    Dim ATR As String
    ATR = InputBox("Vorgangsrabatt", "Titel","0")

    MsgBox ">" & ATR & "<"
    'bzw:
    Debug.Print ">" & ATR & "<"

    Select Case ATR
        Case ""
            Case "0"
            Case Else

    End Select
    [/code

    Gruß
    Gunter


    Access FAQ: http://www.donkarl.com

          http://www.avenius.de - http://www.AccessRibbon.de
    http://www.ribboncreator.de - http://www.ribboncreator2010.de

    Mittwoch, 23. Januar 2013 15:24
    Moderator
  • OK danke

    Dim ATR As String
    Select Case ATR = InputBox("Vorgangsrabatt", "Titel","0")
          Case ""

          Case "0"

          Case Else

    End Select

    geht nicht

    Dim ATR As String
    ATR = InputBox("Vorgangsrabatt", "Titel","0")

    Select Case ATR  

            Case ""

            Case "0"

            Case Else

    End Select

    geht wiederrum

    also Problem gelöst - verstehe nicht ganz wieso


    • Als Antwort markiert MCDPone Mittwoch, 23. Januar 2013 15:38
    • Bearbeitet MCDPone Mittwoch, 23. Januar 2013 16:02 w
    • Tag als Antwort aufgehoben Gunter AveniusModerator Mittwoch, 23. Januar 2013 16:09
    Mittwoch, 23. Januar 2013 15:38
  • Hallo MCDPone

    "MCDPone" schrieb im Newsbeitrag news:824492dc-4cf9-4b5e-9535-5fdb1f7e0645@communitybridge.codeplex.com...

    ich möchte eine Inputbox haben in der ich den Button Cancel/Abrechen
    abfangen kann
    wenn ich Cancel/Abrechen klicke hat ATR den wert 0 springt aber nicht
    in Case 0 rein
    auch nicht in Case Else
    Case Cancel habe ich nur zur Info drin weil dort soll er eigentlich bei
    Abbruch rein gehen nur weiss ich nicht was wie ich Cancel abfangen kann
    Dim ATR As Double
    Select Case ATR = InputBox("Auftragsrabatt", "Titel", 0)
       Case Cancel
       Case 0
       Case Else
    End Select

    Dein Select Statement wird True oder False zurückgeben, weil das = nicht als Zuweisung, sondern als Vergleich interpretiert wird.
    ATR hast Du gleich vorher deklariert, es dürfte also 0 (Double) drin haben. Wenn der Wert von ATR gleich dem Wert der InputBox() Rückgabe Funktion ist, dann ist das SELECT Statement True (-1). Nun ist aber der Wert der InputBox im Falle des Abbrechens ein leerer String. Dies zwingt Access dazu auch den Inhalt von ATR auf String umzuwandeln, damit verglichen werden kann, also wird daraus "0" werden. Und damit wird Dein SELECT CASE Statement zu

    SELECT CASE ("0" = "")

    Dies wird also False zurück geben. Und wieso springt er nicht in 0 rein? Ganz einfach: Du verwendest die Variable Cancel, welche oftmals als Parameter für Ereignisprozeduren reserviert ist. Wenn Cancel = False ist (das ist der Default), wird das Select Statement also in den Cancel Zweig reinspringen und damit hat sichs.

    Was Du machen möchtest ist vermutlich Folgendes (ungetestet)

    Dim strRetValue As String
    Dim ATR as Double
    strRetValue = InputBox("Auftragsrabatt", "Titel", 0)
    if strRetValue = "" Then 'Abbrechen gedrückt oder nichts eingegeben
     ATR = 0
    Else
     if not IsNumeric(ATR) Then 'es wurde keine Zahl eingegeben
         ATR = 0 'setzen wir ATR mal auf 0, allenfalls wäre hier der Abbrechen 
    Zweig richtiger
     Else
         ATR = CDbl(strRetValue) 'es wurde eine Zahl einegeben
         'Hier kannst Du nun noch auf Eingabe 0 prüfen
     End If
    End If

    Und nun kannst Du, wenn es noch nötig ist, das Case Statement auf ATR ausführen. Ich denke allerdings, dass sich das damit erledigt hat.
    Gruss
    Henry

    • Als Antwort markiert MCDPone Donnerstag, 24. Januar 2013 16:04
    Donnerstag, 24. Januar 2013 02:09
  • Hallo MCDPone

    "MCDPone" schrieb im Newsbeitrag news:ecaed209-ab78-430c-b2dc-5ee6ff7edec5@communitybridge.codeplex.com...

    also Problem gelöst - verstehe nicht ganz wieso

    Siehe mein Posting. Du kannst keine Zuweisung in einem Case Statement machen. Und was hier zuschlägt ist die implizite Datentypen Konversion auf den "schwächsten" Datentypen (String wegen der Inputbox()) und ein anschliessender String-Vergleich (= ist hier ein Vergleichs Parameter), der immer in True/False enden wird.

    Es gibt schon Gründe, wieso in anderen Programmiersprachen ein unerschiedlicher Operator für den Vergleich (==) und für die Zuweisungen (:=) verwendet wird. Genau aus dem Grund, dass eben sonst nicht immer gerade auf den ersten Blick sichtbar wird, ob es sich nun hzier um einen Vergleich oder eine Zuweisung handelt.

    Gruss
    Henry

    Donnerstag, 24. Januar 2013 02:14