2017-01-03 3 views
1

Bis jetzt fand ich eine Möglichkeit, meine Combobox aufzufüllen, aber es funktioniert nicht (Error 429), wenn es versucht, das Objekt zu erstellen. hier ist der Code, den ich gefunden:Füllen Sie Combobox mit eindeutigen Werten ohne scripting.dyndnary

Dim v, e 
c = 2 
ld = 8 
lf = 128 
With Sheets("2017-Sem1").Range(Cells(ld, c), Cells(lf, c)) 
    v = .Value 
End With 
With CreateObject("scripting.dictionnary") 
    .comparemode = 1 
    For Each e In v 
     If Not .exists(e) Then .Add e, Nothing 
    Next 
    If .Count Then Me.ComboBox1.List = Application.Transpose(.keys) 
End With 
End Sub 

Zunächst einmal ich nicht genau under, was der Code tut, werde ich Ihnen dankbar, wenn Sie mich erleuchten könnte. Zweitens scheint es, dass „scripting.dictionnary“ auf meinem Computer nicht existiert: ich

versuchte
dim dict as scripting.Dictionnary 

und es gibt einen Übersetzungsfehler auf einmal.

Also, nach meinem Verständnis so weit, ich werde nicht in der Lage sein, es zu verwenden (keine DLL, und ich kann nicht in die Ordner bei meiner Arbeit gehen). Hat jemand eine alternative Lösung, die ich verwenden kann?

Danke, Peagle

+1

Sie müssen den Verweis auf das Wörterbuch hinzufügen. Es heißt "Microsoft Scripting Library". Sie finden die Referenzen im VBA-Editor 'Tools> References' – CallumDA

+0

Die Referenz ist nicht in ... nach dem, was ich hier gefunden habe: http://www.ozgrid.com/forum/showthread.php?t=66682 Ich müsste etwas herunterladen und installieren, was an meinem Arbeitsplatz verboten ist ... Alles, was ich nicht sehe? – PEagle

+0

Sie haben 2 Methoden in Ihrem Beitrag, in Ihrem Code verwenden Sie ** Late Binding ** mit 'Mit CreateObject (" scripting.dyndynary ")'. Später in Ihrem Post fragen Sie jedoch nach ** Early Binding ** von 'dim dict as scripting.Dictionnary', welche Methode möchten Sie verwenden? Und es sollte 'Mit CreateObject (" scripting.dictionary ")' - Sie haben eine ** n ** zu viele –

Antwort

0

du etwas anders tun können - Sie müssen nicht eine Dictionary (oder Collection) benötigen. Verwenden Sie einfach das Objekt Combobox.List. Dieser Code VBA nimmt Werte im Bereich A1:A10 und fügt nur zu Ihrer Combobox hinzu, wenn es einzigartig ist. Der Code ist so konzipiert, in zu gehen Ihre UserForm Module

Sub Userform_Initialize() 
    Dim rng As Range, r As Range 
    Set rng = Sheet1.Range("A1:A10") 

    For Each r In rng 
     AddUnique r.value 
    Next r 
End Sub 

Sub AddUnique(value As Variant) 
    Dim i As Integer 
    Dim inList As Boolean 

    inList = False 
    With Me.ComboBox1 
     For i = 0 To Me.ComboBox1.ListCount - 1 
      If Me.ComboBox1.List(i) = value Then 
       inList = True 
       Exit For 
      End If 
     Next i 

     If Not inList Then 
      .AddItem value 
     End If 
    End With 
End Sub 

ich den Code getestet und es funktioniert für mich schön. Lassen Sie mich wissen, wenn Sie Probleme haben

+0

Funktioniert bis auf zwei Dinge speziell für meine Datei (die ich hier nicht erwähnt): - Funktioniert nicht mit Zahlen (fügt sie zur Liste) - Ich arbeite mit verbundenen Zellen (2 Zeilen jedes Mal) und es fügt einmal den "leeren" Wert hinzu Und eine letzte Frage dazu, wie kann ich meine Liste in alphabetischer Reihenfolge sortieren lassen? Vielen Dank für Ihre Zeit und fast perfekte Antwort. – PEagle

+0

Gut! Wenn das Ihre Frage beantwortet, markieren Sie sie bitte als akzeptiert – CallumDA

Verwandte Themen