Die InputBox in VBA

Statt Berichtsvariablen über DropDown-Listen auszuwählen und sie dadurch einer Prozedur zur Verfügung zu stellen, kann die Auswahl und das Bereitstellen in VBA auch über eine sogenannte InputBox erfolgen.

Darum geht es in diesem Beitrag.

Mit einer InputBox lassen sich in VBA einer deklarierten Variablen Werte zuweisen. Zunächst müssen deshalb die Variablen deklariert werden. In einem früheren Beitrag zur Variablendeklaration habe ich erklärt, wie das geht. Wichtig war dabei, den richtigen Datentyp zu wählen.

Diese InputBox wirst du gleich programmieren:

Inputbox1.png

Die Syntax lautet:

InputBox(prompt[, title] [, default][, xpos] [, ypos] [, helpfile, context])

Was sind die Argumente im Einzelnen?

„prompt“ ist der Text in der Box, die Aufforderung, z.B. „Bitte das Berichtsjahr eingeben!“.

Mit „title“ kann das, was oben links als „Microsoft Excel“ steht, der Name der InputBox sozusagen, verändert werden.

„default“ ist eine Vorgabe für deinen Eintrag, im Bild steht schon mal „2015“, d.h., das Jahr ist vollständig einzutragen. „15“ würde nicht funktionieren.

„xpos“ und „ypos“ bezeichnen die Position der Box auf dem Bildschirm, du begnügst dich mit dem Standard.

„helpfile, context“ sind Angaben zu Hilfsdateien, die du in diesem Beispiel auch nicht benötigst.

Ein Beispiel erklärt das Vorgehen am besten.

Deine Arbeitsmappe hat mehrere Arbeitsblätter, auf denen Umsatzdaten jeweils eines Jahres enthalten sind. Die Register erhalten als Namen die jeweilige Jahreszahl.

Auf jedem Arbeitsblatt befindet sich eine Summenzelle, für die Namen angelegt sind. Die Summenzelle des Jahres 2015 heißt „Umsatz2015“ usw.

Auf Balatt 1 willst du ein gewähltes Jahr und die dazugehörige Umsatzsumme abbilden.

Mit der InputBox wählst du das Jahr aus. Das Jahr soll vierstellig geschrieben werden, z.B. 2015. Das lässt sich mit dem Datentyp Single abbilden (8 Stellen). Die vergebenen Namen sind Texte, du nimmst dafür den Datentyp String.

Im VBA-Editor schreibst du diesen Code in ein Modul:

Sub Umsatz()
Dim sngJahr As Single  ‚Deklaration der Variablen
Dim strUmsatz As String
sngJahr = InputBox(„Bitte das Berichtsjahr eingeben!“, , 2015)  ‚Wertzuweisung mit der InputBox
Range(„B15“).Value = sngJahr ‚Ausgeben des Variablenwertes in eine Zelle
strUmsatz = Range(„Umsatz“ & sngJahr)  ‚Wertzuweisung Umsatz
Range(„D15“).Value = strUmsatz  ‚Ausgeben des Umsatzwertes in eine Zelle
End Sub

Du siehst, dass der Name der jeweiligen Umsatzzelle durch Verkettung gebildet wird.

Das Ergebnis sieht dann so aus:

inputbox2

In B15 steht das mit der InputBox eingegebene Jahr, in D15 der Wert der Umsatzsumme vom Blatt 2015. Hast du Arbeitsblätter für mehrere Jahre angelegt und sind jeweils Namen für die Umsatzsummen vergeben, kannst du erneut das Makro aufrufen und ein anderes Jahr eingeben. Das Ergebnis in D15 wird dann auch ein anderes sein.

Du könntest jetzt denken, warum so umständlich, ohne VBA bekomme ich diese beiden Werte doch viel einfacher auf mein Berichtsblatt. Du schreibst „2015“ in die Zelle B15 und D15 die Formel =INDIREKT(„Umsatz“&B15).

Da hast du natürlich recht. In der Regel wird ein Bericht aber viel umfangreicher sei, als dieses kleine Beispiel zeigt. Dann macht es schon Sinn.

Advertisements

4 Kommentare zu „Die InputBox in VBA“

  1. Hallo Gerhard,
    die InputBox ist wichtig genug für einen Beitrag 🙂 Schön, dass du ihr einen widmest 🙂
    Mir gefällt auch der Hinweis, dass dieser Use Case natürlich auch anders gelöst werden könnte – gleichzeitig ist er ein gutes, nachvollziehbares Beispiel. Sonst wird’s ja zu kompliziert, um es nachvollziehen zu können 🙂

    Gefällt mir

    1. Hallo Katharina, ich freue mich über deinen Kommentar, danke. Was ich gern noch kurz erläutert hätte, ist das Argument helpfile. Dazu habe ich allerdings kein KnowHow. Vielleicht mags du mal darüber schreiben?

      Gefällt mir

  2. Wichtig ist noch die ‚Abbrechen‘-Taste abzufangen und das geht sauber so:
    Dim myInput As String

    myInput InputBox(„Wie alt sind Sie?“, „Alter“, „“)
    If StrPtr(myInput) = 0 Then
    MsgBox „Abbrechen wurde gewählt!“
    Else
    If myInput = „“ Then
    MsgBox „Keine Angabe bzgl. des Alters!“
    Else
    MsgBox „Aha… “ & myInput & “ Jahre also!“
    End if
    End If

    Gefällt mir

    1. Hallo Jean Pierre, danke für den Hinweis. Die Sache ist mir bekannt, ich wollte den Beitrag aber nicht unbedingt auf alle Aspekte ausdehnen, es gibt noch weit mehr, worüber zu schreiben wäre. Grüße Gerhard

      Gefällt mir

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s