Siehe auch: | ListBox, ComboBox: BoundColumn | 

Autor: Peter Haserodt  --- Aus Excel VBA - Gruppe: Steuerelemente

Gebundene Steuerelemente - Bsp. Textbox, Listbox

Autor: Peter Haserodt - Erstellt: --      - Letzte Revision: --
Gebundene Steuerelemente sind einfacher als der Ausdruck vermuten läßt!
Letztendlich sind sie nichts anderes, als Steuerelemente, die mit einer Quelle oder einem Ziel oder beidem in Abhängigkeit stehen.
Also Steuerelemente, die ihre Daten von einer Quelle erhalten, Daten in ein Ziel zurückschreiben.


Vorab:

Dieses Tutorial ist etwas fortgeschritten und Sie sollten sich mit Userformen und dem allgemeinen Umgang damit auskennen.
Weiterhin werden wir in diesem Tutorial viele Eigenschaften per Hand setzen. Natürlich kann man diese auch alle per Code steuern aber dies werden Sie dann schnell selbst erarbeiten können.
Es geht hier ausschließlich um den Hintergrund.


Testumgebung:

Um das Tutorial nachvollziehen zu können, benötigen wir eine Testumgebung.
Erstellen Sie eine neue Mappe, fügen Sie die nachstehenden Codes (eine Userform, ein allgemeines Modul) und in Tabelle1 die dargestellten Werte ein.
Wir arbeiten ausschließlich auf Tabelle1.
Erstellen Sie am Besten dort noch ein Element, mit welchem Sie die UserForm starten können, also das Makro frmControlTest.Show aufrufen.



' **************************************************************
'  Modul:  frmControlTest  Typ = Userform
' **************************************************************

Option Explicit
'#################################
'Name der Userform: frmControlTest
'#################################
	
Private Sub cmdTest_Click()
	' Hier werden wir Code zum Testen reinschreiben
End Sub
'****** Benötigte Steuerelemente*********
'Textbox : txtGebunden
'Textbox : txtUngebunden
'Listbox : lstGebunden
'Commandbutton : cmdTest - Caption:Test
'****************************************


' **************************************************************
'  Modul:  mdlStart  Typ = Allgemeines Modul
' **************************************************************

Option Explicit
	
Public Sub Starte_frmControlTest()
	frmControlTest.Show
End Sub
Tabelle1
 ABCDE
1     
2 Spalte 1Spalte 2Spalte 3 
3 102030 
4 100200300 
5     
6     
7 Textbox:Servus  
8     
9 Listboxziel:   
10     
 



Tatsächlich ist die Nomenklatur von VB/A hier eher erschwerend als Verständnisfördernd.

Aber am Beispiel lernt man am Besten:

Starten Sie die Userform .
Die txtGebunden ist leer.
Geben Sie in die txtGebunden etwas ein. Wechseln Sie dann in die txtUngebunden.
Sie werden auf dem Tabellenblatt keine Veränderung sehen.

Wir beenden die Userform und gehen in die Eigenschaften von txtGebunden.
Dort wählen wir die Eigenschaft: ControlSource und schreiben dort C7 hinein (Die Zelle in welcher Hallo steht).

Wenn Sie die Eigenschaft verlassen, sehen Sie sofort in ihrer TextBox den Erfolg.Das Wort Hallo steht drinne.

Starten Sie nun die Userform und schreiben Sie nun in die txtGebunden das Wort Servus.
Noch passiert nichts, aber wenn Sie nun in die txtUngebunden wechseln, also die txtGebunden verlassen, wird sich C7 aktualisieren.


Beenden Sie nun die Userform und schauen sich diese an.
die txtGebunden hat nun Servus drinne stehen. Und im Tabellenblatt steht auch Servus und beim Wiederstart ist auch Servus da.

Bevor ich nun weiter erkläre, spielen Sie ein wenig damit herum.
 Ihre Meinung zu Online Excel Geben Sie uns ein Feedback
ControlSource ein wahrlich widersprüchliches Wort

Mit dem Eintrag in ControlSource C7 haben wir gesagt, dass die Textbox ihren Inhalt aus C7 beziehen soll.

Hinweis:

Dies bezieht sich natürlich auf das aktive Tabellenblatt. Selbstverständlich kann man die Adressen wie immer präzesieren aber dies ist nicht Thema.


Tatsächlich ist aber die ControlSource - Man könnte dies übersetzen in Steuerelement Quelle -
auch gleichzeitig ControlTarget also SteuerelementZiel (Beide Worte sind nur Erklärungsworte)

Tatsächlich will uns VB/A damit vermitteln, dass das Steuerelement an die dort angegebenen Zelle gebunden ist und sowohl seinen Wert dorther bezieht als auch bei Veränderung seinen Wert dorthin zurückschreibt.

