Inputbox

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Inputbox
von: Helmut
Geschrieben am: 24.11.2003 14:06:42

Hallo Leute,

weiß vielleicht jemand weiter von euch bei meinem Problemchen:

Ich möchte mit einer Inputbox eine Jahreszahl abfragen, mit einer weiteren das Monat und einer dritten den Tag.
Die 3 eingegebenen Werte werden als Variable abgelegt:

Dim Jahr, Monat, Tag
Jahr = InputBox("Bitte geben Sie das Jahr ein: ")
Monat = InputBox("Bitte geben Sie das Monat ein: ")
Tag = InputBox("Bitte geben Sie den Tag ein: ")

Ich möchte nun garantieren, dass Werte eingegeben worden sind und zwar ZAHLEN; wenn das nicht der Fall ist, soll eine Messagebox aufgehen, die sagt, dass die Eingabe leer, oder eben falsch ist und fragt ob "Makro beenden?" --> Ja, Nein-Entscheidung).
Wenn das Makro nicht beendet werden soll, dann soll VBA wieder zur jeweiligen Inputbox für die Eingabe springen.

Komme in einer Schleife nicht weiter???!!!!
Bitte euch um Hilfe!

Danke im Voraus!

Grüße, Helmut

Bild


Betrifft: AW: Inputbox
von: Nepumuk
Geschrieben am: 24.11.2003 14:28:45

Hallo Helmut,
ich habe da eine Standardroutine mit der ich alle Zahleneingaben prüfe. In den auskommentierten Zeilen sind die Parameter beschrieben.

Option Explicit
Function zahl_ok(zahl As Variant, vorkomma_bool As Boolean, vorkomma As Byte, _
    nachkomma_bool As Boolean, nachkomma As Byte, minimum As Variant, _
    maximum As Variant, minus As Boolean, plus As Boolean, Meldung As Boolean) As Boolean
'
'zahl - beinhaltet die zu prüfende Zahl
'
'vorkomma_bool - True = Anzahl der Vorkommastellen auf den Wert der Variable
'                       "vorkomma" begrenzen (max. 29)
'              - False = keine Prüfung
'
'vorkomma - 0 = keine Vorkommastellen zugelassen
'         - 1 = Vorkommastellen zugelassen ohne Prüfung
'         - 0-29 = Anzahl der durch vorkomma_bool geprüften Vorkommastellen
'
'nachkomma_bool - True = Anzahl der Nachkommastellen auf den Wert der Variable
'                       "nachkomma" begrenzen (max. 28)
'               - False = keine Prüfung
'
'nachkomma - 0 = keine Nachkommastellen zugelassen
'          - 1 = Nachkommastellen zugelassen ohne Prüfung
'          - 0-28 = Anzahl der durch nachkomma_bool geprüften Nachkommastellen
'
'minimum - "" = keine Prüfung
'        - WERT = Absolutwertprüfung (min. -79.228.162.514.264.337.593.543.950.335)
'
'maximum - "" = keine Prüfung
'        - WERT = Absolutwertprüfung (max. +79.228.162.514.264.337.593.543.950.335)
'
'minus - True = nur negative Werte zugelassen
'      - False = alle Werte zugelassen
'
'plus - True = nur positive Werte zugelassen
'     - False = alle Werte zugelassen
'
'Meldung - True = Fehlermeldung ausgeben
'        - False = Fehlermeldung unterdrücken
'
    Dim index As Integer
    On Error GoTo Fehlerausgang
    zahl = Trim(CStr(zahl))
    If Trim(CStr(zahl)) = "" Then zahl = 0
    For index = 1 To Len(CStr(zahl))
        If Not IsNumeric(Mid(CStr(zahl), index, 1)) Then
            If Mid(CStr(zahl), index, 1) <> "," And Mid(CStr(zahl), index, 1) <> "-" Then
                If Meldung Then MsgBox "Nur Zahlen, Komma und Minus verwenden.", vbExclamation, "Hinweis"
                Exit Function
            End If
        End If
    Next index
    If InStr(InStr(CStr(zahl), ",") + 1, CStr(zahl), ",") <> 0 Then
        If Meldung Then MsgBox "Nur ein Komma erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    If InStr(InStr(CStr(zahl), "-") + 1, CStr(zahl), "-") <> 0 Then
        If Meldung Then MsgBox "Nur ein Minus erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    If InStr(CStr(zahl), "-") <> 0 And Mid(CStr(zahl), 1, 1) <> "-" Then
        If Meldung Then MsgBox "Minus nur links der Zahl erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    If nachkomma = 0 And InStr(CStr(zahl), ",") <> 0 Then
        If Meldung Then MsgBox "Nachkommastellen nicht erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    zahl = CDec(zahl)
    If minus And CDec(zahl) > 0 Then
        If Meldung Then MsgBox "Positive Eingabe nicht erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    If plus And CDec(zahl) < 0 Then
        If Meldung Then MsgBox "Negative Eingabe nicht erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    If vorkomma = 0 And CDec(zahl) >= 1 Then
        If Meldung Then MsgBox "Vorkommastellen nicht erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    If nachkomma_bool And InStr(CStr(zahl), ",") <> 0 Then
        If Len(CStr(zahl)) - InStr(CStr(zahl), ",") > nachkomma Then
            If Meldung Then MsgBox "Maximal " & CStr(nachkomma) & " Nachkommastellen.", vbExclamation, "Hinweis"
            Exit Function
        End If
    End If
    If vorkomma_bool Then
        If InStr(CStr(zahl), ",") <> 0 Then
            If InStr(CStr(zahl), ",") - 1 + (CDec(zahl) < 0) > vorkomma Then
                If Meldung Then MsgBox "Maximal " & CStr(vorkomma) & " Vorkommastellen.", vbExclamation, "Hinweis"
                Exit Function
            End If
        Else
            If Len(CStr(zahl)) + (CDec(zahl) < 0) > vorkomma Then
                If Meldung Then MsgBox "Maximal " & CStr(vorkomma) & " Vorkommastellen.", vbExclamation, "Hinweis"
                Exit Function
            End If
        End If
    End If
    If minimum <> "" Then
        If CDec(zahl) < CDec(minimum) Then
            If Meldung Then MsgBox "Kleinste mögliche Eingabe ist " & CStr(minimum), vbExclamation, "Hinweis"
            Exit Function
        End If
    End If
    If maximum <> "" Then
        If CDec(zahl) > CDec(maximum) Then
            If Meldung Then MsgBox "Größte mögliche Eingabe ist " & CStr(maximum), vbExclamation, "Hinweis"
            Exit Function
        End If
    End If
    zahl_ok = True
    Exit Function
Fehlerausgang:
    If Err.Number = 6 Then
        If Meldung Then MsgBox "Eingegebene Zahl zu groß.", vbExclamation, "Hinweis"
    ElseIf Err.Number = 13 Then
        If Meldung Then MsgBox "Bitte eine Zahl eingeben.", vbExclamation, "Hinweis"
    Else
        If Meldung Then MsgBox "Fehler " & Err.Number & " - " & Err.Description, vbCritical, "Hinweis"
    End If
End Function


Code eingefügt mit: Excel Code Jeanie

Gruß
Nepumuk


Bild


Betrifft: AW: Inputbox
von: Martial
Geschrieben am: 24.11.2003 14:55:12

Hi Helmut

wenn dir eine kurze Variante reicht, dann kannst du es so machen:
d ist als "Date" definiert und gibt einen Fehler, wenn kein korrektes Datum eingegeben wurde. Minimal bzw. Maximalwerte musst du halt selber abfangen...


Sub Versuch()
Dim Jahr, Monat, Tag
Dim d As Date
On Error GoTo ERR
Jahr = Inputbox("Bitte geben Sie das Jahr ein: ")
Monat = Inputbox("Bitte geben Sie das Monat ein: ")
Tag = Inputbox("Bitte geben Sie den Tag ein: ")
d = Tag & "." & Monat & "." & Jahr
MsgBox d
Exit Sub
ERR:
MsgBox "Falsches Datum"
Call Versuch
End Sub



Gruss, Martial


Bild


Betrifft: AW: Inputbox
von: Helmut
Geschrieben am: 24.11.2003 16:03:19

Hallo Martial,

prinzipiell reicht mir deine kurze Variante sehr; die lange von Nepomuk (trotzdem Danke!)
verstehe ich nicht und läuft überhaupt nicht bei mir.
So ganz funktioniert das aber trotzdem nicht wie ich mir das vorgestellt habe; ich benötige das auch für allgemeinere Abfragen.
Genauer:
Ich möchte 3 Inputboxen öffnen lassen, die jeweils eine Zahl abfragen (am Besten nur vorgegebene Werte möglich, wie z.B. in einem Kombinationsfeld!, weil ich hier Falscheingaben vermeiden muß; wie kann ich Vorgaben festlegen? Eingaben einschränken?). Diese Zahlen müssen nicht unbedingt ein Datum ergeben, können aber wie ein Datum aussehen (sorry, war nicht ganz präzise beim ersten Mail von mir erklärt)!
Diese 3 Variablen (z.B. V1, V2 und V3) möchte ich dann hernehmen, um ein File mit dem Namen V1_V2_V3.xls zu öffnen (Wie geht das? File ist vorhanden!!!; besser wäre aber eine Abfrage ob es sicher vorhanden ist), um dort Werte in ein Tabellenblatt zu kopieren (Wie geht das?).
Danach wird das File V1_V2_V3.xls gespeichert und geschlossen (Wie geht das?).

Ich hoffe du (ihr) kannst (könnt) mir weiterhelfen!

Danke im Voraus!

Gruß, Helmut


Bild


Betrifft: AW: Inputbox
von: Martial
Geschrieben am: 24.11.2003 16:43:51

Helmut, du verwirrst mich ;-)

Jetzt bin ich mir nicht mehr sicher, was der Benutzer nun eingeben darf und was nicht...

Wenn nur einige Eingaben möglich sein sollen, dann mach es doch mit einem Kombinationsfeld....

Wenn es doch sehr viele Ganzzahlen sind, dann kannst du mit einer Krücke abchecken. Der Datenwert Integer lässt nur Ganzzahlen zu (nichts anderes). Irgendwelche Maximal/Minimalwerte dann mit If-Bedingungen abfragen:

---------------------------------
Dim Jahr As Integer, Monat As Integer, Tag As Integer
Dim Jahr1, Monat1, Tag1

On Error GoTo ERR
Jahr1 = Inputbox("Bitte geben Sie das Jahr ein: ")
Monat1 = Inputbox("Bitte geben Sie das Monat ein: ")
Tag1 = Inputbox("Bitte geben Sie den Tag ein: ")

Jahr = Jahr1
Monat = Monat1
Tag = Tag1

Exit Sub

ERR:
MsgBox "Falsche Eingabe"
--------------------------------------

Wenn es noch was anderes ist, dann musst du halt mit mehr Informationen herausrücken oder Beispiele bringen.

Um später die Arbeitsmappe zu öffnen, nimmst du
Workbooks.Open "C:\DateiPfad\deinFile.xls"
Fehler ebenfalls mit "on error goto..." abfangen

zum Schliessen
workbooks("deinFile").close SaveChanges:=true

Schau dir die einzelnen Teile in der Hilfe genauer an


Bild


Betrifft: AW: Inputbox
von: Nepumuk
Geschrieben am: 24.11.2003 18:11:55

Hallo Helmut,
ich hatte vergessen, das s in Excel97 den Datenty Byte noch nicht gab. Und ich glaube Dezimal auch nicht. Ich habe es dir mal angepasst. Versuch es jetz mal. Die Zahlen lassen sich ganz einfach begrenzen. Das siehst du bei der Jahreseingabe. Die ist auf 2000 bis 2099 begrenzt.

Option Explicit
Public Sub test()
    Dim varAntwort As Variant, strTag As String, strMonat As String, strJahr As String
    Do
        varAntwort = Application.InputBox("Bitte den Tag eingeben.", "Eingabe", Type:=1)
        If varAntwort = False Then Exit Sub
        If zahl_ok(varAntwort, False, 1, False, 0, 1, 31, False, True, False) Then strTag = CStr(varAntwort): Exit Do
        MsgBox "Falsche Eingabe für den Tag.", 48, "hinweis"
    Loop
    Do
        varAntwort = Application.InputBox("Bitte das Monat eingeben.", "Eingabe", Type:=1)
        If varAntwort = False Then Exit Sub
        If zahl_ok(varAntwort, False, 1, False, 0, 1, 12, False, True, False) Then strTag = CStr(varAntwort): Exit Do
        MsgBox "Falsche Eingabe für das Monat.", 48, "hinweis"
    Loop
    Do
        varAntwort = Application.InputBox("Bitte das Jahr eingeben.", "Eingabe", Type:=1)
        If varAntwort = False Then Exit Sub
        If zahl_ok(varAntwort, False, 1, False, 0, 2000, 2099, False, True, False) Then strTag = CStr(varAntwort): Exit Do
        MsgBox "Falsche Eingabe für das Jahr.", 48, "hinweis"
    Loop
