Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Dictionary selbst gemacht
zurück: Klassenprogrammierung: Factory-Klasse weiter: Dateien kopieren mit Fortschrittsanzeige Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Isabelle :-)
Menschin


Verfasst am:
03. März 2014, 23:57
Rufname:
Wohnort: Westlicher Spiralarm der Galaxis


Dictionary selbst gemacht - Dictionary selbst gemacht

Nach oben
       Version: Office 2k (2000)

Hallöchen,

Aus der Hilfe:

Beschreibung

Ein Objekt, das Datenschlüssel-Element-Paare speichert.

Anmerkungen

Ein Dictionary-Objekt entspricht einem PERL-Verknüpfungsdatenfeld. Elemente, bei denen es sich um eine beliebige Form von Daten handeln kann, werden im Datenfeld gespeichert. Jedes Element ist mit einem eindeutigen Schlüssel verknüpft. Mit diesem Schlüssel wird ein individuelles Element abgerufen; er stellt normalerweise eine Ganzzahl oder eine Zeichenfolge dar, kann aber eine beliebige Form, mit Ausnahme eines Datenfeldes, haben.


Dreh- und Angelpunkt eines Dictionarys sind die Keys. Um auf diese schnell zugreifen zu können werden sie in einem Hash-Table verwaltet.

Die Speichrung im Hash-Table beruht auf dem Wert des Keys. Dieser wird aus der Summe der ASCII-Zeichen des Schlüssels berechnet. Damit der Wert nicht über den maximalen Index des Hash-Arrays hinausschießt, wird er durch eine Primzahl geteilt welche etwas größer ist als dieser Index.

Haben zwei Schlüssel denselben Wert, so wird der ermittelte Hash-Index doppelt gehasht. Das heißt, er wird durch eine Primzahl die etwas kleiner ist als der maximale Index des Hash-Arrays geteilt. Der sich daraus ergebende Index wird zum ursprünglichen Hash-Index addiert und wieder gehasht. Dieser Vorgang wird so lange wiederholt, bis ein leeres Feld im Hash-Array gefunden wird.

Die Methode reduziert die Anzahl der Zugriffe, bis der Schlüssel eindeutig identifiziert ist, erheblich. Das ist der Grund warum ein Dictionary erheblich schneller ist als ein Array linear zu durchsuchen. Denn es muss zwar etwas gerechnet werden, aber um z.B. einen Schlüssel an der 10.000en Stelle im Array zu finden müssen nicht 10.000 Schlüssel geprüft werden sondern nur Einige wenige.

Je weniger Schlüssel dieselbe Prüfziffer ergeben, desto weniger Zugriffe sind erforderlich. Sprich je länger der Schlüssel desto eindeutiger ist er und desto schneller wird der Zugriff darauf. Damit auch nicht allzu oft gehasht werden muss, ist das Hash-Array immer doppelt so groß wie das Daten-Array.


Das Dictionary-Objekt wird häufig benutzt und doppelte Werte aus Tabellen auszusortieren um diese dann z.B. in einer Listbox anzuzeigen oder um in Arrays schnell zu überprüfen ob ein bestimmter Wert vorhanden ist.

Das Ganze ist natürlich nicht so schnell wie das Original, hat aber den Vorteil, dass es nicht aus der scrrun.dll kommt. Diese DLL ist Bestandteil des Windows-Scripting und in Firmen mit Scriptblockern ist diese entweder nicht verfügbar oder deren Benutzung löst in der IT-Abteilung Alarmstufe Rot aus. Und es funktioniert auch auf einem MAC.

Unser selbst geschnitztes Dictionnary entspricht 1:1 dem aus der scrrun.dll. Das einzige was ich nicht implementiert habe ist die CompareMode-Eigenschaft. Denn dazu müsste ich die Schlüssel bei jedem Neueintrag zusätzlichen mit der StrComp-Funktion prüfen was das Ganze weiter bremsen würde. Dafür ist eine Sortierroutine eingebaut um die Schlüssel oder die Werte auf- bzw. absteigend Sortiert zurückzubekommen.

