การจัดเก็บคู่คีย์-ค่าในแมโคร VBA

ขั้นตอนสุดท้ายของแมโครขนาดยาวที่ฉันเขียนใน Outlook คือการกำหนดเส้นทางอีเมลไปยังบุคคลที่เหมาะสม ขึ้นอยู่กับทุกสิ่งที่แมโครค้นพบ ฉันเคยทำสิ่งนี้มาก่อนที่จะใช้แผ่นงาน Excel และ vlookup ของค่า "คีย์" - แต่ในกรณีนี้คู่คีย์-ค่าจะเป็นแบบคงที่ ดังนั้น Excel จึงรู้สึกเหมือนใช้งานมากเกินไป และจะทำให้สิ่งต่าง ๆ ช้าลง

ทั้งคีย์และค่าจะเป็นสตริง ซึ่งมีแนวโน้มว่าแต่ละรายการจะมีอักขระน้อยกว่า 50 ตัว แต่อาจมีคู่ประมาณ 1,500 คู่ จะรวบรวมมันเป็น DLL บางประเภทหรืออะไรจะดีที่สุด?


person Martin KS    schedule 03.11.2017    source แหล่งที่มา
comment
ดูที่วัตถุ Scripting.Dictionary: msdn microsoft.com/en-us/vba/ language-reference-vba/articles/   -  person Kostas K.    schedule 03.11.2017
comment
แน่นอนว่าการสร้างพจนานุกรม 1,500 คู่พร้อมโค้ด 1,500 บรรทัดทุกครั้งที่เรียกใช้มาโครจะช้านิดหน่อยใช่ไหม   -  person Martin KS    schedule 03.11.2017
comment
เว้นแต่ว่าฉันจะหยิบปลายไม้ผิด การเริ่มต้นพจนานุกรม: d.Add "a", "Athens" d.Add "b", "Belgrade" ฯลฯ   -  person Martin KS    schedule 03.11.2017
comment
ไม่ นั่นคือวิธีที่คุณเพิ่มเข้าไป พจนานุกรมไม่ได้เป็นส่วนหนึ่งของไลบรารี VBA มาตรฐาน แต่อยู่ในไลบรารี Microsoft Scripting Runtime ดังนั้นคุณต้องเพิ่มการอ้างอิงไปยังไลบรารี หรือสร้างออบเจ็กต์โดยใช้ CreateObject("Scripting.Dictionary") แหล่งข้อมูลมากมายบนอินเทอร์เน็ตเพื่อดูว่ามันทำงานอย่างไร และที่สำคัญที่สุดคือมันใช้ทำอะไร บางทีคอลเลกชันในตัวที่เรียบง่ายอาจเหมาะกับความต้องการของคุณ   -  person Kostas K.    schedule 03.11.2017
comment
@MartinKS - ดูลิงก์นี้เช่นกัน คุณสามารถวนซ้ำพจนานุกรมได้อย่างง่ายดาย - excelmacromastery.com/vba-dictionary< /ก>   -  person Vityata    schedule 03.11.2017
comment
โอเค ฉันสามารถดูวิธีใช้พจนานุกรมได้ และนั่นคือสิ่งที่ฉันต้องการสำหรับการค้นหาเส้นทางอย่างรวดเร็ว ขณะนี้ฉันมีรายการค่าคู่คีย์ 1,500 ค่า วิธีที่ดีที่สุดในการเตรียมค่าเหล่านั้นลงในมาโครให้พร้อมในแต่ละครั้งที่ทำงานคืออะไร   -  person Martin KS    schedule 03.11.2017
comment
@MartinKS: สองวิธีที่จะนึกถึงได้ทันที: (1) เก็บไว้ในสมุดงานที่ประมวลผลโดยแมโครเมื่อเริ่มต้น; หรือ (2) เขียนโค้ดเพื่อเขียนรูทีนการเริ่มต้นจากทุกที่ที่คุณมีรายการเก็บไว้ตอนนี้ BTW: ออบเจ็กต์คอลเลกชัน VBA เป็นพจนานุกรมคีย์-ค่าที่เป็นแกนหลัก   -  person Pieter Geerkens    schedule 03.11.2017
comment
@PieterGeerkens - ฉันคิดว่าไฟล์ csv เป็นตัวเลือกที่เร็วกว่าการเริ่มสำเนา Excel ดังนั้นฉันจะทดสอบเส้นทางนั้น   -  person Martin KS    schedule 03.11.2017
comment
@MartinKS: โปรดทราบว่าแอปพลิเคชันเริ่มต้นที่เกี่ยวข้องกับส่วนขยาย .csv มักจะเป็น EXCEL.exe ;-)   -  person Pieter Geerkens    schedule 03.11.2017
comment
@PieterGeerkens - ฉันแค่จะใช้ Open csvFilePath For Input As #FileNum ธรรมดา แต่ขอบคุณที่เตือน   -  person Martin KS    schedule 03.11.2017


คำตอบ (1)


วิธีง่ายๆ คือการติดค่าทั้งหมดลงในไฟล์ข้อความโดยคั่นคีย์และค่าด้วยช่องว่าง (หรืออักขระที่เหมาะสมอื่นๆ หากมีช่องว่างในคีย์หรือค่า) จากนั้นเพิ่มลงในพจนานุกรม บน P3 300MHz ของฉัน ใช้เวลาน้อยกว่าหนึ่งวินาทีในการทำงาน

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
ขอบคุณ - นี่คือคำตอบที่ได้รับในความคิดเห็น - person Martin KS; 03.11.2017