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

Makros nacheinander ausführen / Combobox erstellen

Makros nacheinander ausführen / Combobox erstellen
18.11.2006 02:10:26
Chris
Hallo zusammen,
ich weiß - als absoluter Anfänger - leider nicht mehr weiter.
Per Makro möchte ich gern ein Listenfeld mit entsprechendem Inhalt ausgeben.
Dazu habe ich hier im Forum etwas gefunden, was auch funktoniert. Allerdings nur, wenn die Makros nacheinander ausgeführt werden.
Fasse ich die Makros jedoch zusammen, erhalte ich den "Laufzeitfehler 438".
Ich wühle nun schon eine ganze Weile im Netz, habe aber bisher keine Lösung gefunden. Hat vielleicht jemand einen Tipp?
Hier die einzelnen Makros (Aufruf nacheinander funktioniert):

Sub Liste_einf()
Application.ScreenUpdating = False
Sheets("Uebersicht").OLEObjects.Add( _
ClassType:="Forms.ComboBox.1", _
Left:=320, _
Top:=90, _
Width:=150.2, _
Height:=20.75).Select
[A1].Activate
Application.ScreenUpdating = True
End Sub


Sub Liste_format()
With Sheets("Uebersicht").ComboBox1
.Font.Name = "Arial"
.Font.Bold = False
.Font.Size = 12
.Name = "Liste1"
.ListFillRange = "Dropdown_Inhalte!b3:b13"
End With
End Sub

Hier der Aufruf als ein Makro (was nicht funktioniert):

Sub Haupt()
Liste_einf
Liste_format
End Sub

