Anzeige
Archiv - Navigation
984to988
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
984to988
984to988
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Welches Ereignis ist das richtige ??

Welches Ereignis ist das richtige ?
13.06.2008 21:27:29
Joachim
Hi ich noch mal,
nach dem ich nun mit meiner Combobox alles hingebracht habe, habe ich noch ein Problem:
Also , in meiner Tabelle habe ich die Combobox , die wird beim Start mit Daten aus einer anderen Tabelle geladen. Wenn ich die Combobox nun öffne und eine Auswahl treffe, dann wir mit dem Befehl :

Private Sub ComboBox2_DropButtonClick()
ActiveCell.Value = ComboBox2.Value
End Sub


in meine aktive Zelle reingeschrieben. So nun das Problem.
Jedesmal, wenn ich nun die Combobox mit dem Pfeil nach unten öffnen will, wird der Code bereits ausgeführt. Danach habe ich mal das Click-Ereignis aubrobiert, da reagiert der Code aber garnicht.
Was für ein Ereignis muss ich wählen, damit der Code erst ausgeführt wird, wenn ich tatsächlich in die Auswahlliste der Combobox klicke, also wenn ich wirklich eine Auswahl getroffen habe und nicht bereits, wenn ich die Combobox überhaupt nur anklicke.
Danke mal
Gruss
Joachim

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

Betreff
Datum
Anwender
Anzeige
Das Change-Ereignis...oT
13.06.2008 21:36:04
{Boris}
Grüße Boris

AW: Das Change-Ereignis...oT
13.06.2008 23:35:00
Joachim
Hi,
aber das Change Ereignis wirde auch schon durchgeführt, wenn die Tabelle gestartet und die daten von der einen Tabelle in die Combobox geladen werden. In diesen Moment wird das Ereihnis durchgeführt.
Somit wird beim Start jedes mal die Information in der aktiven Zelle überschrieben, obwohl ich das nicht will.
Gibt es noch eine anderes Ereignis ?
Danke
Joachim

AW: Das Change-Ereignis...oT
14.06.2008 06:15:00
Luschi
Hallo Joachim,
Du mußt vor dem Füllen der 'ComboBox2' die Ereignis-Ausführung deaktivieren und danach wieder freigeben.
Application.EnableEvents = False
'Prozedur zum Schreiben der Daten in die ComboBox
ComboBox2_Fuellen
'nicht vergessen
Application.EnableEvents = True
Gruß von Luschi
aus klein-Paris

Anzeige
Problem immer noc da, hier der Code:
14.06.2008 19:25:24
Joachim
Hi,
habe den Rat befolgt, aber irgend wie scheint das mit dem deaktivieren und wieder aktivieren des Change Ereignisses nicht zu funktionieren. Die Zelle wirde weiterhin bei start der Datei und nach dem laden in die Combobox überschrieben.
Woran kann das noch liegen ? Hier mein Code:

Private Sub Worksheet_Activate()
Call Fuellen
End Sub


Sub Fuellen()
Application.EnableEvents = False
Dim dic As Object
Dim xKey As Variant
Dim iRow As Long, CLetzte As Long
ComboBox1.Clear
CLetzte = IIf(IsEmpty(Range("C65536")), Range("C65536").End(xlUp).Row, 65536)
Set dic = CreateObject("scripting.dictionary")
For iRow = 1 To CLetzte
If Not IsEmpty(Cells(iRow, 3)) Then
xKey = Cells(iRow, 3).Value
dic(xKey) = 0
End If
Next
For Each xKey In dic
ComboBox1.AddItem xKey
Next
dic.RemoveAll
Set dic = Nothing
Call Sortieren1
ComboBox1.ListIndex = 0
Application.EnableEvents = True
End Sub


Sub Sortieren1()
Dim Letzter As Integer, Naechster As Integer
Dim i As String
With ComboBox1
For Letzter = 0 To .ListCount - 1
For Naechster = Letzter + 1 To .ListCount - 1
If .List(Letzter) > .List(Naechster) Then
i = .List(Letzter)
.List(Letzter) = .List(Naechster)
.List(Naechster) = i
End If
Next Naechster
Next Letzter
End With
End Sub


Anzeige
AW: Problem immer noc da, hier der Code:
14.06.2008 23:27:00
Tino
Hallo,
Application.EnableEvents
Damit kann man nur Eventereignisse auf Tabellenblatt abstellen
Beispiel Dein Worksheet_Activate oder Doppelklick in Zelle usw.
Click Ereignis ist meiner Meinung nach richtig.
Mit einer neuen Variablen (Aktion=True oder False) solltest du dies in den griff bekommen.