Lasst dich nicht durch das herumgehopse im Code verwirren wenn du den Code per F8 durchgehst. Die Prozeduren sind im für dich nicht sichtbaren, kompilierten Code, nur Pointer und daher nicht langsamer als die Eigenschaft direkt anzusprechen.

In einem Standardmodul:

Code:
Option Explicit

Public Sub Test()

    Dim objDictionary As clsDictionary
    Dim avntValues As Variant, avntKeys As Variant
    Dim iavntItem As Variant

    Set objDictionary = New clsDictionary

    objDictionary.Item("abc") = Array(123, 456, 789)
    objDictionary("bcd") = 234
    objDictionary("cde") = 345
    objDictionary("def") = 456
    objDictionary("efg") = 567
    objDictionary("fgh") = 678
    objDictionary("ghi") = 789
    objDictionary("hij") = 890

    If IsArray(objDictionary("abc")) Then Debug.Print Join(objDictionary("abc"), ";")

    objDictionary.Key("abc") = "cba"

    If IsArray(objDictionary("cba")) Then Debug.Print Join(objDictionary("cba"), ";")

    objDictionary("cba") = 666

    Debug.Print objDictionary("cba")

    objDictionary("cba") = objDictionary("cba") + 445

    Debug.Print objDictionary.Exits("abc")
    Debug.Print objDictionary.Exits("cba")

    avntValues = objDictionary.Values(xlAscending)

    For Each iavntItem In avntValues
        Debug.Print iavntItem
    Next

    avntKeys = objDictionary.Keys(xlDescending)

    For Each iavntItem In avntKeys
        Debug.Print iavntItem
    Next

    Call objDictionary.Remove("cba")
    Debug.Print objDictionary.Exits("cba")

    Call objDictionary.RemoveAll

    avntKeys = objDictionary.Keys

    For Each iavntItem In avntKeys
        Debug.Print iavntItem
    Next

    Set objDictionary = Nothing

End Sub


In einem Klassenmodul mit dem Namen "clsDictionary":

Code:
Option Explicit

Private Const PRIME_MIN As Long = 2097143 'Primzahl kleiner der maximalen Anzahl der Einträge im Hasharray
Private Const PRIME_MAX As Long = 2097169 'Primzahl größer der maximalen Anzahl der Einträge im Hasharray

Private Const INDEX_MAX As Long = 1048576 'Maximale Anzahl der zulässigen Einträge

Private Const INDEX_KEY As Long = 0& 'Index des Schlüssels
Private Const INDEX_DATA As Long = 1& 'Index der Daten

Private malngHashArray() As Long
Private mlngCount As Long
Private mavntDataArray() As Variant

Private Sub Class_Initialize()
    Call CreateArrays
End Sub

Friend Property Get Keys(Optional ByVal opvenmSortOrder As XlSortOrder = 0) As Variant()
    Keys = GetData(INDEX_KEY, opvenmSortOrder)
End Property

Friend Property Get Values(Optional ByVal opvenmSortOrder As XlSortOrder = 0) As Variant()
    Values = GetData(INDEX_DATA, opvenmSortOrder)
End Property

Friend Property Let Key(ByVal pvvntKey As Variant, ByVal pvvntNewKey As Variant)
    Call ChangeKey(pvvntKey, pvvntNewKey)
End Property

Public Property Get Item(ByVal pvvntKey As Variant) As Variant
'Attribute Item.VB_UserMemId = 0
    Item = GetItem(pvvntKey)
End Property

Public Property Let Item(ByVal pvvntKey As Variant, ByVal pvvntItem As Variant)
    Call LetItem(pvvntKey, pvvntItem)
End Property

Friend Property Get Count() As Long
    Count = mlngCount
End Property

Private Property Let Count(ByVal pvlngCount As Long)
    mlngCount = pvlngCount
End Property

Private Property Get DataArray(ByVal pvlngIndex1 As Long, ByVal pvlngIndex2 As Long) As Variant
    DataArray = mavntDataArray(pvlngIndex1, pvlngIndex2)
