Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1356to1360
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
ComboBox - erstes Item reagiert nicht
29.04.2014 10:35:36
amn
Guten Morgen,
nachdem ich letzte Woche schon dachte die Sache wäre vom Tisch (Thema MIN, MAX, ...), kam Cheffe an: Ähm - ich hätte noch gerne ...
Letztlich ging es darum neue Abschnitte einfügen zu können und sich die Formeln anpassen.
Gelöst habe ich das nun mit einer Combobox, die gefüllt wird in dem eine Funktion über die Zeile 2 rauscht und sich alle "Überschriften" wie Global to Global etc. einsammelt (ohne Doppelte oder Leere).
Bei Auswählen eines Items wird dann hinter dem Bereich ein Neuer angelegt, der genauso heißt wie der Vorgänger. Formate und Formeln kopiere ich dann rüber.
Damit sich die Formeln auch ja weiter aktualisieren hab ich als allerletzten Bereich ein Template angelegt.
Bei Auswahl von Template wird dann der neue Bereich unmittelbar davor angelegt.
Grundsätzlich funktioniert das alles, jedoch mit 2 "kleinen" Einschränkungen:
Zum einen kann ich das 1. angezeigte Item (hier Global to Global) nicht auswählen bzw. es reagiert nicht.
Wähle ich das 2. oder eins der folgenden funktioniert das ganze bzw. danach funktioniert auch das 1.
Ein unmittelbares hintereinander Auswählen des gleichen Item funktioniert auch nicht.
Click- und Change Ereignisse habe ich beide wechselseitig ausprobiert, leider ohne Erfolg. Beide zusammen führen zu einem doppelten Einfügen.
Wenn ich die Datei speichere zu einen Zeitpunkt speichere wenn der Fokus auf dem 2. oder einem Folgenden steht macht sich das Makro beim nächsten öffnen der Datei selbständig und für einen Beeich ein analog des Items beim speichern.
Was hab ich alles Falsch gemacht oder vergessen?
Das Zweite wäre das Aktualisieren der Combobox, das immer dann stattfinden solte, wenn ein Bereich hinzugefügt wurde. Hier mal mein bisheriges Werk:
https://www.herber.de/bbs/user/90387.xlsm
Für euere Unterstützung und Mühe sag ich im Voraus schon mal Danke.
LG
amn

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ComboBox - erstes Item reagiert nicht
29.04.2014 11:05:37
EtoPHG
Hallo Anm,
Das kann elegant so gelöst werden, dass als erster Eintrag in der Combobox ein 'neutraler' Eintrag steht, der aussagt, was zu tun ist. Damit musst du 2 Codeteile anpassen:
Function FillCombo()
Set rItems = CreateObject("scripting.dictionary")
rItems.Add "Please select...", 0        ' Neutrales Item als erstes

und
Private Sub AddNewColumn_Change()
With AddNewColumn
If .ListIndex > 0 Then
sItem = ActiveSheet.AddNewColumn.Value
InsertCol (sItem)
MsgBox sItem & " insert done!", vbInformation
.ListIndex = 0
End If
End With
End Sub
Gruess Hansueli

Anzeige
AW: ComboBox - erstes Item reagiert nicht
29.04.2014 11:29:06
amn
Hallo Hansueli,
so wenig Text (Code) und so ne große Wirkung ...
Hab's gerade ausprobiert - Danke.
Wegén der Aktualisierung nach dem Change-Ereignis hatte ich mir gerade gedacht FillCombo in der Art aufzurufen

Private Sub AddNewColumn_Change()
With AddNewColumn
If .ListIndex > 0 Then
sItem = ActiveSheet.AddNewColumn.Value
InsertCol (sItem)
MsgBox sItem & " insert done!", vbInformation
.ListIndex = 0
End If
End With
FillCombo
End Sub

Dann bekomme ich beim Dictionary (Spaltenüberschriften einsammeln) einen Stapelüberlauf!
Mir geht es bei der Aktualisierung vorallem darum, daß nach dem Anlegen die Überschrift von Template geändert wird. In diesem Fall sollte diese Änderung in der ComboBox berücksichtigt werden.
Grüße
amn

Anzeige
AW: ComboBox - erstes Item reagiert nicht
29.04.2014 11:57:17
EtoPHG
Hallo Amn (was für Eltern, nennen ihr Kind so? ;-),
Sagt der Zeiger zum Stapel, zeig nicht auch mich, sonst lauf ich über...;-)
So ganz klar, ist mir die Beschreibung des Problems nicht, aber versuch mal:
Option Explicit
Private Sub AddNewColumn_Change()
Static bExit As Boolean
If bExit Then Exit Sub
With AddNewColumn
If .ListIndex > 0 Then
InsertCol (.Text)
MsgBox .Text & " insert done!", vbInformation
.ListIndex = 0
bExit = True
FillCombo
bExit = False
End If
End With
End Sub
Gruess Hansueli

AW: ComboBox - erstes Item reagiert nicht
29.04.2014 14:21:50
amn
Hallo Hansueli,
das hat funktioniert - Danke
Während des Einbauen und Testen fiel mir dann auch mein Denkfehler auf!
Wenn ich unmittelbar nach dem Ändern einer Überschrift die ComboBox aktualisieren möchte, damit die neue Überschrift auch gleich zur Verfügung steht, muss ich wohl eher auf eine Veränderung innerhalb dieser Zeile achten. Gesagt - getan:-)

Private Sub Worksheet_Change(ByVal Target As Range)
LCol = gLCol
If Not Application.Intersect(Target, Range("d2:" & LCol & "2")) Is Nothing Then
FillCombo
End If
End Sub
Benötige ich den Vorschlag von dir eigentlich dann noch in dieser Form?
Kannst du mir kurz erläutern was die "Erweiterung" bExit nun konkret tut und wieso aus sItem ein .Text wurde?
Hab deine Lösung bis jetzt noch drin und keine "negativen" Auswirkung feststellen können.
Gruß
amn|uwe

Anzeige
AW: ComboBox - erstes Item reagiert nicht
29.04.2014 14:44:14
EtoPHG
Hallo uwe,
1. Nein meinen Vorschlag kannst du dann wieder ausbauen, da du nun im _Change der Zeile kontrollierst.
2. bExit verhindert, dass wenn innerhalb des Combobox_Change Ereignis eine Veränderung der Combobox selbst erfolgt (was mit FillCombo definitiv der Fall ist), wiederum ein _Change Ereignis angestossen wird, was zu einem Stapelüberlauf führen kann.
3. Hätte ich noch einige Verbesserungsvorschläge:
3a) Das ganze gLCol/gColA Gefrikel ist IMHO völlig überflüssig. Arbeite mit Spalten-Zahlen anstelle von Spalten-Buchstaben, so könnte z.B. deine Code im neuen _Change-Ereignis heissen:
3b)

If target.Row = 2 And _
target.Column > 3 _
And target.Column 
Gruess Hansueli
Anzeige

50 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige