HERBERS Excel-Forum - das Archiv

Thema: CreateObject auf MacOS

CreateObject auf MacOS
Kunu
Hallo,
ich habe eine UserForm in der eine ComboBox gefüllt wird aus einer Tabelle.
Um Duplikate zu vermeiden habe ich folgenden Code:

Dim hshA As Object

Dim i As Long

Set hshA = CreateObject("Scripting.Dictionary")

With ThisWorkbook.Sheets("Ziele")
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
hshA(.Cells(i, 1).Text) = 0
Next
Me.Strecke1.List = hshA.keys
End With

Set hshA = Nothing

Auf Windows funktioniert es ohne Probleme, auf dem Mac kommt der Fehlercode 429.
Soweit ich das herausfinden konnte ist "CreateObject" das Problem weil da eine Windwos Funktion angesprochen wird die es natürlich auf dem Mac nicht gibt.
Gibt es eine Alternative oder eine Möglichkeit es so zu schreiben dass es auch auf dem Mac funktioniert?
Vielen Dank schonmal.

Grüße
AW: CreateObject auf MacOS
Onur


Dim hshA As Scripting.Dictionary
Set hshA = New Scripting.Dictionary
AW: CreateObject auf MacOS
VBAnalyst
Ja, du hast recht. Das Problem liegt daran, dass CreateObject nicht auf Mac funktioniert, da es eine Windows-spezifische Funktion ist. Eine Alternative wäre die Verwendung der Collection-Klasse, die plattformunabhängig ist. Hier ist eine modifizierte Version deines Codes, der die Collection-Klasse verwendet:

Dim coll As New Collection

Dim cellValue As Variant
Dim i As Long

With ThisWorkbook.Sheets("Ziele")
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
cellValue = .Cells(i, 1).Value
If Not IsError(cellValue) Then ' Check if cell value is not an error
On Error Resume Next ' Skip error if item already exists in collection
coll.Add cellValue, CStr(cellValue) ' Convert to string to avoid type mismatch
On Error GoTo 0 ' Re-enable error handling
End If
Next i
End With

' Transfer items from collection to an array
Dim items() As Variant
ReDim items(1 To coll.Count)
For i = 1 To coll.Count
items(i) = coll(i)
Next i

' Fill ComboBox with unique items
Me.Strecke1.List = items


Dieser Code erstellt eine Collection namens coll, um die eindeutigen Werte zu speichern. Dann wird eine Schleife durch die Zellen der Tabelle durchlaufen, und jedes eindeutige Element wird der Sammlung hinzugefügt. Schließlich werden die eindeutigen Elemente aus der Sammlung in ein Array übertragen und das ComboBox-Steuerelement damit gefüllt. Dies sollte plattformunabhängig funktionieren.

Ich hoffe der Code klappt soweit?

' Autor und Copyright: Valery Bidakovsky
' Homepage: https://www.vb-analyst.de
AW: CreateObject auf MacOS
Kunu
Guten Morgen,
vielen Dank für eure schnellen Antworten!
Und ein dickes Danke an VBAnalyst, der Code funktioniert einwandfrei.
Jetzt ergibt sich aber eine Folgefrage:
Ich habe abhängige Comboboxen also der Inhalt der ComboBox2 hängt von der Auswahl der ComboBox 1 ab.
Das hatte ich mit folgenden Code gelöst:
Private Sub Strecke2_Change()

Dim oDic2 As Object
Dim i As Long

Set oDic2 = CreateObject("Scripting.Dictionary")
Me.Strecke3.Clear
Me.Strecke4.Clear

With ThisWorkbook.Sheets("Ziele")
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(i, 2) = Me.Strecke2 Then
oDic2(.Cells(i, 3).Text) = 0
End If
Next
Me.Strecke3.List = oDic2.keys
End With

Set oDic2 = Nothing
End Sub

Da hätte ich dann wieder das selbe Problem mit CreateObject. Ich habe mit deinem Code rumprobiert aber ich bekomme immer nur alle Ergebnisse in der zweiten Spalte aber nicht abhängig von der Auswahl aus der ComboBox1.
Vielen Dank schonmal für eure Mühen.

Grüße
AW: CreateObject auf MacOS
RPP63
Moin!
Nutze die Funktionalität von MS 365!
Dort gibt es die Funktionen EINDEUTIG() und SORTIEREN()
Teste mal:
Dim Bereich$

With ThisWorkbook.Sheets("Ziele")
Bereich = .Range(.cells(1, 2), .Cells(.Rows.Count, 1).End(xlUp)).Address
Me.Strecke1.List = Evaluate("SORT(UNIQUE(" & Bereich & "))")
End With

Kaum zu glauben, dass folgender Beitrag schon fast 4 Jahre alt ist.
https://www.clever-excel-forum.de/Thread-Combo-oder-Listbox-mit-sortierten-Unikaten-fuellen-Excel-365

Gruß Ralf
AW: CreateObject auf MacOS
Oberschlumpf
Hi,

ich würd dir vorschlagen:
Zeig doch bitte per Upload eine Bsp-Datei mit allem, was erforderlich ist, um deine nun schon 2 Fragen beantworten zu können.
Ich glaub, das würde effizienter sein, als wenn du weiterhin nur "kleckerweise" von deinen (Folge)Problemen berichtest, wenn vorhergehendes Problem keins mehr ist.

Ciao
Thorsten
AW: CreateObject auf MacOS
Zwenn
Hallo,

es gibt von Tim Hall eine Klasse für ein Dictionary, womit es auch auf einem Mac verfügbar gemacht werden kann. Einfach in das Projekt importieren und verwenden wie unter Windows auch:
https://github.com/VBA-tools/VBA-Dictionary

Viele Grüße,

Zwenn
An alle außer mir :-)
RPP63
Ist euch meine simple Lösung mit Excel-Bordmitteln nicht elitär genug?
Schließlich befinden wir uns hier zunächst mal in einem Excel-Forum.
(und der TE verfügt über MS 365)

Gruß Ralf
AW: An alle außer mir :-)
Oberschlumpf
Moin Ralf :-)

ich kann nicht beurteilen, wie gut deine Idee mit excel-eigenen Mittel ist, weil...
...ich nutze MSO 2016, da gibt es die neuen MSO365-Funktionen nicht ;-)

Und da ich ja trotzdem gern in VBA "bastel", "hatte ich mir erlaubt"^^ :-), außerhalb von MSO365 eine Lösung zu erarbeiten ;-)

Ciao
Thorsten
AW: An alle außer mir :-)
Kunu
Guten Morgen,
es geht nicht darum ob die Lösung passt oder nicht.
Ich bin Neuling in der Materie und versuche mir die Sache zu erarbeiten weil mir das Spass macht.
Ich kam einfach noch nicht dazu alles auszuprobieren zumal ich auch einfach noch nicht alles verstehe was wann wie eingefügt wird.
Daher nicht böse sein ;)
AW: An alle außer mir :-)
daniel
Hi
die Aufgabe, die Comboboxen in Abhängigkeit zu befüllen, sollte sich in Excel 365 im Prinzip ohne Code lösen lassen, in dem man sich mit Hilfe von Eindeutig und Filter in einer Spalte das jeweilige Ergebnis per Formel ausgeben lassen kann.
die Comboboxen verknüpft man dann über RowSource und ControlSource mit mit den jeweiligen Zellen, und das ganze läuft.
bei RowSource trägt man die Zelladresse mit der Formel mit angehängtem # ein, dann passt sich der Bereich auch automatisch an das Formelergebnis an.

Gruß Daniel
AW: CreateObject auf MacOS
Kunu
Hallo,
ich hatte die Hoffnung dass ich es durch probieren selber hinbekomme und euch nicht behelligen muss ;)
Hier meine Beispiel Datei:
https://www.herber.de/bbs/user/169138.xlsm
Mit dem Code von VBAnalyst klappt es mit der ersten ComboBox super aber ich möchte ja nun dass die zweite, dritte usw. abhängig bzw. dymnamisch ausgefüllt wird, jenachdem was in der vorherigen ausgesucht wurde.
Danke euch.

Grüße
AW: CreateObject auf MacOS
Oberschlumpf
Hi,

ich wieder...mit Lösung

hier, probier mal...
https://www.herber.de/bbs/user/169176.xlsm

Meinen "Hauptcode" hab ich in ein neu hinzugefügtes Modul "Oberschlumpf" eingetragen.

Deinen Code in den Change-Ereignissen der ComboBoxen hab ich so angepasst, dass mein Code gestartet, dein alter Code aber deaktiviert ist/nicht weiter ausgeführt wird.

Beachte die vielen Kommentare im Code.

Hilfts?

Ciao
Thorsten
AW: CreateObject auf MacOS
Kunu
Du bist großartig, vielen Dank!
Funktioniert genauso wie ich es haben möchte.
Danke Danke Danke!
Korrektur!
RPP63
Natürlich .Cells(2, 1) statt .Cells(1, 2) …
Dim Bereich$

With ThisWorkbook.Sheets("Ziele")
Bereich = .Range(.cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Address
Me.Strecke1.List = Evaluate("SORT(UNIQUE(" & Bereich & "))")
End With