End Property

Private Property Let DataArray(ByVal pvlngIndex1 As Long, ByVal pvlngIndex2 As Long, ByVal pvvntValue As Variant)
    mavntDataArray(pvlngIndex1, pvlngIndex2) = pvvntValue
End Property

Private Property Get HashArray(ByVal pvlngIndex1 As Long, ByVal pvlngIndex2 As Long) As Long
    HashArray = malngHashArray(pvlngIndex1, pvlngIndex2)
End Property

Private Property Let HashArray(ByVal pvlngIndex1 As Long, ByVal pvlngIndex2 As Long, ByVal pvlngValue As Long)
    malngHashArray(pvlngIndex1, pvlngIndex2) = pvlngValue
End Property

Friend Sub Add( _
    ByVal pvvntKey As Variant, _
    ByVal pvvntValue As Variant)

    Dim lngDataIndex As Long

    'Prüfen ob der Schlüssel keinen unzlässigen Wert hat
    If Not IsEmpty(pvvntKey) And Not IsNull(pvvntKey) And pvvntKey <> vbNullString Then

        'Prüfen ob noch Platz im Datenarray ist
        If Count < INDEX_MAX Then

            'Prüfen ob der Schlüssel nicht schon vorhanden ist
            If Not GetHash(pvvntKey, 0&, 0&) Then

                'Leeren Eintrag im Datenarray suchen
                lngDataIndex = GetEmptyIndex

                'Schlüssel und Datenarrayindex in das Hasharray eintragen
                Call PutHash(pvvntKey, lngDataIndex)

                'Schlüssel und Daten in das Datenarray eintragen
                DataArray(INDEX_KEY, lngDataIndex) = pvvntKey
                DataArray(INDEX_DATA, lngDataIndex) = pvvntValue

            Else

                'Fehler: Der Schlüssel ist bereits vorhanden
                Call Err.Raise(Number:=457)

            End If
        Else

            'Fehler: Zu viele Daten - Arrayüberlauf
            Call Err.Raise(Number:=9)

        End If
    Else

        'Fehler: Schlüssel nicht zulässig
        Call Err.Raise(Number:=13)

    End If
End Sub

Friend Function Exits( _
    ByVal pvvntKey As Variant) As Boolean

    'Prüfen ob es der Schlüssel vorhanden ist und den Erfolg
    'der Suche an die aufrufende Prozedur zurückgeben
    Exits = GetHash(pvvntKey, 0&, 0&)

End Function

Friend Sub Remove( _
    ByVal pvvntKey As Variant)

    Dim lngDataIndex As Long, lngHashIndex As Long

    'Prüfen ob der Schlüssel vorhanden ist
    If GetHash(pvvntKey, lngDataIndex, lngHashIndex) Then

        'Schlüssel und Datenarrayindex im Hasharray löschen
        HashArray(lngHashIndex, INDEX_KEY) = 0&
        HashArray(lngHashIndex, INDEX_DATA) = 0&

        'Schlüssel und Daten im Datenarray löschen
        DataArray(INDEX_KEY, lngDataIndex) = Empty
        DataArray(INDEX_DATA, lngDataIndex) = Empty

        'Zähler vermindern
        Count = Count - 1

    Else

        'Fehler: Der Schlüssel ist nicht in der Auflistung
        Call Err.Raise(Number:=5)

    End If
End Sub

Friend Sub RemoveAll()

    'Arrays zurücksetzen
    Call CreateArrays

    'Zähler zurücksetzen
    Count = 0&

End Sub