Option Explicit
Dim Aktion As Boolean
Private Sub ComboBox1_Click()
If Aktion = True Then Exit Sub
Debug.Print ComboBox1.Text
End Sub
Private Sub Worksheet_Activate()
Call Fuellen
End Sub
Sub Fuellen()
Dim dic As Object
Dim xKey As Variant
Dim iRow As Long, CLetzte As Long
ComboBox1.Clear
CLetzte = IIf(IsEmpty(Range("C65536")), Range("C65536").End(xlUp).Row, 65536)
Set dic = CreateObject("scripting.dictionary")
For iRow = 1 To CLetzte
If Not IsEmpty(Cells(iRow, 3)) Then
xKey = Cells(iRow, 3).Value
dic(xKey) = 0
End If
Next
For Each xKey In dic
ComboBox1.AddItem xKey
Next
dic.RemoveAll
Set dic = Nothing
Call Sortieren1
Aktion = True
ComboBox1.ListIndex = 0
Aktion = False
End Sub
Sub Sortieren1()
Dim Letzter As Integer, Naechster As Integer
Dim i As String
With ComboBox1
For Letzter = 0 To .ListCount - 1
For Naechster = Letzter + 1 To .ListCount - 1
If .List(Letzter) > .List(Naechster) Then
i = .List(Letzter)
.List(Letzter) = .List(Naechster)
.List(Naechster) = i
End If
Next Naechster
Next Letzter
End With
End Sub


Gruß Tino
www.excelvba.eu

Anzeige
AW: Problem immer noc da, hier der Code:
15.06.2008 15:30:17
Joachim
Hallo Tino,
habe Dein Code bei mir so geändert, hatte auch auf das erste mal funktioniert. Beim zweiten hinsehen viel mir auf, dass der Code nur bei Zellen richtig funktioniert, die über die tastatur geschrieben wurden. Sobald ich den Code bei Zellen ausbrobiere, die per Makro mit daten beschrieben wurden, besteht das Problem weiterhin. Komisches Verhalten.
Soll ich Dir mal den kompletten Code kopieren ?
Gruss
Joachim

AW: Problem immer noc da, hier der Code:
15.06.2008 15:59:00
Tino
Hallo,
nur zu vieleicht finden wir noch eine Lösung
Gruß Tino

www.ExcelVba.eu


Anzeige
AW:Hinweis
15.06.2008 16:36:40
Tino
Hallo,
noch ein Hinweis.
Bei Deinem Beispiel, reagiert die die Combo – Click auf diese Zeile
ComboBox1.ListIndex = 0
Daher habe ich diese, durch die neue Variable eingeschränkt
Aktion = True
ComboBox1.ListIndex = 0
Aktion = False

Also bei Aktion = True, wird das Click-Ereignis direkt abgebrochen.
Gibt es in Deinem Code weitere Befehle die dieses Click Ereignis unerwünscht auslösen, so musst du diese ebenfalls abblocken.
Gruß Tino

www.ExcelVba.eu


AW: AW:Hinweis
15.06.2008 19:24:00
Joachim
Hi Tino,
So, nun habe ich den Code so weit gerichtet, dass der Effekt nicht mehr auftaucht. Nun habe ich noch ein kleines Problem: wenn ich die Tabelle starte, werden die Daten eingelesen. Auch wenn ich in der Combobox eine Auswahl treffe, wird sie in die aktive Zelle geschrieben. Soweit so gut.
Wenn ich nun eine andere Zelle anklicke und dort über die Combobox die GLEICHE Auswahl treffe (wie zuvor) , wird nichts in die Zele geschrieben. Wenn ich dagegen immer wieder eine andere Auswahl aus der Combobox treffe , ist das kein Problem. Aber sobald ich zwei mal die gleiche Auswahl treffe, also, wenn ich in zwei Zellen den gleichen Text reinschreiben will, wird die zweite Auswahl aus der Combobox nicht übernommen.
Kannst Du sehen, werum ?
Hier der komplette Code:
Dim Aktion As Boolean

Private Sub ComboBox1_Click()
If Aktion = True Then Exit Sub
Debug.Print ComboBox1.Text
ActiveCell.Value = ComboBox1.Value
End Sub



Private Sub ComboBox2_Click()
If Aktion = True Then Exit Sub
Debug.Print ComboBox2.Text
Sheets("Initialien").Range("H1") = Me.ComboBox2.Value
ActiveCell.Value = Sheets("Initialien").Range("I1")
End Sub



Private Sub Worksheet_Activate()
Call Fuellen
Call Fuellen2
End Sub


