HERBERS Excel-Forum - die Dialoge

Thema: InputBox

Home


Zum Anfordern einfacher Eingaben vom Anwender steht in Excel die InputBox zur Verfügung. Sie ermöglicht eine schnelle Abfrage, ohne dass hierfür eine UserForm programmiert werden muß.

In Excel stehen zwei Arten der InputBox zur Verfügung:
  • Die InputBox-Funktion aus VBA
    Der Aufruf:

    sTxt = InputBox("Bitte Eingabe tätigen:")

    Abbildung - VBA-Inputbox
    InputBox VBA

  • Die InputBox-Methode aus Excel
    Der Aufruf:

    sTxt = Application.InputBox("Bitte Eingabe tätigen:")

    Abbildung - Excel-Inputbox
    InputBox Excel

Die Funktion und die Methode unterscheiden sich in einem Punkt sehr wesentlich: Die InputBox-Funktion liefert einen Zahlenstring zurück, bei der InputBox-Methode kann der Eingabetyp festgelegt werden. Näheres über den Parameter Type finden Sie weiter unten.

Bitte beachten Sie: Wird der InputBox-Funktionsaufruf mit dem Drücken der Abbrechen-Schaltfläche quittiert, wird ein Leerstring zurückgegeben, auf den das Programm dann entsprechend reagieren sollte. Beispiel:

Sub Aufruf()
   Dim sTxt As String
   sTxt = InputBox("Eingabe:")
   If sTxt = "" Then Exit Sub
   MsgBox sTxt
End Sub

Die Parameter