Private Function GetData( _
    ByVal pvialngIndex As Long, _
    ByVal opvenmSortOrder As XlSortOrder) As Variant()

    Dim ialngIndex As Long, ialngCount As Long
    Dim avntTempArray() As Variant

    'Temporäres Array in der Größe des Datenarrays anlegen
    ReDim avntTempArray(0 To UBound(mavntDataArray, 2))

    'Schleife über alle Einträge im Datenarray
    For ialngIndex = 0& To UBound(mavntDataArray, 2)

        'Prüfen ob der Eintrag nicht leer ist
        If Not IsEmpty(DataArray(pvialngIndex, ialngIndex)) Then

            'Eintrag aus Datenarray in das temporäre Array schreiben
            avntTempArray(ialngCount) = DataArray(pvialngIndex, ialngIndex)

            'Indexzähler für das temporäre Array erhöhen
            ialngCount = ialngCount + 1&

        End If
    Next

    'Prüfen ob Einträge in Datenarray gefunden wurden
    If ialngCount > 0 Then

        'Temporäres Array auf die tatsächliche Anzahl der Einträge verkleinern
        ReDim Preserve avntTempArray(ialngCount - 1&)

        'Bei Bedarf das Array sortieren
        If opvenmSortOrder <> 0 Then Call QuickSort( _
            0&, ialngCount - 1&, opvenmSortOrder, avntTempArray())

        'Temporäres Array an die aufrufende Prozedur übergeben
        GetData = avntTempArray

    Else

        'Index des zurückgegebenen Arrays auf -1 setzen und
        'dieses an die aufrufende Prozedur übergeben
        GetData = Array()

    End If
End Function

Private Function GetEmptyIndex() As Long

    Dim ialngIndex As Long
    Dim blnFound As Boolean

    'Schleife über alle Einträge des Datenarrays
    For ialngIndex = 0& To UBound(mavntDataArray, 2)

        'Prüfen ob das Array am angegebenen Index leer ist
        If IsEmpty(DataArray(INDEX_KEY, ialngIndex)) Then

            'Flag setzen für leeren Eintrag gefunden
            blnFound = True

            'Schleife verlassen
            Exit For

        End If
    Next

    'Prüfen ob kein leerer Eintrag gefunden wurde.
    'Wenn nicht, das Array um 256 Einträge erweitern
    If Not blnFound Then ReDim Preserve mavntDataArray(1, ialngIndex + 255)

    'Index des ersten leeren Eintrags an die aufrufende Prozedur zurückgeben
    GetEmptyIndex = ialngIndex

End Function

Private Function GetItem( _
    ByVal pvvntKey As Variant) As Variant

    Dim lngDataIndex As Long

    'Prüfen ob es einen Eintrag zum angegebenen Schlüssel gibt
    If GetHash(pvvntKey, lngDataIndex, 0&) Then

        'Eintrag an aufrufende Prozedur zurückgeben
        GetItem = DataArray(INDEX_DATA, lngDataIndex)

    Else

        'Fehler: Schlüssel ist nicht in der Auflistung
        Call Err.Raise(Number:=5)

    End If
End Function

Private Sub LetItem( _
    ByVal pvvntKey As Variant, _
    ByVal pvvntItem As Variant)

    Dim lngDataIndex As Long

    'Prüfen ob der Schlüssel keinen unzlässigen Wert hat
    If Not IsEmpty(pvvntKey) And Not IsNull(pvvntKey) And pvvntKey <> vbNullString Then

        'Prüfen ob noch Platz im Datenarray ist
        If Count < INDEX_MAX Then

            'Prüfen ob es einen Eintrag zum angegebenen Schlüssel gibt
            If GetHash(pvvntKey, lngDataIndex, 0&) Then

                'Daten zum angegebenen Schlüssel ersetzen
                DataArray(INDEX_DATA, lngDataIndex) = pvvntItem

            Else

                'Leeren Eintrag im Datenarray suchen
                lngDataIndex = GetEmptyIndex

                'Schlüssel und Datenarrayindex in das Hasharray schreiben
                Call PutHash(pvvntKey, lngDataIndex)

                'Schlüssel und Daten in das Datenarray schreiben
                DataArray(INDEX_KEY, lngDataIndex) = pvvntKey
                DataArray(INDEX_DATA, lngDataIndex) = pvvntItem

            End If
        Else

            'Fehler: Zu viele Daten - Arrayüberlauf
            Call Err.Raise(Number:=9)

        End If
    Else

        'Fehler: Schlüssel nicht zulässig
        Call Err.Raise(Number:=13)

    End If
