Czy VBA ma strukturę słownika? Podobnie jak tablica wartości klucza <>?
vba
dictionary
data-structures
vb6
UuDdLrLrSs
źródło
źródło
keyed
.Dim dict As New Scripting.Dictionary
bez odniesienia. Bez odwołania musisz użyć metody późnego wiązaniaCreateObject
w celu utworzenia tego obiektu.VBA ma obiekt kolekcji:
Na
Collection
obiekt wykonuje kluczowych oparte wyszukiwań za pomocą skrótu, dlatego szybko.Możesz użyć
Contains()
funkcji, aby sprawdzić, czy dana kolekcja zawiera klucz:Edytuj 24 czerwca 2015 : Krótsze
Contains()
dzięki @TWiStErRob.Edytuj 25 września 2015 : Dodano
Err.Clear()
dzięki @scipilot.źródło
Contains
:On Error Resume Next
_col(key)
_Contains = (Err.Number = 0)
ContainsKey
; ktoś czytający tylko wywołanie może pomylić je ze sprawdzeniem, czy zawiera ono określoną wartość.VBA nie ma wewnętrznej implementacji słownika, ale z VBA nadal można używać obiektu słownika z biblioteki wykonawczej MS Scripting.
źródło
Dodatkowy przykład słownika, który jest przydatny do ograniczenia częstotliwości występowania.
Poza pętlą:
W pętli:
Aby sprawdzić częstotliwość:
źródło
Opierając się na odpowiedzi cjrh , możemy zbudować funkcję Contains nie wymagającą żadnych etykiet (nie lubię używać etykiet).
Dla mojego projektu napisałem zestaw funkcji pomocniczych, aby
Collection
bardziej zachowywać się jakDictionary
. Nadal pozwala na kolekcje rekurencyjne. Zauważysz, że klucz zawsze jest najważniejszy, ponieważ był obowiązkowy i miał sens w mojej implementacji. Użyłem także tylkoString
kluczy. Możesz to zmienić, jeśli chcesz.Zestaw
Zmieniłem nazwę, aby ustawić, ponieważ spowoduje to zastąpienie starych wartości.
Dostać
err
Rzeczy jest dla obiektów gdyż przechodzą obiekty przy użyciuset
i bez zmiennych. Myślę, że możesz po prostu sprawdzić, czy to obiekt, ale byłem zmuszony do czasu.Ma
Powód tego postu ...
Usunąć
Nie rzuca, jeśli nie istnieje. Tylko upewnia się, że został usunięty.
Klucze
Zdobądź tablicę kluczy.
źródło
Wydaje się, że słownik środowiska wykonawczego skryptów zawiera błąd, który może zepsuć projekt na zaawansowanym etapie.
źródło
Tak. Dla VB6 , VBA (Excel) i VB.NET
źródło
Jeśli z jakiegoś powodu nie możesz zainstalować dodatkowych funkcji w programie Excel lub nie chcesz, możesz również użyć tablic, przynajmniej w przypadku prostych problemów. Jako WhatIsCapital podajesz nazwę kraju, a funkcja zwraca ci swój kapitał.
źródło
Dim
słowa kluczowegoCountry
iCapital
musi zostać zadeklarowana jako Warianty ze względu na użycieArray()
,i
powinna zostać zadeklarowana (i musi byćOption Explicit
ustawiona, jeśli jest ustawiona), a licznik pętli wyrzuci błąd spoza zakresu - bezpieczniej użyjUBound(Country)
dlaTo
wartości. Warto również zauważyć, że chociażArray()
funkcja jest przydatnym skrótem, nie jest to standardowy sposób deklarowania tablic w VBA.Wszyscy pozostali wspominali już o użyciu skryptu.runtime w wersji klasy Dictionary. Jeśli nie możesz użyć tej biblioteki DLL, możesz również użyć tej wersji, po prostu dodaj ją do swojego kodu.
https://github.com/VBA-tools/VBA-Dictionary/blob/master/Dictionary.cls
Jest identyczny z wersją Microsoftu.
źródło