Die Auflistung

  • Prompt
    Das Argument ist nicht optional.
    Bei der Input-Funktion und der Input-Methode ohne Unterschied nutzbar

    Das Prompt stellt die Eingabeaufforderung dar. Im Prompt können Sie keine Schriftformatierungen vornehmen oder Schriftattribute transportieren, allerdings Zeilenumbrüche veranlassen.

    Beispiel:
    
    Sub SetPrompt()
       Dim sTxt As String, sPrompt As String
       sPrompt = "Nutzen Sie bitte folgende Syntax:" & vbLf & _
       "   'dd.mm.yyyy' oder" & vbLf & _
       "   'dd/mm/yyyy' oder" & vbLf & _
       "   'dd-mm-yyyy':"
       sTxt = InputBox(prompt:=sPrompt)
       On Error GoTo ERRORHANDLER
       MsgBox CDate(sTxt)
       Exit Sub
    ERRORHANDLER:
       MsgBox "Kein gültiges Datumsformat!"
    End Sub
    
    So siehts aus:

    Abbildung - Das Prompt
    Das Prompt


  •  
  • Title
    Das Argument ist optional.
    Bei der Input-Funktion und der Input-Methode ohne Unterschied nutzbar

    Formatierungen, Schriftattribute und Zeilenumbrüche können nicht vorgegeben werden. Die Farbe der Titelleiste ist abhängig von den Systemeinstellungen und kann ebenfalls nicht verändert werden. Der Wert kann wie bei allen anderen Parametern direkt ober auch als Variable übergeben werden.

    Beispiel:
    
    Sub SetTitle()
       Dim sTxt As String, sTitle As String
       sTitle = Application.UserName & " says:"
       sTxt = InputBox(prompt:="Eingabe:", Title:=sTitle)
       If sTxt = "" Then Exit Sub
       MsgBox sTxt
    End Sub
    
    So siehts aus:

    Abbildung - Title
    Title


  •  
  • Default
    Das Argument ist optional.
    Bei der Input-Methode auch Typ-abhängig nutzbar

    Der Parameter ermöglicht die Vorbelegung des Eingabefeldes. Die Vorbelegung kann bei der Wahrscheinlichkeit der Eingabe eines bestimmten Wertes als Eingabeerleichterung oder auch als Hinweis an den Anwender, eine bestimmte Syntax anzuwenden, sinnvoll sein.

    Beispiel:
    
    Sub SetDefault()
       Dim sTxt As String, sPrompt As String, sDefault As String
       sPrompt = "Eingangsdatum eingeben:"
       sDefault = Format(Date - 3, "dd.mm.yyyy")
       sTxt = InputBox(prompt:=sPrompt, Default:=sDefault)
       On Error GoTo ERRORHANDLER
       MsgBox CDate(sTxt)
       Exit Sub
    ERRORHANDLER:
       MsgBox "Kein gültiges Datumsformat!"
    End Sub
    
    So siehts aus:

    Abbildung - Default
    Default

    Die InputBox ermöglicht anders als eine UserForm-TextBox kein Auswahl einzelner Zeichen, um einen direkten Zugriff zum Editieren zu haben. Hier bleibt nur die - mit recht - ungeliebte SendKey-Methode.

    Beispiel:
    
    Sub SelDefault()
       Dim sTxt As String, sPrompt As String, sDefault As String
       sPrompt = "Eingangsdatum eingeben:"
       sDefault = Format(Date - 3, "dd.mm.yyyy")
       SendKeys "{home}{right 3}+{right 2}"
       sTxt = InputBox(prompt:=sPrompt, Default:=sDefault)
       On Error GoTo ERRORHANDLER
       MsgBox CDate(sTxt)
       Exit Sub
    ERRORHANDLER:
       MsgBox "Kein gültiges Datumsformat!"
    End Sub
    
    So siehts aus:

    Abbildung - Vorauswahl
    Vorauswahl


  •  
  • xPos und yPos (Input-Funktion) bzw. Left und Top (Input-Methode)
    Die Argumente sind optional.
    Bei der Input-Funktion und der Input-Methode unterschiedlich nutzbar

    Die Parameter ermöglichen das Positionieren der InputBox auf dem Bildschirm, wobei es allerdings unterschiedliche Mess- und Maßeinstellungen gibt:
    • Input-Funktion
      Maßeinheit: Twips
      Ausgangspunkt: Linker bzw. oberer Rand des Bildschirms

      Beispiel:
      
      Sub InputBoxPositionA()
         Dim sTxt As String
         sTxt = InputBox(prompt:="Eingabe:", xpos:=1000, ypos:=1000)
      End Sub
      
      So siehts aus:

      Abbildung - xPos und yPos
      Abstand in Twips


    •  
    • Input-Methode
      Maßeinheit: Punkt
      Ausgangspunkt: Linker bzw. oberer Rand des Excel-Sheets, wobei die Kopfzeilen (Spalten- und Zeilenköpfe) zum Sheet zählen.

      Beispiel:
      
      Sub InputBoxPositionB()
         Dim rng As Range
         Dim iLeft As Integer, iTop As Integer
         Dim sTxt As String
         Set rng = Range("B3")
         iLeft = rng.Left + 23
         iTop = rng.Top + 16
         sTxt = Application.InputBox( _
            prompt:="Eingabe:", Left:=iLeft, Top:=iTop)
      End Sub
      
      So siehts aus:

      Abstand in Punkten

      Diese Input-Methode ist der Input-Funktion dann vorzuziehen, wenn eine paßgenaue Positionierung an eine vorgegebenen Zelle erforderlich wird.

  •  
  • HelpFile und Context (Input-Funktion) bzw. HelpFile und HelpContextID (Input-Methode)
    Die Argumente sind optional.
    Bei der Input-Funktion und der Input-Methode unterschiedlich nutzbar

    Dem Input-Aufruf können Hilfedateien hinterlegt werden, wobei die Art des Hilfeaufrufs unterschiedlich ist. Bei der Input-Funktion wird - sind die Parameter HelpFile und Context angegeben, eine Hilfe-Schaltfläche hinzugefügt.

    Beispiel:
    
    Sub CallHelpA()
       Dim sTxt As String, sFile As String
       sFile = ThisWorkbook.Path & "\Kontext.chm"
       If Dir(sFile) = "" Then
          Beep
          MsgBox "Hilfedatei existiert nicht!"
          Exit Sub
       End If
       sTxt = InputBox( _
          prompt:="Eingabe:", _
          HelpFile:=sFile, _
          Context:="1001")
    End Sub
    
    So siehts aus:

    Abbildung - HelpFile und Context bei der Input-Funktion
    Hilfe bei der Input-Funktion

    Bei der Input-Methode ist das Fragezeichen für die Kontext-Hilfe unabhängig von der Angabe der Hilfe-Parameter vorhanden. Ein Klick wandelt den Cursor in ein Fragezeichen um und beim nächsten Klick wird die Hilfe aufgerufen. Werden die Parameter vorgegeben, erfolgt, wird die Hilfe-Datei nicht gefunden, eine Fehlermeldung, andernfalls keine Reaktion.

    Beispiel:
    
    Sub CallHelpB()
       Dim sTxt As String, sFile As String
       sFile = ThisWorkbook.Path & "\Kontext.chm"
       If Dir(sFile) = "" Then
          Beep
          MsgBox "Hilfedatei existiert nicht!"
          Exit Sub
       End If
       sTxt = Application.InputBox( _
          prompt:="Eingabe:", _
          HelpFile:=sFile, _
          HelpContextID:="1001")
    End Sub
    
    So siehts aus:

    Abbildung - HelpFile und Context bei der Input-Methode
    Hilfe bei der Input-Methode

    Die in den vorstehenden Codes genannte Hilfedatei befindet sich - wenn die Excel-Tutorial-Dateien sich in der korrekten Verzeichnisanordnung befinden - in den Beispieldateien des Jahres 2001 und sollte gefunden werden.

    Im Excel-Tutorial 2001 wird erklärt, wie Hilfedateien zum Kontext-Aufruf angelegt werden.

  •  
  • Type
    Das Argument ist optional.
    Nur bei der InputBox-Methode nutzbar

    Der Rückgabewert bei der InputBox-Methode ist abhängig vom festgelegten Eingabetyp. An Eingabetypen stehen zur Verfügung:
    WertBedeutung
    0Formel
    1Zahl
    2Text (Zeichenfolge)
    4Logischer Wert (True oder False)
    8Zellbezug, z. B. ein Range-Objekt
    16Fehlerwert, z. B. #N/A
    64Wertematrix

    Die Voreinstellung ist Text. Eine Kombination der einzelnen Eingabetypen ist möglich. Im nachfolgenden Beispiel wird als Eingabe eine Zahl oder ein Zellbezug akzeptiert (1 + 8):
    
    Sub AufrufA()
       Dim vInput As Variant
       vInput = Application.InputBox( _
       prompt:="Bitte Eingabe tätigen:", _
       Title:="Bezüge oder Zahlen", _
       Type:=9)
       MsgBox vInput
    End Sub
    
    Wird weder ein Zellbezug noch eine Zahl eingetragen, wird die Eingabe nicht akzeptiert:

    Abbildung - Kein gültiger Wert
    Kein gültiger Wert

    Ein Bezug kann sowohl manuell eingegeben wie auch mit der Maus in der aktiven Tabelle ausgewählt werden. Das Ergebnis ist ein Range-Objekt, das als solches referenziert werden kann:
    
    Sub Aufruf()
       Dim rng As Range
       Set rng = Application.InputBox( _
       prompt:="Bitte Eingabe tätigen:", _
       Title:="Bezug vorgeben:", _
       Type:=8)
       rng.NumberFormat = "00000"
    End Sub
    
    Wir der InputBox-Wert nicht als Range-Objekt deklariert und mit Set übergeben, wird nicht das Range-Objekt, sondern der Wert der ersten Zelle des deklarierten Bereiches zurückgegeben.

    Bitte beachten Sie: Wenn ein Range-Objekt mit dem Set-Befehl aus einer InputBox übergeben wird, sollte über eine Fehlerroutine der beim Anklicken der Abbrechen-Schaltfläche entstehende Fehler abgefangen werden.

    Beispiel:
    
    Sub AufrufB()
       Dim rng As Range
       On Error GoTo ERRORHANDLER
       Set rng = Application.InputBox( _
          prompt:="Bitte Eingabe tätigen:", _
          Title:="Bezug vorgeben:", _
          Type:=8)
       MsgBox WorksheetFunction.Sum(rng)
    ERRORHANDLER:
    End Sub