End Sub

Private Sub ChangeKey( _
    ByVal pvvntKey As Variant, _
    ByVal pvvntNewKey As Variant)

    Dim lngDataIndex As Long, lngHashIndex As Long

    'Prüfen ob der alte und der neue Schlüssel unterschiedlich sind
    If pvvntKey <> pvvntNewKey Then

        'Prüfen ob es zum alten Schlüssel einen Eintrag gibt
        If GetHash(pvvntKey, lngDataIndex, lngHashIndex) Then

            'Prüfen ob es zum neuen Schlüssel keinen Eintrag gibt
            If Not GetHash(pvvntNewKey, 0&, 0&) Then

                'Schlüssel und Datenarrayindex im Hasharray löschen
                HashArray(lngHashIndex, INDEX_KEY) = 0&
                HashArray(lngHashIndex, INDEX_DATA) = 0&

                'Neuen Schlüssel und Datenarrayindex in das Hasharray eintragen
                Call PutHash(pvvntNewKey, lngDataIndex)

                'Neuen Schlüssel in das Datenarray eintragen
                DataArray(INDEX_KEY, lngDataIndex) = pvvntNewKey

            Else

                'Fehler: Der Schlüssel ist bereits vorhanden
                Call Err.Raise(Number:=457)

            End If
        Else

            'Fehler: Der Schlüssel ist nicht vorhanden
            Call Err.Raise(Number:=5)

        End If
    End If
End Sub

Private Sub CreateArrays()
    ReDim malngHashArray(INDEX_MAX * 2, 1)
    ReDim mavntDataArray(1, 0)
End Sub

Private Sub PutHash( _
    ByVal pvvntKey As Variant, _
    ByVal pvlngIndex As Long)

    Dim lngHashPosition As Long, lngDoubleHashPosition As Long
    Dim lngHashNumber As Long

    'Prüfsumme des Schlüssels ermitteln
    lngHashNumber = CheckDigit(pvvntKey)

    'Hashindex des Schlüssels ermitteln
    lngHashPosition = Hashing(lngHashNumber)

    'Prüfen ob es einen Eintrag gibt
    If HashArray(lngHashPosition, INDEX_KEY) = 0& Then

        'Schlüssel und Datenarrayindex am errechneten Hasharrayindex eintragen
        HashArray(lngHashPosition, INDEX_KEY) = lngHashNumber
        HashArray(lngHashPosition, INDEX_DATA) = pvlngIndex

        'Zähler erhöhen
        Count = Count + 1

    Else

        'Doppelt Hashen
        lngDoubleHashPosition = DoubleHashing(lngHashNumber)

        'Hashen bis ein leerer Hasharrayindex gefunden wird
        Do

            lngHashPosition = Hashing(lngHashPosition + lngDoubleHashPosition)

        Loop Until HashArray(lngHashPosition, INDEX_KEY) = 0&

        'Schlüssel und Datenarrayindex am errechneten Hasharrayindex eintragen
        HashArray(lngHashPosition, INDEX_KEY) = lngHashNumber
        HashArray(lngHashPosition, INDEX_DATA) = pvlngIndex

        'Zähler erhöhen
        Count = Count + 1

    End If
End Sub

