InputBox? Vielleicht erinnerst du dich. Da gab es doch schon mal einen Beitrag zu diesem Thema.
Das ist nur zum Teil richtig. In besagtem Beitrag ging es um die InputBox-Funktion.
In diesem Beitrag soll es um die InputBox-Methode gehen.
Wo ist der Unterschied?
„Die InputBox-Methode weicht von der InputBox_Funktion dahingehend ab, dass sie die selektive Überprüfung der Benutzereingabe ermöglicht, und sie kann mit Excel-Objekten, -Fehlerwerten und -Formeln verwendet werden. Beachte, dass Application.InputBox die InputBox-Methode aufruft. InputBox ohne Objektqualifizierer dagegen ruft die InputBox-Funktion auf.“
Zunächst zeigt der Beitrag kurz, wie die InputBox-Funktion zu programmieren war.
1. Die InputBox-Funktion
In VBA kannst du mit einer InputBox einer deklarierten Variablen Werte zuweisen. Zuerst musst du deshalb die Variablen deklarieren.
Die Variable soll hier der Name des Benutzers sein. Er wird mit der InputBox aufgefordert, diesen einzugeben.
Die Syntax der InputBox lautet:
InputBox(prompt[, title] [, default][, xpos] [, ypos] [, helpfile, context])
Die Argumente sind:
„prompt“ ist der Text in der Box, die Aufforderung, z.B. „Trage bitte deinen Namen ein!“. Die Variable soll strNamen heißen.
Mit „title“ kann das, was oben links als „Microsoft Excel“ steht, der Name der InputBox sozusagen, verändert werden. Dort soll „Deine Eingabe“ stehen. Die Variable ist strTitel.
„default“ ist eine Vorgabe für den Eintrag. Im Beispiel wird nichts vorgegeben.
Schließlich gibt es noch eine Variable für das Ergebnis der Abfrage, strAntwort.
Am Ende des Makros soll strAntwort in Zelle A2 eingetragen werden.
Der Code dafür kann dann so aussehen:
Sub Eingabe1()
Dim strNamen As String
Dim strTitel As String
Dim strAntwort As String
strNamen=“Trage bitte deinen Namen ein!“
strTitel=“Deine Eingabe“
strAntwort=InputBox(strNamen,strTitel)
Range(„A2“)=strAntwort
End Sub
Führe das Makro aus.
Es folgt die InputBox wie oben beschrieben.
Trage nun deinen Namen ein, ich habe hier mal meinen eigenen gewählt, „Gerhard“.
Wie angewiesen, wird der Name in Zelle A2 des Arbeitsblattes eingetragen.
Soviel zur InputBox-Funktion.
2. Die Application.InputBox-Methode
Die Aufgabe soll hier die gleiche wie bei der Funktion sein. Mittels einer InputBox soll ein Name abgefragt und in eine Zelle des Arbeitsblattes eingetragen werden.
Bei der Verwendung einer Application.InputBox gibt es u.a. die Möglichkeit, Formeln und Zellbezüge einzugeben. Es muss dazu eine Type angegeben werden.
Die Syntax lautet:
Application.InputBox (Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type)
Die Argumente gelten analog den Ausführungen zur InputBox-Funktion.
Hinzu kommt das Argument Type. Diese gibt es zur Auswahl:
In einem ersten Beispiel soll der Type 8, ein Zellbezug, gewählt werden. Der Name, der in Zelle A2 eingetragen werden soll, befindet sich in einem Bereich F14:F19 und soll dort ausgewählt werden.
Nach Durchlauf des Makros soll der ausgewählte Name in Zelle A2 abgelegt werden.
Verwende dazu z.B. dieses Makro:
Sub Eingabe2()
Dim rngBereich As Range
Set rngBereich = Application.InputBox(prompt:=“Wähle eine Zelle aus!“, Type:=8)
Range(„A2“)=rngBereich
End Sub
Deklariere zunächst die Variable rngBereich und referenziere sie mit der Anweisung „Set“.
Du erhältst die Anweisung „Wähle eine Zelle aus!“
Klicke nun auf eine Zelle aus dem Bereich F14:F19 und bestätige mit OK.
Der ausgewählte Name wird nun in Zelle A2 abgelegt.
Hast du versehentlich als Type die 1 ausgewählt und willst die Zelle F17 als Bezug wählen, erhältst du diese Fehlermeldung.
In einem weiteren Beispiel wird Type = 1 gewählt.
Du wirst durch die InputBox aufgefordert, dich für eine Zahl zu entscheiden und sie einzutragen.
Eine MsgBox zeigt deine Auswahl. Nach dem OK wird die Zahl in Zelle A2 eingetragen.
Dies ist das Makro dafür:
Sub Eingabe3()
Dim intNummer As Integer
intNummer = Application.InputBox(prompt:=“Wähle eine Zahl!“, Type:=1)
MsgBox(intNummer)
Range(„A2“)=intNummer
End Sub
Hast du versehentlich im Makro als Type z.B. 8 eingetragen, erhältst du diese Fehlermeldung.
Entdecke mehr von Clevercalcul
Subscribe to get the latest posts sent to your email.
Ich habe ein Problem mit der Eingabe eines Default und type=8 festgestellt.
Ohne Default kommt die Abfrage und ich kann eine Zelle auswählen.
Wenn ich die aktive Zelle als Default vorgebe (das will ich haben), kann ich nichts mehr auswählen.
Es kommt sofort die nächste Anweisung zum tragen.
Ich möchte aber trotzdem noch andere Zellen auswählen können
Ist das ein bekannter Fehler oder muss man noch etwas machen?
Könntest du noch darauf eingehen?
Meine Befehl sieht so aus:
Dim rngAddrStart As Range
Dim strAddrFrom As String
Set rngAddrStart = ActiveCell
strAddrFrom = ActiveCell.Address
Set myCell = Application.InputBox(prompt = „Zelle auswählen und Enter oder Ok betätigen“, Title = „CopyFrom“, Default = rngAddrStart, Type:=8)
If (myCell.Address = „“) Then
strAddrFrom = ActiveCell.Address
Else
strAddrFrom = myCell.Address ‚ Adresse des Ziels holen
End If
Als Default-Eingabe habe ich verschiedenes probiert, ohne Erfolg
Über eine Hilfe würde ich mich freuen
Danke und Grüße
Oliwer
Hallo Oliwer,
danke für deinen Kommentar.
Du sollst zuerst wissen, dass ich kein Excel- und VBA-Profi bin. Ich bin Autodidakt und habe mir mein Wissen durch Lesen und Probieren angeeignet.
Das Problem, das du beschreibst, kenne ich auch aus meinen Recherchen zum Thema. Ich kann mir das nur so erklären, das gemäß der Syntax der Application.InputBox zuerst der prompt eingetragen wird, bei dir „Zelle auswählen und …“ Default kommt in der Syntax später und widerspricht sich mit dem Prompt. Wählst du die Zelle F18 und in Default steht Zelle A2, passt das nicht.
Du solltest die aktive Zelle evtl. außerhalb der Application.InputBox behandeln und festschreiben.
Mehr Antwort kann ich dir leider nicht geben.