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

Betrifft: Inputbox von: Edmund
Geschrieben am: 13.10.2020 12:39:44

Hallo Ihr

Und noch einmal würde ich das Forum gerne mit einer Frage bereichern.

Ich benötige in meinem Script eine Zahl.
Diese soll über eine Inputbox abgefragt werden.

Das Problem:
Wenn ich die Variable als Long deklariere, gibt es eine Fehlermeldung, wenn der User auf Abbrechen drückt, da Abbrechen einen String zurückliefert.
Wenn ich die Variable als String deklariere, kann ich mit ihr nichts anfangen, weil es ein Text ist.

Im Moment habe ich das so gelöst

Dim varMonat As Variant
Dim lngMonat As Long

varMonat = InputBox("Welcher Monat soll berechnet werden?" & vbCrLf & "Bitte als Zahl angeben")
lngMonat = varMonat


Das funktioniert zwar, aber ich spüre in meiner Seele, dass das sicher auch eleganter geht.
Hat da jemand einen Tipp?

LG

Edmund

Betrifft: AW: Inputbox
von: Rudi Maintaire
Geschrieben am: 13.10.2020 12:48:53

Hallo,
z.B.
Sub aaa()
  Dim varMonat
  varMonat = Application.InputBox("Monat?", , , , , , , 1)
  Select Case varMonat
    Case 1 To 12:    MsgBox "OK"
      Case Else:     MsgBox "falsch"
  End Select
End Sub


Betrifft: AW: Inputbox
von: Daniel
Geschrieben am: 13.10.2020 12:56:26

Hi
beispielsweise, in dem du anstelle der allgemeinen VBA-Inputbox die Excel(applications-)spezifische Inputbox verwendest und da vorgibst, dass die Eingabe eine Zahl sein muss:
lngMonat = Application.InputBox("Monat", Type:=1)
ein Abbruch wird hier mit dem Wert 0 quittiert.
bei Eingabe eines Textes wird der Anwender aufgefordert, die Eingabe zu wiederholen.


wenn du Komfort für den Anwender willst, dann verwendest du trotzdem eine Text-Inputbox und gibst dem Anwender die Möglichkeit, den Monat nicht nur als Zahl, sondern auch als Kurz- ("Okt") oder Langtext ("Oktober") eingeben zu können.
Ist zwar dann etwas programmieraufwand und nicht mehr "elegant", aber Eleganz in der Programmierung interessiert den Anwender nicht.


Gruß Daniel

Betrifft: AW: Inputbox
von: Edmund
Geschrieben am: 13.10.2020 13:01:40

Danke für Eure Antworten

Leider funktioniert das noch nicht wie gewünscht.
Jetzt gibt es eine Fehlermeldung, wenn nichts eingegeben und dann auf OK geklickt wird.

Leider muss ich jetzt in eine Besprechung, kann also erst in 2h wieder antworten.

Viele Grüße

Edmund

Betrifft: AW: Inputbox
von: Daniel
Geschrieben am: 13.10.2020 13:36:40

Hi
eine Abfrage, ob ein sinnvoller Monatswert (von 1-12) eingegeben wurde, brauchst du sowieso.
Auch den Abbruch musst du ja irgendwie erkennen.
das kannst du "elegant" über die Inputbox nicht abfangen.
ein paar zusätzliche Zeilen Programmcode sind da auf jeden Fall erforderlich.
Gruß Daniel

Betrifft: AW: Inputbox
von: Edmund
Geschrieben am: 13.10.2020 13:44:53

Danke für die Antwort

Das Abfragen des Monats ist klar. Das sieht bis jetzt bei mir so aus.

Dim varMonat As Variant
Dim lngMonat As Long

varMonat = Application.InputBox("Welcher Monat soll berechnet werden?" & vbCrLf & "Bitte als Zahl angeben")
lngMonat = varMonat

If varMonat = "" Then Exit Sub
If lngMonat >= 1 And lngMonat < 13 Then
Else
MsgBox "Kein gültiger Monat"
Exit Sub
End If


Dann werde ich doch meine Lösung behalten müssen.
Schade, ich dachte das geht eleganter und eine Variable genügt.

Danke Euch für Deine Mühe

Betrifft: AW: Inputbox
von: Daniel
Geschrieben am: 13.10.2020 13:56:48

es genügt dir eine Variable.
Variant kann mehrere Zustände annehmen.
du musst dann explizt umwandeln:
so bekommst du auch einen sauberen Programmlauf, wenn der Anwender einen Text eingibt.
varMonat = Inputbox(…)
varMonat = VAL(varMonat)
if varMonat < 1 or varMonat > 12 then 
    Msgbox "ungültiger Monat"
    Exit Sub
end if
oder eben mit der Appication.Inputbox
lngMonat = application.Inputbox(…, Type:=1)
if lngMonat < 1 or lngMonat > 12 then
    Msgbox "ungültiger Monat"
    Exit Sub
end if

die Variable bitte entsprechend dem Präfix als Variant oder Long deklarieren.

Gruß Daniel

Betrifft: AW: Inputbox
von: Edmund
Geschrieben am: 13.10.2020 14:25:36

Hallo Daniel

varMonat = VAL(varMonat)

Das war es.
Den kannte ich noch nicht, und damit funktioniert es.

Vielen Dank