Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
340to344
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
340to344
340to344
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Inputbox

Inputbox
24.11.2003 14:06:42
Helmut
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

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Inputbox
24.11.2003 14:28:45
Nepumuk
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
Anzeige
AW: Inputbox
24.11.2003 14:55:12
Martial
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
Anzeige
AW: Inputbox
24.11.2003 16:03:19
Helmut
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
Anzeige
AW: Inputbox
24.11.2003 16:43:51
Martial
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
Anzeige
AW: Inputbox
24.11.2003 18:11:55
Nepumuk
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
Anzeige
AW: Inputbox
25.11.2003 07:56:37
Helmut
Danke,

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

Grüße
Helmut

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige