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:
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 Blatt 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:
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.
Entdecke mehr von Clevercalcul
Subscribe to get the latest posts sent to your email.
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
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
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 🙂
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?