Microsoft Excel

Herbers Excel/VBA-Archiv

objdic? | Herbers Excel-Forum


Betrifft: objdic? von: Tanja
Geschrieben am: 11.12.2009 10:02:49

Hallo Excel-Gemeinde,

was bedeutet objdic?

Ich habe hier ein Makro gefunden, dass ich ganz gut gebrauchen könnte. Nun möchte ich es aber gerne - für mich - nachvollziehen können.

Benutzt wird dieses objdic bei der Angabe einer ausgabetabelle.

Könnte mir das vielleicht kurz jemand erläutern?

Grüße
Tanja

  

Betrifft: zeige den Code... von: Tino
Geschrieben am: 11.12.2009 10:07:05

Hallo,
objdic ist sehr wahrscheinlich eine Objekt Variable,
aber ohne den Code zu sehen kann man nichts dazu sagen.

Gruß Tino


  

Betrifft: Hier ist der Code von: Tanja
Geschrieben am: 11.12.2009 10:14:50

Hallo Tino,

hier habe ich den Code gefunden:

https://www.herber.de/forum/messages/1122701.html

Möchte ja niemanden sein Werk klauen ;)

Gruß
Tanja


  

Betrifft: AW: Hier ist der Code von: Tino
Geschrieben am: 11.12.2009 10:24:14

Hallo,
mit dem Scripting.Dictionary Objekt wird in diesem Code eine Liste ohne Duplikate erstellt.

Hier mal ein Link mit Lesestoff fürs Dictionary Objekt.

http://www.html-world.de/program/fso_12.php


Gruß Tino


  

Betrifft: AW: objdic? von: Beverly
Geschrieben am: 11.12.2009 10:15:38

Hi Tina,

ich nehme an, damit ist ein Dictionary Object gemeint - es bietet die Möglichkeit, Daten paarweise komfortabel zu speichern, zu bearbeiten und wieder abzurufen. Du kannst es dir in etwa so vorstellen wie ein Array.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: objdic? von: Tanja
Geschrieben am: 11.12.2009 10:21:31

Hallo Beverly,

kann man an dieser Stelle ein Dictionary Objekt umgehen? Wenn ja, wie?

VG
Tanja


  

Betrifft: AW: objdic? von: Beverly
Geschrieben am: 11.12.2009 10:29:47

Hi Tanja,

warum willst du es denn umgehen - es ist eine sehr schnelle Möglichkeit, doppelte Einträge zu eliminieren. Was willst du denn überhaupt machen?


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: objdic? von: Tanja
Geschrieben am: 11.12.2009 11:39:29

Hi Beverly,

eigentlich habe ich fast genau das gleiche Problem wie der Fragensteller im kopierten Thread.

Allerdings möchte ich irgendwie nachvollziehen können, was da genau passiert. Und damit ich das irgendwie schaffe, wollte ich gerne dieses Objekt umgehen, weil ich davon noch nie gehört habe und es auch ehrlich gesagt nicht verstehe.

LG
Tanja


  

Betrifft: Dictionary-Object oder Collection von: NoNet
Geschrieben am: 11.12.2009 12:21:56

Hallo Tanja,

Du könntest das Dictionary-Object "umgehen", indem Du eine Collection verwendest - siehe Beispiel hier :

https://www.herber.de/forum/archiv/1120to1124/t1122763.htm#1122772

Allerdings hast Du damit wohl weder etwas "gewonnen" noch "verloren" - es ist einfach nur eine andere Methode.

Allgemein formuliert könnte man diese beiden Objekte etwa so beschreiben :
Beide Objekte (Dictionary oder Collection) können Daten ähnlich wie ein ARRAY (das hat Beverly bereits erwähnt) speichern. Zu jedem Datensatz gibt es einen eindeutigen Schlüssel (Key, Index).
Über diesen Schlüssel wird ein Datensatz im Dictionary/Collection eindeutig identifiziert - das ist ähnlich wie eine eindeutige Nr. im Personalausweis oder Kundennr. in einem Vertrieb etc.

Der Code "klappert" nun alle Zeilen/Zellen einer Liste ab und versucht diese im Dic./Coll. zu speichern und vergibt als Schüssel den Inhalt/Wert der Zelle. Wenn der Wert noch nicht im Dic./Coll. vorhanden ist, klappt das auch problemlos, der Datensatz wird mit dem Schlüssel aufgenommen.
Wenn nun in der Liste doppelte Inhalte vorkommen, versucht der Code einen bereits vorhandenen Schlüssel erneut zu vergeben - und das ist nicht möglich : Daher wird der bereits vorhandene Datensatz nicht noch einmal gespeichert. Diese Schleife wiederholt sich bis zum Ende der Liste.
Als Resultat erhält man ein Dic./Coll.-Objekt, dass alle Daten ohne Redundanzen (also ohne doppelte Werte) enthält. Die doppelten/mehrfach enthaltenen Werte sind nun alle nur einmal im Dic./Coll. gespeichert.

Diese Methode ist gerade bei großen Listen wesentlich schneller als wenn man alle bereits gespeicherten Werte in einer zweiten Schleife erneut überprüfen würde.

Mein Rat : lehne dieses für Dich "NEUE OBJECT" nicht ab, sondern mache es dir zueigen indem du es verwendest und damit in Deinen Wissensschatz mit aufnimmst - "und wieder was gelernt..." ;-)

Gruß, NoNet

PS: EINE recht schnelle Möglichkeit kann ich noch dir zuguterletzt doch noch anbieten, um Dic./Coll. zu umgehen : Prüfung direkt in ARRAY-Variable ohne Schlüssel :

Private Sub UserForm_Activate()
    Dim objARR()
    Dim lngZ As Long
    
    On Error Resume Next
    ComboBox1.Clear 'Alte Inhalte löschen
    ReDim objARR(0) 'ARRAY auf 0 Elemente vordefinieren
    
    'Werte der Spalte A bis letzte gefüllte Zeile
    For lngZ = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        'Prüfen mit VERGLEICH, ob Monats-Wert bereits in objARR enthalten ist :
        If IsError(Application.Match(Format(Cells(lngZ, 1), "MMM YYYY"), objARR, 0)) Then
            objARR(UBound(objARR)) = Format(Cells(lngZ, 1), "MMM YYYY")
            ReDim Preserve objARR(UBound(objARR) + 1)   'Array um 1 Element erweitern
        End If
    Next
    
    If UBound(objARR) > 0 Then ReDim Preserve objARR(UBound(objARR) - 1)
    
    For lngZ = LBound(objARR) To UBound(objARR)
        ComboBox1.AddItem objARR(lngZ)
    Next
End Sub




  

Betrifft: Vielen Dank... von: Tanja
Geschrieben am: 11.12.2009 13:51:04

... an euch beide.

Ich denke ich werde mich am Wochenende in Ruhe damit auseinandersetzen. Ist doch ein wenig viel, das hier noch nebenbei alles neu zu lernen. :)

Ich hoffe doch, dass ich bei Fragen erneut auf euch zukommen darf?

Ich wünsche euch jedenfalls schonmal ein wunderschönes Wochenende.

LG
Tanja


  

Betrifft: AW: objdic? von: Beverly
Geschrieben am: 11.12.2009 13:10:54

Hi Erika,

wenn ich das richtig verstanden habe, möchtest du aus einer Liste mit Mehrfacheinträgen eine Liste erzeugen, in der jeder Wert nur einmalig vorkommt? Dann könntest du vielleicht auch den Spezialfilter verwenden.


GrußformelBeverly's Excel - Inn


  

Betrifft: sorry, meinte natürlich: Tanja - o.T. von: Beverly
Geschrieben am: 11.12.2009 13:12:20

.