Apakah VBA memiliki struktur kamus? Suka array nilai kunci <>?
vba
dictionary
data-structures
vb6
UuDdLrLrSs
sumber
sumber
keyed
.Dim dict As New Scripting.Dictionary
tanpa referensi. Tanpa referensi, Anda harus menggunakanCreateObject
metode pengikatan akhir dari instantiate objek ini.VBA memiliki objek koleksi:
The
Collection
objek Melakukan pencarian berbasis kunci menggunakan hash sehingga sangat cepat.Anda dapat menggunakan
Contains()
fungsi untuk memeriksa apakah koleksi tertentu berisi kunci:Sunting 24 Juni 2015 :
Contains()
Terima kasih lebih pendek untuk @TWiStErRob.Sunting 25 September 2015 : Ditambahkan
Err.Clear()
berkat @scipilot.sumber
Contains
:On Error Resume Next
_col(key)
_Contains = (Err.Number = 0)
ContainsKey
; seseorang yang hanya membaca doa dapat mengacaukannya karena memeriksa bahwa itu mengandung nilai tertentu.VBA tidak memiliki implementasi internal kamus, tetapi dari VBA Anda masih dapat menggunakan objek kamus dari MS Scripting Runtime Library.
sumber
Contoh kamus tambahan yang berguna untuk memuat frekuensi kemunculan.
Di luar lingkaran:
Dalam satu lingkaran:
Untuk memeriksa frekuensi:
sumber
Membangun jawaban cjrh , kita dapat membangun fungsi Contains yang tidak memerlukan label (saya tidak suka menggunakan label).
Untuk proyek saya, saya menulis satu set fungsi pembantu untuk membuat
Collection
perilaku lebih seperti aDictionary
. Itu masih memungkinkan koleksi rekursif. Anda akan melihat Key selalu didahulukan karena itu wajib dan lebih masuk akal dalam implementasi saya. Saya juga hanya menggunakanString
kunci. Anda dapat mengubahnya kembali jika Anda mau.Set
Saya mengganti nama ini untuk ditetapkan karena akan menimpa nilai lama.
Dapatkan
The
err
hal ini untuk benda karena Anda akan melewati objek menggunakanset
dan variabel tanpa. Saya pikir Anda hanya dapat memeriksa apakah itu objek, tapi saya terdesak waktu.Memiliki
Alasan posting ini ...
Menghapus
Tidak melempar jika tidak ada. Pastikan itu dihapus.
Kunci
Dapatkan berbagai kunci.
sumber
Kamus runtime scripting tampaknya memiliki bug yang dapat merusak desain Anda pada tahap lanjut.
sumber
Iya. Untuk VB6 , VBA (Excel), dan VB.NET
sumber
Jika karena alasan apa pun, Anda tidak dapat menginstal fitur tambahan ke Excel Anda atau tidak mau, Anda dapat menggunakan array juga, setidaknya untuk masalah sederhana. Sebagai WhatIsCapital, Anda memasukkan nama negara dan fungsinya mengembalikan modal Anda.
sumber
Dim
kata kunci sendiri ,Country
danCapital
perlu dinyatakan sebagai Varian karena penggunaanArray()
,i
harus dinyatakan (dan harus jikaOption Explicit
diatur), dan penghitung lingkaran akan membuang kesalahan yang tidak terbatas - lebih aman untuk gunakanUBound(Country)
untukTo
nilai. Mungkin juga perlu dicatat bahwa sementaraArray()
fungsi adalah jalan pintas yang bermanfaat, itu bukan cara standar untuk mendeklarasikan array di VBA.Semua yang lain telah menyebutkan penggunaan versi scripting.runtime dari kelas Kamus. Jika Anda tidak dapat menggunakan DLL ini, Anda juga dapat menggunakan versi ini, cukup tambahkan ke kode Anda.
https://github.com/VBA-tools/VBA-Dictionary/blob/master/Dictionary.cls
Ini identik dengan versi Microsoft.
sumber