Gruß und besten Dank im Voraus,
Chris L

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Combobox - Font - OLEObject
18.11.2006 09:17:16
Erich
Hallo Chris,
Font ist keine Eigenschaft von OLEObject. Aber das allgemeine Objekt
Sheets("Uebersicht").OLEObjects(1).Object
(zurückgegeben von der Object-Eigenschaft des OLEObject) hat eine Font-Eigenschaft. Auf die kannst du zugreifen:
Sub Liste_format()
With Sheets("Uebersicht").OLEObjects(1)
.Name = "Liste1"
.ListFillRange = "Dropdown_Inhalte!b3:b13"
With .Object.Font
.Bold = False
.Size = 12
.Name = "Arial"
End With
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Combobox - Font - OLEObject
18.11.2006 16:53:39
Chris
Hallo Erich,
klasse, das hat mir sehr geholfen. Vielen Dank.
Im Moment versuche ich, den ListIndex so zu setzen, dass nach Erstellung der Combobox immer der erste Eintrag zu sehen ist (also keine leere Combobox).
Bisher kriege ich das leider nicht hin, da ich nicht weiß, wo genau "Listindex = 0" hingehört. Hättest du (oder jemand anders) einen Tipp oder Hinweis?
Gruß und Danke,
Chris L
Anzeige
AW: Combobox - Font - OLEObject
18.11.2006 22:26:57
Erich
Hallo Chris,
eine Möglichkeit:
Sub Liste_format()
With Sheets("Uebersicht").OLEObjects(1)
.Name = "Liste1"
.ListFillRange = "Dropdown_Inhalte!b3:b13"
With .Object             ' vgl. www.herber.de/forum/archiv/564to568/t565046.htm
.ListIndex = 0
With .Font
.Bold = False
.Size = 12
.Name = "Arial"
End With
End With
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Comboboxen - u. a. gleicher ListIndex
19.11.2006 02:39:55
Chris
Hallo Erich,
wieder ein großes Dankeschön.
Da ich inzwischen eine zweite Combobox erstellt habe (weitere werden folgen), würde ich für diese ebenfalls gern einen ListIndex angeben.
Mit dem direkten Ansprechen der jeweiligen Combobox funktioniert es - allerdings muss ich z. Zt. die beiden Comboboxen einzeln ansprechen. Da der ListIndex jedoch für diese und andere Comboboxen immer gleich ist, würde es sich anbieten, für alle Comboboxen den ListIndex auf Null zu setzen.
Ähnlich würde ich gern mit den Comboboxen selbst verfahren: Eigenschaften wie Höhe, Breite, Abstand von links, Schrift(art, -größe, etc.) usw. bleiben immer gleich.
Dinge wie ListFillRange, Name oder auch Abstand von oben sind unterschiedlich.
Auch hier erstelle ich die (derzeit zwei) Comboboxen jeweils einzeln, kann mir aber gut vorstellen, dass man die Eigenschaften, die sich nicht ändern, nur einmal erwähnt und immer wieder verwenden kann. Oder irre ich mich da?
An diesen beiden "Problemen" tüftele ich nun schon eine Weile, merke aber, wie die Augen immer schwerer werden. :)
Gruß,
Chris L
Anzeige
AW: Comboboxen - u. a. gleicher ListIndex
19.11.2006 10:41:37
Erich
Hallo Chris,
schaust du dir die Mappe mal an?
https://www.herber.de/bbs/user/38301.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort und: Schönen Sonntag!
AW: Comboboxen - u. a. gleicher ListIndex
19.11.2006 15:21:41
Chris
Hallo Erich,
ich bin ... sprachlos. Vielen, vielen Dank für die Mühe und Zeit!
Als totaler Anfänger habe ich noch einige Fragen und hoffe, deine Zeit nicht zu sehr in Anspruch zu nehmen:
So verstehe ich die Sache mit dem ListFillRange nicht ganz.
In deiner Beispieldatei wird der ListIndex der Comboboxen auf die jeweils dritten Zeile der Spalten 3, 5 und 7 gesetzt. Ist es auch möglich, den "Abstand" zwischen den Spalten zu vergrößern und so z. B. die Spalten 3, 6 und 9 zu nutzen?
Auch überlege ich gerade, die ListFillRange individuell zu vergeben.
Dazu etwas Hintergrund: Die Auswahlmöglichkeiten der Comboboxen bestehen aus einfachem Text (später - bis dahin liegt noch (sehr) viel vor mir - soll bei Auswahl aus der Combobox der Windows-Explorer und ein Pfad im Netzwerk aufgerufen werden).
In den unterschiedlichen Comboboxen finden sich teilweise 10 Einträge, manchmal aber auch nur drei oder vier.
Momentan (in deiner Beispiel-Datei) wird als ListFillRange ein ganzer Bereich angegeben, wodurch auch Leerzeilen in den Comboboxen entstehen, oder?
Wäre es besser, wenn ich hier mit individueller ListFillRange wie z. B.
für Liste1 = ListFillRange = "Dropdown_Inhalte!c5:c14"
oder
für Liste 3 = ListFillRange = "Dropdown_Inhalte!f5:f10"
usw.
arbeiten würde (was auch die Namensvergabe betreffen würde)?
Auch was
Top:=46.5 + 45 * intI, _
genau macht, habe ich bisher nicht ganz verstanden. Eine genaue Positionierung kriege ich momentan nicht hin.
Als Anhang stelle ich hier mal eine Datei rein, die den Soll-Zustand verdeutlichen soll (ohne Code oder sonstiges):
https://www.herber.de/bbs/user/38307.xls
Gruß und ebenso einen angenehmen (Rest-)Sonntag,
Chris L
Anzeige
AW: Comboboxen - u. a. gleicher ListIndex
19.11.2006 19:38:20
Erich
Hallo Chris,
an deiner Mappe glaube ich zu erkennen, dass du mit den Comboboxen einen Verzeichnisbaum nachbilden willst.
Da hast du dir einiges vorgenommen...
Nach der Auswahl eines Ordners sollen wohl rechts daneben dessen Unterordner in die Liste gestelt werden.
Dazu müsstest du dann die Einträge in Dropdown_Inhalte jeweils updaten.
(Du kannst auch auf das Blatt verzichten und die Unterverzeichnisse direkt bei der Ermittlung in die Combobox-Liste stellen.)
In der Mappe habe ich mal die vier CBs in Spalte H wie in deiner Vorlage positioniert
und ihnen jeweils die richtige Anzahl Zeilen (lngLast) verpasst:
https://www.herber.de/bbs/user/38315.xls
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Comboboxen - u. a. gleicher ListIndex
21.11.2006 19:32:43
Chris
Hallo Erich,
entschuldige die späte Antwort.
Mit deiner Vermutung - Stichwort Verzeichnisbaum - liegst du richtig. Ich wollte mal schauen, ob ich so etwas in der Art einigermaßen hinkriege.
> Da hast du dir einiges vorgenommen...
:)
Die Unterordner (siehe meine Mappe) sind fest vorgegeben; die Inhalte der dafür gedachten Comboboxen habe ich absichtlich in andere Tabellenblätter gestellt, weil ich mir denke, dass man sie so am besten aktualisieren kann. Weiß noch nicht, ob ich damit richtig liege.
Deine Beispielmappe - erneut vielen Dank - hat mir wieder sehr geholfen.
Den Großteil des Codes kann ich einigermaßen nachvollziehen - alles verstehen tu' ich aber noch nicht.
Im Moment bin ich dabei, zu den bereits erstellten vier Comboboxen weitere fünf automatisch hinzuzufügen. Das habe ich auch hinbekommen und sogar die Positionierung klappt.
Was ich aber nicht hinkriege und auch nicht verstehe: Diese fünf neuen Comboboxen sollen ebenfalls wieder mit Inhalt aus einem anderen Tabellenblatt gefüllt werden.
Das Komische: Die erste der neuen Comboboxen wird mit dem Inhalt gefüllt, der für die letzte Combobox vorgesehen ist. Leider habe ich noch zu wenig Ahnung, um gezielt auf Fehlersuche zu gehen. Alles, von dem ich mir denken könnte, dass es die Ursache sein könnte, habe ich schon versucht.
Der Code zum Erstellen dieser neuen Comboboxen (den ich in das Modul2 gestellt habe) ist identisch mit dem, den du in deiner Mappe benutzt hattest; angepasst wurde die Positionierung, der Name der Comboboxen sowie die Zeile "For intI = 5 To 9".
Hier nochmal der ganze Code:

