【问题标题】:Storing Key-Value pairs in VBA macro在 VBA 宏中存储键值对
【发布时间】:2020-06-28 18:21:09
【问题描述】:

我在 Outlook 中编写的长宏的最后阶段是将电子邮件发送给适当的人,具体取决于宏发现的所有内容。我在使用 excel 表和“键”值的 vlookup 之前已经完成了这项工作 - 但在这种情况下,键值对将是静态的,因此 excel 感觉有点矫枉过正,并且会减慢速度。

键和值都是字符串,最有可能每个少于 50 个字符,但可能会有大约 1500 对。将其编译成某种 DLL 还是最好的?

【问题讨论】:

  • 每次宏运行时肯定会创建一个包含 1500 行代码的 1500 对字典会有点慢吗?
  • 除非我弄错了;初始化字典:d.Add "a", "Athens"d.Add "b", "Belgrade"
  • 不,这就是你添加它的方式。该字典不是标准 VBA 库的一部分,它位于 Microsoft Scripting Runtime 库中。因此,您要么必须添加对库的引用,要么使用CreateObject("Scripting.Dictionary") 创建对象。互联网上有大量资源可以了解它是如何工作的,最重要的是它的用途。也许一个简单的内置集合可能满足您的需求。
  • @MartinKS - 也可以查看此链接,您可以轻松地遍历字典 - excelmacromastery.com/vba-dictionary

标签: vba outlook


【解决方案1】:

一种简单的方法是将所有值粘贴到文本文件中,键和值之间用空格(或其他合适的字符,如果键或值中有空格)分隔,然后将它们添加到字典中。在我的 300MHz P3 上,这需要不到一秒钟的时间来运行。

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

【讨论】:

  • 谢谢 - 这是在 cmets 中得到的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多