Hat VBA eine Wörterbuchstruktur? Wie Schlüssel <> Wert Array?
vba
dictionary
data-structures
vb6
UuDdLrLrSs
quelle
quelle
keyed
.Dim dict As New Scripting.Dictionary
ohne die Referenz verwenden. Ohne die Referenz müssen Sie dieCreateObject
Methode der späten Bindung zum Instanziieren dieses Objekts verwenden.VBA hat das Sammlungsobjekt:
Das
Collection
Objekt führt schlüsselbasierte Suchvorgänge mit einem Hash durch, damit es schnell geht.Mit einer
Contains()
Funktion können Sie überprüfen, ob eine bestimmte Sammlung einen Schlüssel enthält:Bearbeiten 24. Juni 2015 : Kürzere
Contains()
dank @TWiStErRob.Bearbeiten 25. September 2015 :
Err.Clear()
Dank @scipilot hinzugefügt.quelle
Contains
:On Error Resume Next
_col(key)
_Contains = (Err.Number = 0)
ContainsKey
; Jemand, der nur den Aufruf liest, kann ihn verwirren, um zu überprüfen, ob er einen bestimmten Wert enthält.VBA verfügt nicht über eine interne Implementierung eines Wörterbuchs. In VBA können Sie jedoch weiterhin das Wörterbuchobjekt aus der MS Scripting Runtime Library verwenden.
quelle
Ein zusätzliches Wörterbuchbeispiel, das nützlich ist, um die Häufigkeit des Auftretens einzudämmen.
Außerhalb der Schleife:
Innerhalb einer Schleife:
So überprüfen Sie die Frequenz:
quelle
Aufbauend auf der Antwort von cjrh können wir eine Contains-Funktion erstellen, für die keine Beschriftungen erforderlich sind (ich verwende keine Beschriftungen).
Für ein Projekt von mir habe ich eine Reihe von Hilfsfunktionen geschrieben, damit sich ein
Collection
Verhalten eher wie ein Verhalten verhältDictionary
. Es erlaubt weiterhin rekursive Sammlungen. Sie werden feststellen, dass der Schlüssel immer an erster Stelle steht, da er obligatorisch war und in meiner Implementierung sinnvoller war. Ich habe auch nurString
Schlüssel verwendet. Sie können es zurück ändern, wenn Sie möchten.einstellen
Ich habe dies in set umbenannt, da dadurch alte Werte überschrieben werden.
Erhalten
Das
err
Zeug ist für Objekte, da Sie Objekte mitset
und Variablen ohne übergeben würden. Ich denke, Sie können einfach überprüfen, ob es sich um ein Objekt handelt, aber ich war unter Zeitdruck.Hat
Der Grund für diesen Beitrag ...
Entfernen
Wirft nicht, wenn es nicht existiert. Stellt nur sicher, dass es entfernt ist.
Schlüssel
Holen Sie sich eine Reihe von Schlüsseln.
quelle
Das Skript-Laufzeitwörterbuch scheint einen Fehler zu haben, der Ihr Design in fortgeschrittenen Stadien ruinieren kann.
quelle
Ja. Für VB6 , VBA (Excel) und VB.NET
quelle
Wenn Sie aus irgendeinem Grund keine zusätzlichen Funktionen in Ihrem Excel installieren können oder möchten, können Sie auch Arrays verwenden, zumindest für einfache Probleme. Als WhatIsCapital geben Sie den Namen des Landes ein und die Funktion gibt Ihnen das Kapital zurück.
quelle
Dim
Schlüsselwort,Country
undCapital
müssen als Varianten erklärt werden durch die Verwendung vonArray()
,i
sollte erklärt werden (und sein muss , wennOption Explicit
gesetzt), und der Schleifenzähler wird eine aus gebundenen Fehler werfen - sicherer Verwenden SieUBound(Country)
für denTo
Wert. Vielleicht ist es auch erwähnenswert, dass dieArray()
Funktion zwar eine nützliche Verknüpfung ist, aber nicht die Standardmethode zum Deklarieren von Arrays in VBA ist.Alle anderen haben bereits die Verwendung der scripting.runtime-Version der Dictionary-Klasse erwähnt. Wenn Sie diese DLL nicht verwenden können, können Sie diese Version auch verwenden. Fügen Sie sie einfach Ihrem Code hinzu.
https://github.com/VBA-tools/VBA-Dictionary/blob/master/Dictionary.cls
Es ist identisch mit der Microsoft-Version.
quelle