|
Dieser Text soll uns vermitteln wie man Eingaben, welche wir in einer Textbox gemacht werden, in ein Tabellenblatt übertragen oder an eine Variable übergeben kann. Zum Zwecke der Übung erstellen wir uns in einer neuen Mappe eine Userform in der eine Textbox eingefügt wird. 
Da man mehr als nur eine Textbox in einer Userform verarbeiten kann, geht Excel VBA automatisch her und nummeriert diese Textboxen durch. Das können wir in den Eigenschaften der Textbox sehen. In diesem Fall handelt es sich um die Textbox1. Bereits jetzt kommt es darauf an was ihr eurer Tabelle abverlangen wollt. Deshalb werde ich schon jetzt mehrere kleine Codes an euch weiter geben müssen. Aber als aller erstes schreiben wir und hinter „Tabelle1“ einen Code, der die Userform1 aufrufen soll: Option Explicit
Sub Start() UserForm1.Show End Sub
Legt Euch jetzt am Besten einen Schalter in euer Tabellenblatt und verbindet ihn mit dem Makro Start. Möglichkeit 1: Macht ihr in der Userform einen Doppelklick auf die Textbox1, so gelangt ihr direkt in die Programmieroberfläche. Euch wird von Excel VBA ein Code angeboten: Private Sub TextBox1_Change()
End Sub
Aus diesem Angebot erstellen wir uns diesen Code: Private Sub TextBox1_Change() Range("A1") = TextBox1.Value End Sub
Nun wechselt ihr einmal in das Tabellenblatt1 und betätigt den Schalter. Die Userform wird geöffnet. Trägt man etwas in die Textbox ein, so wird fast zeitgleich die Eingabe in die Zelle A1 übernommen. Möglichkeit 2: Löscht jetzt bitte einmal den Code hinter der Userform und tragt dort dieses ein. Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Range("A1") = TextBox1.Value End Sub
Ruft ihr jetzt die Userform auf und tragt etwas in der Textbox ein, so passiert erst einmal gar nichts. Das Problem ist dabei, dass wir ja nur eine Textbox in der Userform haben. Normalerweise wartet Excel VBA in diesem Moment darauf, dass ihr die Textbox verlasst. Dass könnte zum Beispiel eine andere Textbox, oder ein CommandButton sein, welcher die Userform schließt. Es reicht aber aus dass wir die Userform mit dem Schließkreuz verlassen. Betätigen wir dieses, so wird in Zelle A1 unsere Eingabe übernommen. Wenn ich nun einmal ganz ehrlich bin, dann übergebe ich Daten, welche aus einer Textbox, oder einer ComboBox, kommen, lieber mit Hilfe eines CommandButton. Den Grund möchte ich Euch im weiteren Verlauf aufzeigen. Legt Euch auf eure Userform bitte noch 2 Textboxen und einen CommandButton. 
Halten wir uns an dem oben geschriebenen Text, so würdet ihr eure Eingaben, welche in den 3 TextBoxen getätigt werden, mit Hilfe eines VBA Codes in ein Tabellenblatt eintragen, welcher so ausschaut: Option Explicit
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Range("A1") = TextBox1.Value End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) Range("B1") = TextBox2.Value End Sub
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean) Range("C1") = TextBox3.Value End Sub
Private Sub CommandButton1_Click() Unload Me End Sub
In diesem Code – Beispiel wurde für jede Textbox ein kleines Makro zur Datenübergabe geschrieben. Der CommandButton schließt unsere Userform. Die Frage, welche sich hier auftut ist: „Können wir uns hier nicht einiges an VBA Code einsparen?“ Ja, das können wir wirklich. Löscht doch bitte einmal die Makros für die Textboxen und fügt für den CommandButton diesen Code ein: Option Explicit
Private Sub CommandButton1_Click() Range("A1") = TextBox1.Value Range("B1") = TextBox2.Value Range("C1") = TextBox3.Value Unload Me End Sub
Dieser kleine VBA Code nimmt uns hier die ganze Arbeit ab. Ist doch einiges weniger, oder? Nun treiben wir die Sache auch noch richtig die Spitze, einverstanden? OK – zieht euch bitte noch weitere 7 TextBoxen in die Userform so dass wir insgesamt 10 TextBoxen zur Eingabe haben. Wer jetzt denkt, dass man doch nicht so viele Eingaben tätigen muss, der ist auf dem Holzweg. Wer des Öfteren mit VBA Tabellen erstellt, der wird auch in die Verlegenheit kommen diese 10 Eingaben zu tätigen. Das Makro zur Datenübergabe könnt ihr euch jetzt selber schreiben, oder? Mit absoluter Sicherheit, aber ich habe ja geschrieben, dass ich die Sache auf die Spitze treiben möchte. Genau aus diesem Grund tauscht ihr den Code für den CommandButton jetzt noch einmal aus: Option Explicit
Private Sub CommandButton1_Click() Dim i As Byte For i = 1 To 10 Sheets("Tabelle1").Cells(1, i).Value = Me.Controls("Textbox" & i) Next Unload Me End Sub
Bei diesem Makro verwenden wir für die Textbox eine Variable i. Diese Variable wird von 1 bis 10 hochgezählt und mit Me.Controls("Textbox" & i) angesprochen. Zudem verwenden wir die Variable i für die Ablage in den Spalten. Hinweis: Wie der Name Textbox bereits sagt, wird Text in die Spalten übergeben! Hier ist es egal ob ihr eine Zahl, einen Text oder ein Datum in eine Zelle eintragen wollt. Es handelt sich um einen TEXT! Ein Code zur Übergabe einer Zahl oder eines Datums würde etwas anders aussehen: Zahl: Private Sub CommandButton1_Click() Range("A1") = CInt(TextBox1.Value) End Sub
Datum: Private Sub CommandButton1_Click() Range("A1") = CDate(TextBox1.Value) End Sub
|