End Sub
Function zahl_ok(zahl As Variant, vorkomma_bool As Boolean, vorkomma As Integer, _
    nachkomma_bool As Boolean, nachkomma As Integer, minimum As Variant, _
    maximum As Variant, minus As Boolean, plus As Boolean, Meldung As Boolean) As Boolean
    Dim index As Integer
    On Error GoTo Fehlerausgang
    zahl = Trim(CStr(zahl))
    If Trim(CStr(zahl)) = "" Then zahl = 0
    For index = 1 To Len(CStr(zahl))
        If Not IsNumeric(Mid(CStr(zahl), index, 1)) Then
            If Mid(CStr(zahl), index, 1) <> "," And Mid(CStr(zahl), index, 1) <> "-" Then
                If Meldung Then MsgBox "Nur Zahlen, Komma und Minus verwenden.", vbExclamation, "Hinweis"
                Exit Function
            End If
        End If
    Next index
    If InStr(InStr(CStr(zahl), ",") + 1, CStr(zahl), ",") <> 0 Then
        If Meldung Then MsgBox "Nur ein Komma erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    If InStr(InStr(CStr(zahl), "-") + 1, CStr(zahl), "-") <> 0 Then
        If Meldung Then MsgBox "Nur ein Minus erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    If InStr(CStr(zahl), "-") <> 0 And Mid(CStr(zahl), 1, 1) <> "-" Then
        If Meldung Then MsgBox "Minus nur links der Zahl erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    If nachkomma = 0 And InStr(CStr(zahl), ",") <> 0 Then
        If Meldung Then MsgBox "Nachkommastellen nicht erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    zahl = CDbl(zahl)
    If minus And CDbl(zahl) > 0 Then
        If Meldung Then MsgBox "Positive Eingabe nicht erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    If plus And CDbl(zahl) < 0 Then
        If Meldung Then MsgBox "Negative Eingabe nicht erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    If vorkomma = 0 And CDbl(zahl) >= 1 Then
        If Meldung Then MsgBox "Vorkommastellen nicht erlaubt.", vbExclamation, "Hinweis"
        Exit Function
    End If
    If nachkomma_bool And InStr(CStr(zahl), ",") <> 0 Then
        If Len(CStr(zahl)) - InStr(CStr(zahl), ",") > nachkomma Then
            If Meldung Then MsgBox "Maximal " & CStr(nachkomma) & " Nachkommastellen.", vbExclamation, "Hinweis"
            Exit Function
        End If
    End If
    If vorkomma_bool Then
        If InStr(CStr(zahl), ",") <> 0 Then
            If InStr(CStr(zahl), ",") - 1 + (CDbl(zahl) < 0) > vorkomma Then
                If Meldung Then MsgBox "Maximal " & CStr(vorkomma) & " Vorkommastellen.", vbExclamation, "Hinweis"
                Exit Function
            End If
        Else
            If Len(CStr(zahl)) + (CDbl(zahl) < 0) > vorkomma Then
                If Meldung Then MsgBox "Maximal " & CStr(vorkomma) & " Vorkommastellen.", vbExclamation, "Hinweis"
                Exit Function
            End If
        End If
    End If
    If minimum <> "" Then
        If CDbl(zahl) < CDbl(minimum) Then
            If Meldung Then MsgBox "Kleinste mögliche Eingabe ist " & CStr(minimum), vbExclamation, "Hinweis"
            Exit Function
        End If
    End If
    If maximum <> "" Then
        If CDbl(zahl) > CDbl(maximum) Then
            If Meldung Then MsgBox "Größte mögliche Eingabe ist " & CStr(maximum), vbExclamation, "Hinweis"
            Exit Function
        End If
    End If
    zahl_ok = True
    Exit Function
Fehlerausgang:
    If Err.Number = 6 Then
        If Meldung Then MsgBox "Eingegebene Zahl zu groß.", vbExclamation, "Hinweis"
    ElseIf Err.Number = 13 Then
        If Meldung Then MsgBox "Bitte eine Zahl eingeben.", vbExclamation, "Hinweis"
    Else
        If Meldung Then MsgBox "Fehler " & Err.Number & " - " & Err.Description, vbCritical, "Hinweis"
    End If
End Function


Code eingefügt mit: Excel Code Jeanie

Gruß
Nepumuk


Bild


Betrifft: AW: Inputbox
von: Helmut
Geschrieben am: 25.11.2003 07:56:37

Danke,

das funkt so weit!!!!!
Danke nochmals für die Hilfe! Habe aber noch ein (leider) neues Problem ins Forum gestellt.

Grüße
Helmut


Bild

Beiträge aus den Excel-Beispielen zum Thema " Inputbox"