Wir werden aber später noch sehen, dass dies auch nicht so richtig stimmt, wenn wir mit einem anderen Steuerelement arbeiten.

Wir können aber eines schonmal festhalten:


Ein gebundenes Steuerelement steht in Beziehung mit einem anderen Objekt, welches entweder die Daten liefert, die Daten empfängt oder beides.

Kommen wir nun zur Listbox - diese ist schon etwas tückischer.

Hier interessieren uns erstmal 2 Eigenschaften:
ColumnCount
: Dort setzen Sie den Wert auf 3
RowSource
: : Dort schreiben Sie B2:D5 hinein. Beachten Sie: RowSource und nicht ControlSource

Wenn Sie RowSource im Eigenschaftsfenster verlassen haben, sollten Sie jetzt schon in ihrer Listbox die Inhalte der Zellen B2:D5 sehen. (Gegebenenfalls müssen Sie die Listbox etwas breiter machen)

Um das Ganze noch deutlicher wahrzunehmen, wechseln Sie in die Excelumgebung und ändern Sie den Wert in Zelle B3 und gehen Sie wieder zurüch in die Entwicklungsumgebung uns schauen Sie auf ihr Formular - und siehe da!

Kurzer Ausflug zum direkten Verfolgen:

Dieser Ausflug ist nur ab Excel 2000 möglich.

(Stimmt zwar nicht ganz, man kann auch für E97 dies ermöglichen aber dies ist ein anderes Thema)


Ändern Sie im Modul mdlStart die Zeile:

frmControlTest.Show
in:
frmControlTest.Show vbModeless

Wenn Sie jetzt über diesen Befehl die Userform öffnen, können Sie im Tabellenblatt bei geöffneter Userform arbeiten.
Und wenn Sie nun z.B. in B3 etwas ändern und die Zelle verlassen, wird es direkt an die ListBox übergeben.

ControlSource der Listbox - ein zweifelhaftes Wort

Gehen Sie nun wieder in die Eigenschaften der Listbox und geben Sie dort bei ControlSource C9 ein.
Starten Sie nun die Userform und klicken Sie auf Zeilen in der Listbox und verfolgen Sie, was in der Zelle C9 passiert.

Und siehe da, die Einträge in der ersten Spalte werden in die Zelle C9 geschrieben!

Und hier ist die Bezeichnung ControlSource wirklich irreführend, da definitiv keine Daten von der Zelle C9 kommen, sondern Daten in die Zelle geschrieben werden.

BoundColumn zur Steuerung.

Sehen Sie dazu auch den Beitrag zu BoundColumn.


Wenn Sie nun in den Listboxeigenschaften bei BoundColumn den Wert von 1 nach 2 ändern, wird die Zelle C9 mit anderen Werten der Listbox gefüllt.
Warum dies so ist, können Sie im genannten Beitrag nachlesen.

Zusammenfassung Listbox:

Die Datenquell, welche ich in der Listbox aus dem Tabellenblatt anzeigen will, muss ich über die RowSource spezifizieren.
RowSource in etwa: Reihenquelle.
Dass hier auch Spalten mit einfließen ist aus dem Namen RowSource auch wieder nicht klar erkennbar.
Letztendlich bezeichnen wir einen Bereich.
Weiterhin muss ich den Columncount noch eingeben.

Will ich Daten aus der Listbox in eine Zelle zurückschreiben und zwar über den Weg des gebundenen Steuerelementes,
(ich kann alternativ ja auch selbst einen Code schreiben, um in eine Zelle zu schreiben)
muss ich die Zielzelle in ControlSource angeben.
Was dort ausgegeben wird (welche Spalte), ist von meiner BoundColumn abhängig.

Abschluß:

Nun haben wir den Commandbutton noch überhaupt nicht genutzt.
Aber er soll dafür da sein, dass Sie dort z.B. solchen Code hineinschreiben können wie:
lstGebunden.BoundColumn = 2
oder lstGebunden.ControlSource = D12
oder oder...
Einfach für Sie zum Testen, wie man die Eigenschaften per Code setzt.

Und ob gebundene Steuerelemente sinnvoll sind, ist ein anderes Thema, welches Sie ganz für sich selbst entscheiden müssen.


Wichtig ist nur, dass Sie bei Steuerelementen die eine Bindung ermöglichen, genau schauen, welche Eigenschaften was bewirken und sich nicht von den Namen irritieren lassen.
Wie aufgezeigt, können diese mehr als widersprüchlich sein.

Weitere Artikel der Gruppe: Steuerelemente Aus Excel VBA
Nach oben