Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1404to1408
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Listenfeld Active-X mit Makro (Zelle) verbinden
22.01.2015 13:20:22
Gisela
Hallo liebe Gemeinde,
ich habe Zelle BX12 mit dem Makro LetzZeilS ausgestattet, was auch hervorragend funktioniert:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$BX$12" Then LetzZeilS
End Sub
Für die Felder BX1:BX12 habe ich eine Active X-LIste generiert
Private Sub ListBox22_Click()
End Sub
Wenn ich jetzt in der Liste auf den Eintrag für das Feld BX12 klicke, wird leider kein Makro ausgeführt. Wie kann ich das ändern?
Danke
LG
Gisela

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listenfeld Active-X mit Makro (Zelle) verbinden
22.01.2015 13:24:20
Daniel
Hi
im Prinzip so:
Private Sub ListBox22_Click()
If Listbox22.Text = Range("BX12").Text Then LetzZeilS
End Sub

Daniel

AW: Listenfeld Active-X mit Makro (Zelle) verbinden
23.01.2015 18:40:43
Gisela
Hallo Daniel,
vielen Dank für Deine Antwort, technisch funktioniert es sehr gut.
Leider entwickelt aber Excel dadurch eine grosse Intabilität, mal sind nach dem Öffnen der Datei die Listenfelder verrutscht, mal ganz vershwunden, mal werden beim Ausführen anderer Makros nicht gewollte Ergebnisse vornehmlich in Form von Positionsverschiebungen produziert. Gibt es noch eine andere Möglichkeit, Makros in Dropdowns zu legen?
LG
Gisela

Anzeige
AW: Listenfeld Active-X mit Makro (Zelle) verbinden
24.01.2015 11:40:02
daniel
Hi
Du kannst statt den ActiveX-DropDowns auch die Guten alten Formular-Steuerelemente verwenden, die sind diesbezüglich etwas stabiler.
Das Ausgewählte Element wird hier in einer Zelle abgelegt und wenn bei Klick ein Makro ausgeführt werden soll, dann musst du eines aus einem allgemeinen Modul zuweisen.
Du kannst auch die DropDowns aus der Datenüberprüfung (Liste) verwenden.
Dann muss der Code ins Change-Event des Tabellenblatts und du kannst über die Variable Target abfragen welche Zelle geändert wurde und dann entsprechend reagieren.
Gruss Daniel

AW: Listenfeld Active-X mit Makro (Zelle) verbinden
26.01.2015 03:36:21
Gisela
Hallo Daniel,
also: ich habe ein Listenfeld-Formularsteuerelement eingefügt und mit den Feldern CM1:CM5 gefüttert. Dann folgende 5 Zeilen eingetragen (ENTWURFMODUS-CODE):
Sub Listenfeld108_BeiÄnderung()
If Listenfeld108.Text = Range("CM1").Text Then Druckerzeichen
If Listenfeld108.Text = Range("CM2").Text Then Eckrand
If Listenfeld108.Text = Range("CM3").Text Then Formnummer
If Listenfeld108.Text = Range("CM4").Text Then HAN
If Listenfeld108.Text = Range("CM5").Text Then Plattenfehler
End Sub
Wenn ich jetzt innerhalb des Formularsteuerelements auf einen Eintrag doppelklicke erscheint die Fehlermeldung
Laufzeitfehler 424
Objekt erforderlich
Was mache ich falsch?
LG
Gisela

Anzeige
AW: Listenfeld Active-X mit Makro (Zelle) verbinden
26.01.2015 15:10:30
Daniel
Hi
bei einem Forumlar-Listenfeld musst du so vorgehen:
1) legen in den Formular-Steuereelementeigenschaften (Kontextmenü - Steuerelement formatieren - Steuerung) eine Zellvernüpfung fest.
in diese Zelle wird das Ergebnis der Auswahl als Indexnummer geschrieben (erste Zeile gewähtl: 1, zweite Zeile gewählt: 2, usw)
2. Im Code musst du dann diese Nummer abfragen und entsprechend reagieren:
If Range("?") = 1 Then Druckerzeichen
If Range("?") = 2 Then Eckrand
Usw
Gruß Daniel