Sub Fuellen()
Aktion = True
Dim dic As Object
Dim xKey As Variant
Dim iRow As Long, CLetzte As Long
ComboBox1.Clear
CLetzte = IIf(IsEmpty(Range("C65536")), Range("C65536").End(xlUp).Row, 65536)
Set dic = CreateObject("scripting.dictionary")
For iRow = 1 To CLetzte
If Not IsEmpty(Cells(iRow, 3)) Then
xKey = Cells(iRow, 3).Value
dic(xKey) = 0
End If
Next
For Each xKey In dic
ComboBox1.AddItem xKey
Next
dic.RemoveAll
Set dic = Nothing
Call Sortieren1
ComboBox1.ListIndex = 0
Aktion = False
End Sub


Sub Sortieren1()
Dim Letzter As Integer, Naechster As Integer
Dim i As String
With ComboBox1
For Letzter = 0 To .ListCount - 1
For Naechster = Letzter + 1 To .ListCount - 1
If .List(Letzter) > .List(Naechster) Then
i = .List(Letzter)
.List(Letzter) = .List(Naechster)
.List(Naechster) = i
End If
Next Naechster
Next Letzter
End With
End Sub


Sub Fuellen2()
Aktion = True
Dim col As New Collection
Dim iRow As Long, aRow As Long
Dim wksA As Worksheet
Set wksA = ThisWorkbook.Worksheets("Initialien")
aRow = IIf(IsEmpty(wksA.Cells(65536, 1)), wksA.Cells(65536, 1).End(xlUp).Row, 65536)
On Error Resume Next
ComboBox2.Clear
For iRow = 1 To aRow
If Not IsEmpty(wksA.Cells(iRow, 1)) Then
col.Add wksA.Cells(iRow, 1), wksA.Cells(iRow, 1)
If Err = 0 Then
ComboBox2.AddItem wksA.Cells(iRow, 1)
Else
Err.Clear
End If
End If
Next iRow
On Error GoTo 0
Call Sortieren2
ComboBox2.ListIndex = 0
Aktion = False
End Sub


Sub Sortieren2()
Dim Letzter As Integer, Naechster As Integer
Dim i As String
With ComboBox2
For Letzter = 0 To .ListCount - 1
For Naechster = Letzter + 1 To .ListCount - 1
If .List(Letzter) > .List(Naechster) Then
i = .List(Letzter)
.List(Letzter) = .List(Naechster)
.List(Naechster) = i
End If
Next Naechster
Next Letzter
End With
End Sub


Anzeige
AW: AW:Hinweis
15.06.2008 19:51:55
Tino
Hallo,
habe mal ein neues Event eingebaut (Worksheet_SelectionChange),
bei Auswahl einer neuen Zelle wird die Cobo auf -1 gesetzt.

Private Sub ComboBox1_Click()
If Aktion = True Then Exit Sub
Debug.Print ComboBox1.Text
ActiveCell.Value = ComboBox1.Value
End Sub
Private Sub ComboBox2_Click()
If Aktion = True Then Exit Sub
Debug.Print ComboBox2.Text
Sheets("Initialien").Range("H1") = Me.ComboBox2.Value
ActiveCell.Value = Sheets("Initialien").Range("I1")
End Sub
Private Sub Worksheet_Activate()
Call Fuellen
Call Fuellen2
End Sub
Sub Fuellen()
Aktion = True
Dim dic As Object
Dim xKey As Variant
Dim iRow As Long, CLetzte As Long
ComboBox1.Clear
CLetzte = IIf(IsEmpty(Range("C65536")), Range("C65536").End(xlUp).Row, 65536)
Set dic = CreateObject("scripting.dictionary")
For iRow = 1 To CLetzte
If Not IsEmpty(Cells(iRow, 3)) Then
xKey = Cells(iRow, 3).Value
dic(xKey) = 0
End If
Next
For Each xKey In dic
ComboBox1.AddItem xKey
Next
dic.RemoveAll
Set dic = Nothing
Call Sortieren1
ComboBox1.ListIndex = 0
Aktion = False
End Sub
Sub Sortieren1()
Dim Letzter As Integer, Naechster As Integer
Dim i As String
With ComboBox1
For Letzter = 0 To .ListCount - 1
For Naechster = Letzter + 1 To .ListCount - 1
If .List(Letzter) > .List(Naechster) Then
i = .List(Letzter)
.List(Letzter) = .List(Naechster)
.List(Naechster) = i
End If
Next Naechster
Next Letzter
End With
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Aktion = True
ComboBox1.ListIndex = -1
Aktion = False
End Sub


Gruß Tino

Anzeige
Vielen Dank , jetzt klapps :-))
15.06.2008 20:07:00
Joachim
Danke für Deine ausführliche Hilfe.
Joachim

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige