Menyimpan pasangan Nilai-Kunci dalam makro VBA

Tahap terakhir dari makro panjang yang saya tulis di Outlook adalah merutekan email ke orang yang tepat, bergantung pada semua hal yang telah ditemukan makro. Saya telah melakukan ini sebelumnya menggunakan lembar excel dan vlookup nilai "Kunci" - tetapi dalam kasus ini pasangan nilai kunci akan bersifat statis, sehingga excel terasa berlebihan, dan akan memperlambat segalanya.

Baik kunci maupun nilainya akan berupa string, kemungkinan besar masing-masing kurang dari 50 karakter, tetapi mungkin akan ada sekitar 1500 pasangan. Apakah mengkompilasinya menjadi semacam DLL atau sesuatu yang terbaik?


person Martin KS    schedule 03.11.2017    source sumber
comment
Lihat objek Scripting.Dictionary: msdn. microsoft.com/en-us/vba/bahasa-reference-vba/articles/   -  person Kostas K.    schedule 03.11.2017
comment
tentunya membuat kamus 1500 pasang dengan 1500 baris kode setiap kali makro berjalan akan sedikit lambat?   -  person Martin KS    schedule 03.11.2017
comment
kecuali saya salah mengambil keputusan; menginisialisasi kamus: d.Add "a", "Athens" d.Add "b", "Belgrade" dll.   -  person Martin KS    schedule 03.11.2017
comment
Tidak, begitulah cara Anda menambahkannya. Kamus bukan bagian dari perpustakaan VBA standar, kamus ini terletak di perpustakaan Microsoft Scripting Runtime. Oleh karena itu Anda harus menambahkan referensi ke perpustakaan, atau membuat objek menggunakan CreateObject("Scripting.Dictionary"). Banyak sumber daya di internet untuk melihat cara kerjanya dan yang paling penting kegunaannya. Mungkin Koleksi bawaan sederhana mungkin sesuai dengan kebutuhan Anda.   -  person Kostas K.    schedule 03.11.2017
comment
@MartinKS - lihat tautan ini juga, Anda dapat mengulang kamus dengan mudah - excelmacromastery.com/vba-dictionary   -  person Vityata    schedule 03.11.2017
comment
Oke, saya bisa melihat cara menggunakan kamus, dan itulah yang saya perlukan untuk mencari rute dengan cepat. Saat ini saya memiliki daftar 1500 nilai pasangan kunci, apa cara terbaik untuk menyiapkannya ke dalam makro setiap kali dijalankan?   -  person Martin KS    schedule 03.11.2017
comment
@MartinKS: Dua cara langsung terlintas dalam pikiran: (1) menyimpannya di buku kerja yang diproses oleh makro saat startup; atau (2) Tulis kode untuk menulis rutinitas inisialisasi dari mana pun Anda menyimpan daftarnya sekarang. BTW: objek Koleksi VBA adalah kamus nilai kunci pada intinya.   -  person Pieter Geerkens    schedule 03.11.2017
comment
@PieterGeerkens - Saya membayangkan file csv adalah opsi yang lebih cepat daripada memulai salinan excel, jadi saya akan menguji rute itu.   -  person Martin KS    schedule 03.11.2017
comment
@MartinKS: Perhatikan bahwa aplikasi default yang terkait dengan ekstensi .csv sering kali adalah EXCEL.exe. ;-)   -  person Pieter Geerkens    schedule 03.11.2017
comment
@PieterGeerkens - Saya hanya akan menggunakan Open csvFilePath For Input As #FileNum biasa tapi terima kasih sudah mengingatkan   -  person Martin KS    schedule 03.11.2017


Jawaban (1)


Cara sederhananya adalah dengan menempelkan semua nilai ke dalam file teks dengan kunci dan nilai dipisahkan dengan spasi (atau karakter lain yang sesuai jika ada spasi pada kunci atau nilai) lalu menambahkannya ke dalam kamus. Pada P3 300MHz saya, ini membutuhkan waktu kurang dari satu detik untuk dijalankan.

Dim objDict As Object, objFSO As Object, objFile As Object
Dim strLine As String, strs As Variant

Set objDict = CreateObject("Scripting.Dictionary")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFile, forReading)
For ii = 1 To 1500
    strs = Split(objFile.ReadLine(), " ")
    objDict.Add strs(0), strs(1)
Next
objFile.Close
person cup    schedule 03.11.2017
comment
Terima kasih - ini adalah jawaban yang dicapai di komentar - person Martin KS; 03.11.2017