Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

InputBox - Eingabeformat abfangen

Betrifft: InputBox - Eingabeformat abfangen von: David
Geschrieben am: 08.05.2008 13:55:02

Hallo zusammen

Ich möchte in einem Dialog einen Monat abfragen. Dabei möchte ich sicherstellen, dass dieser im richtigen Format eingegeben wird, da die Zahl für einen Datei-Pfad verwendet wird.

Mein bisheriger Ansatz geht so:

Dim monat As integer
           
Do Until monat >= 1 And monat <= 12
   monat = Int(InputBox("Monat (1-12"))
Loop



Das klappt auch soweit mit allen Zahlen. Wenn die Zahl außerhalb der Range ist, kommt der Dialog erneut, hat sie (eine) Kommastelle(n), wird nur der ganzzahlige Anteil genommen.
Wenn ich jedoch jetzt Text eingebe, z. Bsp. April, dann kommt eine Fehlermeldung von wegen "Typen unverträglich", was ja auch logisch ist, da Text nicht 'Integer' ist.
Ich habe auch schon versucht, den monat als String zu definieren, aber dann funzt die INT-Formel nicht mehr.
Hat jemand eine Lösung für mich?

Danke vorab.

Gruß

David

  

Betrifft: AW: InputBox - Eingabeformat abfangen von: Hajo_Zi
Geschrieben am: 08.05.2008 13:59:35

Hallo David,

‚Inputbox mit Type 1 laesst nur Zahlen als Eingabe zu.
VarPrints = Application.InputBox("Anzahl der Ausdrucke", "Drucken", 0, Type:=1)

GrußformelHomepage


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: David
Geschrieben am: 08.05.2008 14:17:38

Hallo Hajo,

das geht in Bezug auf meine Frage. Allerdings hat sich dadurch ein neues Problem aufgetan (welches für mich unlogisch ist).

Der Teil-Code geht jetzt so:

    Dim monat As Integer, file_new As String
           
    Do Until monat >= 1 And monat <= 12
        monat = Int(Application.InputBox("Monat (1-12", Type:=1))
    Loop
    
    If Len(monat) = 1 Then monat = "0" & monat



komischerweise ergibt Len(monat) IMMER 2, auch wenn monat = 1 (oder eine andere einstellige Zahl) ist. Damit kann ich nicht mehr die 0 voranstellen, damit der Monat 2-stellig wird.
Klar könnte ich das auch mit <10 lösen, aber ich würd's gern verstehen.

Danke.


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: Hajo_Zi
Geschrieben am: 08.05.2008 14:25:48

Hallo David,

If Len(CStr(monat)) = 1 Then monat = "0" & monat

Gruß Hajo


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: Rudi Maintaire
Geschrieben am: 08.05.2008 14:27:03

Hallo Hajo,
das klappt nicht, solange Monat als Integer deklariert ist.

Gruß
Rudi


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: Hajo_Zi
Geschrieben am: 08.05.2008 14:28:22

Hallo Rudi,

ich habe es getestet unter 2007 aber ich sehe keinen Grund warum das in Vorgänger Vesionen nicht gehen sollte.

Gruß Hajo


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: Andi
Geschrieben am: 08.05.2008 14:40:21

Hi,

bei 2003 geht's nicht.
Wenn ich an eine Int-Variable vorne eine 0 dran-verkette, dann wird die nicht angezeigt, oder anders gesagt:

Dim monat As Integer
monat = 1
If Len(CStr(monat)) = 1 Then monat = "0" & monat
MsgBox monat

ergibt die Ausgabe 1, nicht 01.

Schönen Gruß,
Andi


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: Hajo_Zi
Geschrieben am: 08.05.2008 14:49:12

Hallo Andi,

ich habe es jetzt auch in 2003 im Urzustand getestet, ohne Probleme. Das 1 rauskommt hängt damit zusammen das die Variable als Integer und nicht als String definiert wurde.

Gruß Hajo


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: Andi
Geschrieben am: 08.05.2008 15:05:23

Hi,

Das 1 rauskommt hängt damit zusammen das die Variable als Integer und nicht als String definiert wurde.

Schon klar, deswegen meinte Rudi ja, dass es nicht geht, solange monat als Integer deklariert ist.
01 statt 1 war ja der Sinn der ganzen Übung.

Schönen Gruß,
Andi


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: David
Geschrieben am: 08.05.2008 14:28:13

Ich nehme die Lösung von Rudi, trotzdem Danke (merke ich mir für's nächste mal)

Gruß


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: Rudi Maintaire
Geschrieben am: 08.05.2008 14:25:49

Hallo,
so:

Sub tt()
    Dim monat, file_new As String
           
    Do
        monat = Int(Application.InputBox("Monat (1-12", Type:=1))
    Loop Until monat >= 1 And monat <= 12
    
    monat = Format(monat, "00")
End Sub




  

Betrifft: AW: InputBox - Eingabeformat abfangen von: David
Geschrieben am: 08.05.2008 14:27:24

Das ist natürlich noch besser, danke.

Gruß


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: David
Geschrieben am: 08.05.2008 14:41:20

ich habe monat jetzt als 'DOUBLE' definiert, da er bei Zahlen >32' wieder eine Fehlermeldung gebracht hat.
Die Anweisung

monat = Format...

hat dann nicht mehr funktioniert, ich habe deshalb noch eine Variable tmonat definiert, wie Renèe vorgeschlagen hat.

Ich hoffe, nun alle Fehlerquellen ausgemerzt zu haben... ;-)

Gruß


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: Renee
Geschrieben am: 08.05.2008 14:31:44

Hallo David,

komischerweise ergibt Len(monat) IMMER 2 das ist nicht komisch, sondern richtig. Du könntest sogar 12345 in deinem Monat drinstehen haben und er würde immer noch 2 als Länge angeben.
Das ist so, weil du Monat als Integer definiert hast und ein solcher Datentype belegt immer 2 Byte nicht mehr und nicht weniger. Darum macht auch dein Befehl mit dem 'vor'anhängen einer Null keinen Sinn. Wenn du aus dem Monat einen Textstring mit führender null machen willst, so:

Dim txtMonat as String
txtMonat = Format(monat,"00")



GreetZ Renée


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: David
Geschrieben am: 08.05.2008 14:38:28

Ich war der Meinung, dass LEN die Anzahl der Zeichen ergibt. Bei 12345 beispielsweise 5 (wie die Excel-Funktion LÄNGE)


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: Peter Feustel
Geschrieben am: 08.05.2008 14:04:19

Hallo David,

so könnte es gehen:

Public Sub Test()

Dim sMonat As String
Dim iMonat As Integer
           
Do Until iMonat >= 1 And iMonat <= 12
   sMonat = InputBox("Monat 1 - 12")
   If IsNumeric(sMonat) Then
      iMonat = Int(InputBox("Monat (1-12"))
   End If
Loop

End Sub



Gruß Peter


  

Betrifft: AW: InputBox - Eingabeformat abfangen von: David
Geschrieben am: 08.05.2008 14:29:26

sieht so aus, als ob das auch klappen könnte, habe ich jetzt aber nicht getestet, da die anderen Vorschläge schon zielführend waren.

Trotzdem vielen Dank für deine Mühe.

Gruß


 

Beiträge aus den Excel-Beispielen zum Thema "InputBox - Eingabeformat abfangen"