Sub combos_test_einfuegen()
Dim intI As Integer, lngLast As Long
For intI = Sheets("Uebersicht").OLEObjects.Count To 5 Step -1 ' nur zum Testen: alle löschen
Sheets("Uebersicht").OLEObjects(intI).Delete
Next intI
For intI = 5 To 9
Sheets("Uebersicht").OLEObjects.Add ClassType:="Forms.ComboBox.1", _
Left:=ActiveSheet.Cells(3 * intI + 5, 11).Left, _
Top:=ActiveSheet.Cells(3 * intI + 5, 11).Top + ActiveSheet.Cells(3 * intI + 5, 11).RowHeight / 2, _
Width:=147, _
Height:=17.25
With Sheets("Uebersicht").OLEObjects(intI)
lngLast = Sheets("Dropdown_Test").Cells(Rows.Count, 3 * intI - 2).End(xlUp).Row
If lngLast < 3 Then lngLast = 3
' ListFillRange per Formel (oder individuell?) belegen:
.ListFillRange = "Dropdown_Inhalte_Test!" & _
Range(Cells(7, 4 * intI - 2), Cells(lngLast, 3 * intI - 2)).Address
.Name = "Liste_Test" & intI
With .Object
.ListIndex = 0
.BorderStyle = fmBorderStyleSingle
.ForeColor = RGB(0, 0, 255)
With .Font
.Bold = False
.Size = 10
.Name = "Arial"
End With
End With
End With
Next intI
'   Application.ScreenUpdating = True
End Sub

Die vier vorher erstellten Comboboxen werden nach wie vor korrekt erstellt und "befüllt".
Von den fünf neuen Comboboxen werden alle erstellt, aber nur die erste bekommt Inhalt (das, was in der letzten stehen sollte). Hast du eine spontane Idee, was die Ursache sein könnte?
Gruß und besten Dank,
Chris L
Anzeige
AW: Comboboxen - u. a. gleicher ListIndex
21.11.2006 23:40:44
Erich
Hallo Chris,
Probleme sehe ich in den Zeilen
         lngLast = Sheets("Dropdown_Test").Cells(Rows.Count, 3 * intI - 2).End(xlUp).Row
If lngLast < 3 Then lngLast = 3
' ListFillRange per Formel (oder individuell?) belegen:
.ListFillRange = "Dropdown_Inhalte_Test!" & _
Range(Cells(7, 4 * intI - 2), Cells(lngLast, 3 * intI - 2)).Address
lngLast belegst du mit einer Zeilennummmer im Blatt Dropdown_Test, die Inhalte holst du aber aus Dropdown_Inhalte_Test.
Das passt nicht wirklich zusammen.
In Range(Cells(7, 4 * intI - 2), Cells(lngLast, 3 * intI - 2)).Address soll der Bereich in Zeile 7 beginnen,
kann aber in Zeile 3 enden (wenn lngLast=3 ist). Soll das so sein?
In welcher Spalte sollen die Werte stehen? (4 * intI - 2 oder 3 * intI - 2?
Für intI=5 wäre das Spalte 18 oder 13, für intI=9 Spalte 34 oder 25.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige