ListBox

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
ListBox
Bild

Betrifft: ListBox
von: Rolf H.
Geschrieben am: 27.06.2015 10:04:54

Hallo zusammen,
wie kann ich die Ausgabeadresse bei einer Listbox variabel gestalten?
Das folgende Makro klappt nicht. In der aktiven Spalte werden immer die letzte Adresse und die neue mit dem Wert gefüllt.
Z.B.
Hans in A1 und A7. Nächster Klick
Ute in A7 und A4 usw.
Seltsam ist auch, dass bei jedem Klick in die Listbox F20 um 5 erhöht wird.

Private Sub ListBox1_Click()
Sheets("Tabelle1").ListBox1.LinkedCell = ActiveCell.Address
[f20] = [f20] + 1
End Sub
Gruß Rolf

Bild

Betrifft: AW: ListBox
von: Daniel
Geschrieben am: 27.06.2015 14:48:25
Hi
das CLICK-Event wird nicht nur dann ausgelöst, wenn der Anwender einen neuen Eintrag auswählt, sondern auch immer dann, wenn der ausgewählte Eintrag geändert wird, egal wie und von wem.
Wenn du im Click-Event selbst den ausgewählten Eintrag änderst, kann sich das Klick-Event auch selber aufrufen und dann wird es mehrfach ausgeführt.
das passiert zum Beispiel dann wenn du mit Sheets("Tabelle1").ListBox1.LinkedCell = ActiveCell.Address die Ausgabezelle änderst und in der neuen Ausgabezelle ein andere Wert drin steht als in der alten.
Gruß Daniel

Bild

Betrifft: AW: ListBox
von: Rolf H.
Geschrieben am: 27.06.2015 14:54:55
Hallo Daniel,
danke für deine Erklärung.
Gibt es überhaupt die Möglichkeit, die "LinkedCell" - Angabe einer Listbox variabel zu halten?
Gruß
Rolf

Bild

Betrifft: AW: ListBox
von: Daniel
Geschrieben am: 27.06.2015 15:12:22
Hi
klar gibt es die.
du machst das ja.
die Frage ist nur, zu welchem Zeitpunkt bzw mit welchem Event diese Aussgabezelle sinnvollerweise geändert wird und ob für deine anderen Aufgaben (hochzählen des Zählers) das Click-Event das geeignete ist oder ob dafür nicht bessere Events gibt.
du könntest beispielsweise die Ausgabezelle der Listbox auch sofort anpassen, wenn du eine Zelle anklickst, dh im Selection-Change-Event des Tabellenblatts.
die Ausführung des Click-Events kannst du hierbei nicht unterbinden.
Der Workaround hierbei ist, dass man eine modulweit gültige Variable anlegt (Deklartion erfolgt ober halb der Makros), welche dann von allen Makros verwendet werden kann.
Diese Variable befüllt man mit einem bestimmen Wert, wenn das Event trotz auslösung nicht ausführt werden soll.
im Eventmakro fragt man dann zuerst diese Variable ab, und führt den Code nur dann aus, wenn die Variable den passenden Wert hat.
sieht in Etwa so aus:

Option Explicit
Dim KeinClickEvent As Boolean
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
KeinClickEvent = True
ListBox1.LinkedCell = ActiveCell.Address
KeinClickEvent = False
End Sub
Private Sub ListBox1_Click()
If KeinClickEvent Then Exit Sub
 [f20] = [f20] + 1
 End Sub

sollte das ganze auf unterschiedlichen Tabellenblättern stattfinden und die Codes für das SelectionChange-Event und die Listbox in anderen Modulen liegen, so musst du die Variable KeinClickEvent in einem allgemeinen Modul (modul1) mit der Option "Public" deklarieren:
Option Explicit
Public KeinClickEvent as Boolean
Gruß Daniel

Bild

Betrifft: AW: ListBox
von: Rolf H.
Geschrieben am: 27.06.2015 16:09:43
Hallo Daniel,
jetzt baue ich deinen Vorschlag ein und muss manches anpassen.
Das dauert bei mir eine Weile und erst dann kann ich ein Erfolgsmeldung starten.
Für deine Hilfe schon mal jetzt herzlichen Dank.
Gruß
Rolf

Bild

Betrifft: AW: ListBox
von: Rolf H.
Geschrieben am: 27.06.2015 16:23:04
Hallo Daniel,
soweit ich jetzt schon überblicken kann, klappt alles vorzüglich!
Nochmals danke für deine Mühe
Gruß
Rolf

 Bild

Beiträge aus den Excel-Beispielen zum Thema "ListBox"