AW: Listenfeld Active-X mit Makro (Zelle) verbinden
27.01.2015 00:59:01
Gisela
Hallo Daaniel,
vielen Dank für Deine Anleitung, die funzt. Nachteilig ist nur, dass ich bei dem Klick auf die Bildlaufleiste auch den Makro auslöse und er genau 1 Feld nach unten/oben scrollt (wie kann ich dieses Verhalten ändern?) - ich habe 6 Makros auf L11 verknüpft - folgendes sub:
Sub Listenfeld108_BeiÄnderung()
If Range("L11") = 1 Then Druckerzeichen
If Range("L11") = 2 Then Eckrand
If Range("L11") = 3 Then Formnummer
If Range("L11") = 4 Then HAN
If Range("L11") = 5 Then Plattenfehler
If Range("L11") = 6 Then Viererblock
End Sub
Wenn ich das ganze Feld so aufziehe, dass alle 6 Einträge sichtbar sind, tritt dieses Problem nicht auf, die Bildlaufleiste ist zwar sichtbar, aber ein Klick darauf löst keinen Makro aus.
LG
Gisela

Anzeige
AW: Listenfeld Active-X mit Makro (Zelle) verbinden
27.01.2015 12:55:54
Daniel
Hi
dann mach die Listbox doch gross genug für alle Einträge.
Ist für den Anwender sowiso angenehmer, wenn er gleich alle Optionen sieht.
Wenns ein Platzproblem gibt, kannst du anstelle der Listbox auch eine Combobox verwenden, da klappt die Auswahlliste erst auf Anforderung auf und du kannst sie gross genug machen.
Wenns zwingend eine Listbox mit Scrollbar sein muss, könntest du folgenden Workaround verwenden:
Static LetzterBefehl as Long
If Range("L11").Value  LetzterBefehl Then
If Range("L11") = 1 Then Druckerzeichen
If Range("L11") = 2 Then Eckrand
If Range("L11") = 3 Then Formnummer
If Range("L11") = 4 Then HAN
If Range("L11") = 5 Then Plattenfehler
If Range("L11") = 6 Then Viererblock
LetzterBefehl = Range("L11")
End If
dh du merkst dir den zuletzt ausgeführten Befehl in einer statischen Variable und führst den Code nur aus, wenn ein neuer Befehl ausgewählt wurde.
damit vermeidest du die wiederholte Ausführung beim Scrollen.
(wobei es meiner Ansicht nach ein Bug ist, dass beim Scrollen das verknüpfte Makro ausgeführt wird)
Gruß Daniel

Anzeige
AW: Listenfeld Active-X mit Makro (Zelle) verbinden
28.01.2015 11:26:11
Gisela
Hallo Daniel,
danke für die Erweiterung und Erläuterungen! Du hast natürlich Recht bei kleineren Listenfeldern, aber ich habe jetzt auch welche mit bis zu 16 Einträgen und wenn ich die immer aufgeklappt lasse, nimmt das mächtig Platz in Anspruch...
Bzgl. des Workarounds tritt folgendes kleines Problem auf: wenn ich die Datei öffne, wird nach einem Klick auf die Bildlaufleiste das Makro ausgeführt, ab dem zweiten Klick auf die Leiste dann nicht mehr. Und das ist nach jedem Öffnen so, egal ob ich vorher etwas an der Datei verändert - oder nicht - habe.
LG
Gisela

AW: Listenfeld Active-X mit Makro (Zelle) verbinden
28.01.2015 13:24:42
Daniel
dann gehe so vor:
1. mache LetzterBefehl zu einer Projektweit gültigen Variable, hierzu deklarierst du sie in einem allgemeinen Modul oberhalb der Markos, die Zeile mit Static entflällt:

Option Explicit
Public LetzterBefehl as Long
Sub DeinMakro()
If Range("L11")  LetzterBefehl
...
2. Ins Modul "DieseArbeitsmappe" kommt dann folgender Code (Tabellenblattname ggf anpassen):
Private Sub Workbook_Open()
LetzterBefehl = Sheets("Tabelle1").Range("L11").Value
End Sub
Gruß Daniel

Anzeige
AW: Listenfeld Active-X mit Makro (Zelle) verbinden
29.01.2015 15:25:29
Gisela
Hallo Daniel,
suuper, funzt einwandfrei!!!
Vielen, vielen Dank!!!
LG
Gisela

AW: Listenfeld Active-X mit Makro (Zelle) verbinden
30.01.2015 14:12:22
Gisela
Hallo Daniel,
noch eine Frage:
wenn ich jetzt das blau hinterlegte Feld anklicke wird der Makro ausgeführt, wenn ich dann wieder zurückgehe und den Makro ein zweites Mal ausführen will, tut cih ettz dann wieder etwas (egal, ob Einfach- oder Doppelklick), wenn ich zuvor einen anderen Makro innerhalb dieser Liste ausgeführt habe, d.h. der maerkierte Makro kann nicht direkt ausgeführt werden.
Wie kann ich das ändern?
Danke und LG
Gisela

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige