Anzeige
Archiv - Navigation
1104to1108
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 soll nur bestimmte Zeilen zeigen
Jörg-HH
Guten Abend zusammen
habe in einem Thread mit Franz neulich viel über Listboxen gelernt und wollte das nun auf ein ähnliches Problem mit einer Combobox übertragen - aber da hapert es noch etwas ;-)) Ich hab versucht, einiges von dem Code, den Franz mir gesendet hat, zu verwenden
In dieser Datei https://www.herber.de/bbs/user/64630.xls soll die Combobox (nicht in einer Userform, sondern im Blatt) nur die Zeilen anzeigen, bei denen in Spalte C "Ptn" steht (und als Spalten nur die ersten beiden).
Die erste Fehlermeldung kommt schon in der Zeile Me.ComboBox1.Clear - nicht näher bezeichneter Fehler, heißt es da...
Hat jemand 'ne Idee...?
Grüße - Jörg
AW: Combobox soll nur bestimmte Zeilen zeigen
23.09.2009 20:23:50
Harry
Hallo.
eine Box, die mittels Listfillrange gefüllt wird, kann nicht gecleart werden, da sie
an die Datenquelle gebunden ist.
Lies die relevanten Daten mit z.B. AddItem ein.
Grüße Harry
AW: Combobox befüllen über Zellbezug oder Makro
23.09.2009 20:30:18
Daniel
Hi
es gibt 2 Methode, eine List- oder Combobox zu befüllen:
1. über einen Zellbezug in der Listfillrange bzw Rowsource-Eigenschaft
2. über die Funktion combobox1.Add bzw Combobox1.clear im Vorfeld
beide Methoden kann man nicht mischen, aber genau das versuchst du und daher kommt der Fehler, weil
Combobox1.Clear nicht ausführbar ist, wenn in der Eigenschaft Listfillrange ein Zellbezug drinsteht.
als lösungsmöglichkeit gibts 2 varianten:
1. du baust einen Dynamischen Namen, der sich automatisch dem gewünschten Zellbezug anpasst:
der Definitionsstring von "Datenbank" wäre dann:
=BEREICH.VERSCHIEBEN(Datenbank!$A$1;VERGLEICH("Ptn";Datenbank!$C:$C;0)-1;0;ZÄHLENWENN(Datenbank!$C:$C;"Ptn");2)
allerdings muss dann die Liste nach Spalte C sortiert sein, sonst gibts unsinnige Ergebnisse.
2. du löscht den Zellbezug in der Eigenschaft Listfillrange und befüllst die combobox per Makro, das geeignete Event hierfür ist allerdings nicht CHANGE sondern GOTFOCUS bzw ENTER (für Userform) oder auch DROPBUTTONCLICK
Gruß, Daniel
Anzeige
AddItem
23.09.2009 21:13:49
Jörg-HH
Hallo Daniel,
Daten sortieren nach Spalte C geht nicht. In dem Bereich sollen einfach nur alle Adressen gesammelt werden, die Sammlung ist verborgen.
Also per AddItem... hab ich noch nie gemacht. So vielleicht?
Private Sub ComboBox1_DropButtonClick()
Dim wks As Worksheet, Zeile As Long
Set wks = Worksheets("Datenbank")
With wks
For Zeile = 2 To .Cells(1, 1).End(xlDown).Row
If Cells(Zeile, 3).Value = "Ptn" Then
Me.ComboBox1.AddItem Zeile
End If
Next
End With
End Sub

Da kriege ich in der LinkedCell zwar die richtige Zeilnnummer angezeigt, aber in der Combobox erscheint nix.
Grüße - Jörg
Anzeige
AddItem
23.09.2009 22:20:25
Jörg-HH
...hatte vergessen, auf "offen" zu setzen...
liegen nicht unbedingt hintereinander...
24.09.2009 10:03:18
Jörg-HH
Moin Tino
dein Beispiel läuft - leider versteh ich vom Code fast nix, auch nachdem ich so böse Worte wie ReDim, UBound usw. nachgelesen hab... muß ich wohl noch 'n Jahr nachsitzen ;-))
Ein Problem war mir noch eingefallen: Die verschiedenen Ptn's liegen im Original nicht unbedingt hintereinander. Jetzt hab ich mal einen Lieferanten drei Zeilen weiter unten zum Partner gemacht - der wird dann nicht mehr angezeigt.
Wat nu...?
Dir auch 'n schönen Tag!
Jörg
Anzeige
AW: liegen nicht unbedingt hintereinander...
24.09.2009 10:15:12
Tino
Hallo,
habe den Code so eingesetzt, dass nur beim öffnen oder aktivieren der Tabelle die Combo erneuert wird.
So müsste es besser sein.
https://www.herber.de/bbs/user/64646.xls
Gruß Tino
...noch was nicht bedacht :-((
24.09.2009 10:33:59
Jörg-HH
hhmmm, Tino - von hinten durch die Brust ins Auge ;-) ... also diese Zeile
If Not Intersect(Range("A:C"), Target) Is Nothing Then
bedeutet das auf Deutsch: "...wenn ich in Spalte A bis C klicke, dann..." oder?
Dein Satz nur beim öffnen oder aktivieren der Tabelle die Combo erneuert irritiert mich etwas... Also das Blatt Datenbank ist verborgen und nur per Eingabemaske zugänglich. In das Blatt klickt niemand.
Die Combobox liegt in einem anderen Blatt. Mir wird jetzt erst klar, daß das evtl. von Bedeutung sein könnte. Hab sie grad mal verschoben - dann ist sie leer. Kann man das hinbiegen?
Grüße - Jörg
Anzeige
AW: geht auch
24.09.2009 10:45:44
Jörg-HH
ok, so meinte ich das - danke dir! Werd heut Nachmittag mal versuchen, das an meine "richtige" Datei anzupassen...
Schönen Gruß - Jörg
wünsche viel Spaß beim anpassen oT.
24.09.2009 12:09:06
Tino
hmm- ging erst so gut... :-((
24.09.2009 19:33:00
Jörg-HH
Hi Tino
hab das alles in meine Datei übertragen- die CBox einfach kopiert, dann die LinkedCell angepaßt, die erste Spalte auf 0Pt gestellt (weil ich die Nummern ja in der LinkedCell sehe), beim Code hab ich die Blattnamen usw. angepaßt, und dann klappte alles wie geschmiert.
Dann fiel mir auf, daß beim Workbook_Activate die Box gefüllt werden soll - wollte mal sehen, was passiert: hab die Datei gespeichert und geschlossen und wieder geöffnet- und seitdem spricht die Combobox nicht mehr mit mir. Erst zeigte sie statt des Namens nur die Nr, nach einem Wechsel in ein anderes Blatt und zurück zeigt sie gar nichts mehr und ist auch nicht mehr anklickbar.
Was ist eigentlich der Unterschied zwischen WB-Activate und WB-Open? Und wie kann es sein, daß es erst funktioniert und dann nciht mehr?
etwas ratlos... Jörg
Anzeige
verschied.Fenster / Bahnhof
24.09.2009 21:04:22
Jörg-HH
Hi Tino
meine Frage ist geklärt und wirft gleich die nächste auf:
Die Datei hat 3 Fenster geöffnet - so hab ich sie gespeichert, und so ist sie logischerweise wieder aufgegangen. Offenbar lag dann aber ein anderes Fenster vorn. Im Fenster Nr1 und Nr2 ist die Combobox nicht zugänglich, im Fenster Nr3 aber durchaus.
Warum ist das so...?
Grüße - Jörg
noch Probleme b. Speichern u. Wiederöffnen
24.09.2009 23:18:17
Jörg-HH
Hi Tino - noch ein Nachsatz - das hängt jetzt nicht mit irgendwelchen Fenstern zusammen :-)
Wenn ich die Datei speicher und schließe und dann wieder öffne, erscheint im Dropdown statt des Namens nur noch die Nummer.
Wenn ich die Datei dann SO speicher und schließe, erscheint beim erneuten Öffnen statt der Nr. gar nichts mehr.
Was kann man denn da machen?
Grüße - Jörg
Anzeige
Probleme
24.09.2009 23:24:59
Tino
Hallo,
lade am besten ein Beispiel hoch.
Gruß Tino
AW: Probleme
25.09.2009 00:13:01
Jörg-HH
...die Datei, die du geändert hattest, ist tatsächlich ein Beispiel dafür. Ich hab sie hier nochmal mitgegeben
https://www.herber.de/bbs/user/64676.xls
Wenn man sie schließt, tritt genau das Phänomen auf, das ich beschrieben habe. Ich hatte es nur bei meiner Originaldatei zuerst bemerkt.
Beim Speichern muß die Einstellung erhalten bleiben.
Schau mal, was man da ändern müßte...
Grüße - Jörg
AW: Probleme
25.09.2009 07:47:57
Tino
Hallo,
wir könnten uns den Spaltenindex der Combo in eine Zelle schreiben und
beim öffnen uns diesen wieder setzen.
Für das andere verhalten habe ich jetzt auch keine Erklärung,
muss man sich halt damit abfinden das es so ist.
https://www.herber.de/bbs/user/64681.xls
Gruß Tino
Anzeige
Probleme gelöst :-)) ...
25.09.2009 13:15:56
Jörg-HH
Hi Tino
das Speichern beim Schließen klappt jetzt.
Dann war mir was Anderes aufgefallen: Wenn ich auf Blatt Datenbank wechsel und wieder zurück, wird die CBox geleert. Das kommt zwar in der Praxis selten vor, stört aber bei Entwicklungsarbeiten. Daher habe ich das
Private Sub Worksheet_Deactivate()
Call FuelleCombo
ersatzlos weggelassen. Nun stört es nicht mehr.
Ich habe noch eine zweite CBox dazu gesetzt, die ich für die Kunden brauche, und die Datei noch ein bißchen so hingebogen, wie sie "in echt" aussieht - und siehe - es funzt. Jetzt hab ich noch eine Frage, die ich mir aus dem Code nicht erschließen kann, weil ich ihn noch nicht wirklich verstehe:
Beim Öffnen der Datei wechselt die Anzeige in den CBoxen kurz auf die Ziffer und dann wieder auf den Namen. Was im Code ist der Grund dafür?
Grüße - Jörg
Anzeige
AW: Probleme gelöst :-)) ...
26.09.2009 08:44:33
Tino
Hallo,
"Beim Öffnen der Datei wechselt die Anzeige in den CBoxen kurz auf die Ziffe..."
Das kommt durch das setzen des Spaltenidex den wir uns in einer Hilfszelle gemerkt haben.
Gruß Tino
AW: Combobox soll nur bestimmte Zeilen zeigen
24.09.2009 00:26:34
Daniel
Hi
das befüllen einer Combo- oder Listbox geht so:
Private Sub ComboBox1_GotFocus()
Dim wks As Worksheet, Zeile As Long
Set wks = Worksheets("Datenbank")
With ComboBox1
.Clear
For Zeile = 2 To wks.Cells(1, 1).End(xlDown).Row
If wks.Cells(Zeile, 3).Value = "Ptn" Then
.AddItem wks.Cells(Zeile, 1)
.List(.ListCount - 1, 1) = wks.Cells(Zeile, 2)
End If
Next
End With
End Sub