Private Function GetHash( _
    ByVal pvvntKey As Variant, _
    ByRef prlngDataIndex As Long, _
    ByRef prlngHashIndex As Long) As Boolean

    Dim lngHashPosition As Long, lngDoubleHashPosition As Long
    Dim lngHashNumber As Long

    'Prüfsumme des Schlüssels ermitteln
    lngHashNumber = CheckDigit(pvvntKey)

    'Hashindex des Schlüssels ermitteln
    lngHashPosition = Hashing(lngHashNumber)

    'Prüfen ob es einen Eintrag gibt
    If HashArray(lngHashPosition, INDEX_KEY) <> 0& Then

        'Prüfen ob der Schlüssel am gefundenen Hasharrayindex ist
        If pvvntKey = DataArray(INDEX_KEY, HashArray(lngHashPosition, INDEX_DATA)) Then

            'Erfolg der Suche an die aufrufende Prozedur zurückgeben
            GetHash = True

            'Index des Datenarrays übergeben
            prlngDataIndex = HashArray(lngHashPosition, INDEX_DATA)

            'Index des Hasharrays übergeben
            prlngHashIndex = lngHashPosition

        Else

            'doppelt Hashen
            lngDoubleHashPosition = DoubleHashing(lngHashNumber)

            'Hashen bis ein leerer Hasharrayindex oder der Eintrag gefunden wird
            Do

                lngHashPosition = Hashing(lngHashPosition + lngDoubleHashPosition)

                'Prüfen ob das Hasharray am errechnete Index leer ist
                If HashArray(lngHashPosition, INDEX_KEY) = 0& Then

                    'Schleife verlassen
                    Exit Do

                Else

                    'Prüfen ob sich der gesuchte Schlüssel am berechneten Hasharrayindex befindet
                    If pvvntKey = DataArray(INDEX_KEY, HashArray(lngHashPosition, INDEX_DATA)) Then

                        'Erfolg der Suche an die aufrufende Prozedur zurückgeben
                        GetHash = True

                        'Index des Datenarrays übergeben
                        prlngDataIndex = HashArray(lngHashPosition, INDEX_DATA)

                        'Index des Hasharrays übergeben
                        prlngHashIndex = lngHashPosition

                        'Schleife verlassen
                        Exit Do

                    End If
                End If
            Loop
        End If
    End If
End Function

Private Function CheckDigit( _
    ByVal pvstrKey As Variant) As Long

    Dim abytTempArray() As Byte
    Dim ialngIndex As Long

    'ASCII-Code der Zeichen des Schlüssels in ein Bytearray schreiben
    abytTempArray() = StrConv(CStr(pvstrKey), vbFromUnicode)

    'Schleife über alle Einträge des Bytearrays
    For ialngIndex = LBound(abytTempArray) To UBound(abytTempArray)

        'Summe der ASCII-Zeichen multipliziert mit dessen Array-Index errechnen
        CheckDigit = CheckDigit + CLng(abytTempArray(ialngIndex)) * (ialngIndex + 1)

    Next
End Function

Private Function Hashing( _
    ByVal pvlngHashIndex As Long) As Long

    'Den Rest der ganzzahligen Division des Hashindex und der PRIME_MAX-Konstante zurückgeben
    Hashing = (pvlngHashIndex Mod PRIME_MAX) + 1&

End Function

Private Function DoubleHashing( _
    ByVal pvlngHashIndex As Long) As Long

    'Den Rest der ganzzahligen Division des Hashindex und der PRIME_MIN-Konstante zurückgeben
    DoubleHashing = (pvlngHashIndex Mod PRIME_MIN) + 1&

End Function

Private Sub QuickSort( _
    ByVal pvlngLbound As Long, _
    ByVal pvlngUbound As Long, _
    ByVal opvenmSortOrder As XlSortOrder, _
    ByRef avntArray() As Variant)

    Dim lngIndex1 As Long, lngIndex2 As Long
    Dim vntTemp As Variant, vntBuffer As Variant

    lngIndex1 = pvlngLbound
    lngIndex2 = pvlngUbound

    vntTemp = avntArray((lngIndex1 + lngIndex2) \ 2)

    Do

        If opvenmSortOrder = xlAscending Then

            Do While avntArray(lngIndex1) < vntTemp
                lngIndex1 = lngIndex1 + 1
            Loop

            Do While vntTemp < avntArray(lngIndex2)
                lngIndex2 = lngIndex2 - 1
            Loop

        Else

            Do While avntArray(lngIndex1) > vntTemp
                lngIndex1 = lngIndex1 + 1
            Loop

            Do While vntTemp > avntArray(lngIndex2)
                lngIndex2 = lngIndex2 - 1
            Loop

        End If

        If lngIndex1 < lngIndex2 Then

            vntBuffer = avntArray(lngIndex1)
            avntArray(lngIndex1) = avntArray(lngIndex2)
            avntArray(lngIndex2) = vntBuffer

            lngIndex1 = lngIndex1 + 1
            lngIndex2 = lngIndex2 - 1

        ElseIf lngIndex1 = lngIndex2 Then

            lngIndex1 = lngIndex1 + 1
            lngIndex2 = lngIndex2 - 1

        End If
    Loop Until lngIndex1 > lngIndex2

    If pvlngLbound < lngIndex2 Then Call QuickSort(pvlngLbound, _
        lngIndex2, opvenmSortOrder, avntArray())

    If lngIndex1 < pvlngUbound Then Call QuickSort(lngIndex1, _
        pvlngUbound, opvenmSortOrder, avntArray())

End Sub


Wie das mit den Prozedurattributen funktioniert, habe ich schon mal hier:

http://www.office-loesung.de/ftopic544234_0_0_asc.php

ganz unten erklärt. Das Attribut solltest du für die Item-Eigenschaft setzen, ansonsten läuft das Testmakro in einen Fehler. Du kannst es natürlich auch lassen, nur musst du dann alle Zuweisungen an die Eigenschaft so ändern:

objDictionary.Item("abc") = Array(123, 456, 789)

_________________
LG Isi

Die Mitgliedschaft im Forum erhöht deine Chance auf eine Antwort von mir um 99,999%
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Excel VBA (Makros): Verständnisfrage Scripting.Dictionary 7 Cobalt 95 25. Feb 2014, 10:33
slowboarder Verständnisfrage Scripting.Dictionary
Keine neuen Beiträge Excel VBA (Makros): Array in ein Dictionary einfügen und bearbeiten 3 Joshi285 114 21. Nov 2013, 13:20
Joshi285 Array in ein Dictionary einfügen und bearbeiten
Keine neuen Beiträge Excel VBA (Makros): Suchfunktion per Dictionary 8 Strohalm21 194 12. Aug 2013, 10:52
Strohalm21 Suchfunktion per Dictionary
Keine neuen Beiträge Excel VBA (Makros): Scripted Dictionary & das hinzugekommene Item 6 vba-seb 71 29. Jul 2013, 09:32
vba-seb Scripted Dictionary & das hinzugekommene Item
Keine neuen Beiträge Excel VBA (Makros): Scripting Dictionary, super komplexe Aufgabenstellung. 23 silverchair 596 06. Dez 2012, 11:59
Phelan XLPH Scripting Dictionary, super komplexe Aufgabenstellung.
Keine neuen Beiträge Excel VBA (Makros): Mit "Scripting.Dictionary" Werte zuordnen 4 schnarrenberger 278 17. Nov 2012, 20:10
schnarrenberger Mit "Scripting.Dictionary" Werte zuordnen
Keine neuen Beiträge Excel VBA (Makros): Dictionary funktioniert nicht 1 Dictionary 98 08. Aug 2012, 11:55
BlindSeer Dictionary funktioniert nicht
Keine neuen Beiträge Excel VBA (Makros): Validationlist mit dictionary 3 Ishi13 204 13. Jun 2012, 15:40
EtoPHG Validationlist mit dictionary
Keine neuen Beiträge Excel VBA (Makros): Zugriff auf ein Scripting.Dictionary 2 hoschie 210 12. Jun 2012, 17:35
hoschie Zugriff auf ein Scripting.Dictionary
Keine neuen Beiträge Excel VBA (Makros): dictionary in dictionary 2 zcom 286 21. Mai 2012, 10:31
zcom dictionary in dictionary
Keine neuen Beiträge Excel VBA (Makros): Scripting.Dictionary hat Probleme bei Zahlen 2 rokhoe 302 13. Apr 2012, 12:23
rokhoe Scripting.Dictionary hat Probleme bei Zahlen
Keine neuen Beiträge Excel VBA (Makros): Summewenn im Scripting.Dictionary 3 Oxygen 198 02. Nov 2011, 20:58
Gast Summewenn im Scripting.Dictionary
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: HTML Forum