Private Sub ComboBox1_GotFocus()
Dim wks As Worksheet, Zeile As Long
Set wks = Worksheets("Datenbank")
With ComboBox1
.Clear
For Zeile = 2 To wks.Cells(1, 1).End(xlDown).Row
If wks.Cells(Zeile, 3).Value = "Ptn" Then
.AddItem wks.Cells(Zeile, 1)
.List(.ListCount - 1, 1) = wks.Cells(Zeile, 2)
End If
Next
End With
End Sub
die Anzahl der Spalten muss in den Eigenschaften unter "ColumnCount" eingetragen werden
beachte: die Indexzählung beginnt bei 0, daher ist der Index der grössten Zeile/Spalte immer um 1 kleiner als die Anzahl der Zeilen/Spalten.
Gruß, Daniel
Anzeige
hakt etwas...
24.09.2009 09:51:55
Jörg-HH
Moin Daniel
hab ich das richtig verstanden? Wenn ich in der Combobox zwei Spalten sehen will, muß ich bei ColumnCount eine 1 eintragen?
Ich seh dann aber nur eine...
Außerdem seh ich beim ersten Klick auf die Box immer nur eine Zeile. Erst wenn ich die angeklickt habe, kommen die anderen hervor...
guck mal... https://www.herber.de/bbs/user/64643.xls
Schönen Tag (in Hamburg gieps heut Sonne)
Jörg
AW: hakt etwas...
25.09.2009 00:01:41
Daniel
HI
zur ersten Frage
ich schrieb doch: in die Column-Count-Eigenschaft musst du die ANZAHL der vorhandenen Spalten eintragen. damit sollte eigentlich klar sein, was gemeint ist.
Die Index-Nr wir innerhalbv von .LIST verwendet (.List(Zeilenindex. Spaltenindex))
zur zweiten Frage
wenns nicht passt, viellicht mal ein anderes Event nehmen, daß die Combobox befüllt, aber GOTFOKUS ist eigentlich schon das passende.
zur Frage aus dem anderen Beitrag: ja es ist bei dem Makro berücksichtigt, daß die einzutragenden Zeilen nicht direkt untereinander stehen. Wenn dies der Fall wäre, dann wäre die Befüllung über den dynamischen Namen der Befüllung per Makro vorzuziehen.
Gruß, Daniel
tja, wer lesen kann, ist klar im Vorteil :-)
25.09.2009 00:53:57
Jörg-HH
Hi Daniel
hast ja völlig Recht - hatte mich nur durch den eindringlichen Satz genau darunter irritieren lassen und die beiden Informationen miteinander vermengt.
Nun hab ich mal probiert: Setze ich deinen Code in GotFocus, sehe ich im Dropdown zuerst nur eine Zeile - erst, wenn ich die markiere und dann nochmal das Dropdown klicke, kommen die anderen hervor.
Setze ich den Code ins DropButtonClick, dann sehe ich zwar alle Zeilen, aber nach dem Markieren bleibt keine bleibt in der Box hängen.
Hier ist die Datei dazu: https://www.herber.de/bbs/user/64677.xls
Grüße - Jörg
AW: tja, wer lesen kann, ist klar im Vorteil :-)
25.09.2009 16:33:23
Daniel
Hi
wenn ichs mal so teste, dann solltest du das GotFocus-Event nehmen, das funktioniert wie gewünscht, dein beschriebenes Verhalten kann ich nicht feststellen, bei mir werden alle Zeilen angezeigt.
das DropButtonClick-Event ist nicht nicht geeignet, weil es seltsamerweise nochmal aufgerufen wird, wenn man die Auswahl tätigt. Damit wird die Auswahl aber wieder gelöscht. (ich bin da von einem anderen Verhalten ausgegangen, das mehr der Benennung entspricht)
testen kann man dies, in dem man im Makro einen Haltepunkt setzt, dann sieht man, welches Marko wann ausgeführt wird .
Gruß, Daniel
der Teufel im Detail
25.09.2009 17:36:31
Jörg-HH
..hm, ja - hab noch bißchen rumprobiert - es zeigen sich auch dann alle Zeilen, wenn ich nichts markiere, sondern einfach nochmal das Dropdown klicke. Aber beim ersten Klick - da komm ich nicht dran vorbei - sehe ich nur eine Zeile. Komisch, daß das bei dir nicht so aussieht.
Allerdings hab ich mal genauer hingeschaut: Der Rest des Drobdowns ist leer, aber neben dieser einen Zeile ist eine gaaanz kurze Bildlaufleiste...
Ich bau das mal in meine Originaldatei ein - mal sehen, welcher eurer beiden Ansätze da besser funktioniert: mit oder ohne AddItem. Bin ohnehin erstaunt, daß das so viel komplizierter ist als ich dachte...
Schönen Abend, Daniel
Jörg
screenshot von der seltsamen Erscheinung
25.09.2009 23:07:57
der
Hallo Daniel
ich habe deinen Code in meine Originaldatei eingebaut - das klappt, bis auf die seltsame Erscheinung mit der zunächst einzeiligen Anzeige. Damit du dir mal ein Bild davon machen kanst, wovon ich rede, hab ich hier
https://www.herber.de/bbs/user/64713.doc einen Screenshot hochgeladen. Schau doch bitte mal rein, ob dir das was sagt...
Grüße - Jörg
AW: Original-Datei
26.09.2009 00:54:34
Daniel
Hi
Fehler- und Einflussmöglichkeiten gibt es viele, am besten ist es immer, wenn du die Orginaldatei, in der dein Problem auftritt, hier hochlädst.
Nur dann lässt sich konkret eine Aussage zum Fehler machen, alles andere ist Spekulation.
Gruß, Daniel
Original-Datei geht nicht...
26.09.2009 03:41:51
Jörg-HH
Daniel, die Datei ist über 20MB groß, das macht mein Provider nicht, und außerdem ist sie ein Betriebsgeheimnis. Mein Chef würde mir die Ohren abbeißen...
Aber der Fehler tritt ja bei mir (aber nicht bei dir) in genau der Form auch in der Beispieldatei auf - an der großen Datei kann es also nicht liegen. Hat das System einen Einfluß? Bei mir XP downgrade auf einer für Vista gebauten Maschine.
Ich hab übrigens versucht, da mal einen Haltepunkt zu setzen, aber irgendwie ging das nicht. Dann hatte ich immer nur eine leere Box. Ich mach da wohl was falsch - wo müßte der Haltepunkt hin?
naja - erstmal gute Nacht!
Jörg
PS...
24.09.2009 09:55:44
Jörg-HH
...denk bitte noch daran, daß die Ptn im Original nicht unbedingt untereinander liegen...

316 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige