【问题标题】:Array VBA not getting populated with the first value assigned数组 VBA 未填充分配的第一个值
【发布时间】:2020-01-03 11:13:33
【问题描述】:

尝试构建一个宏以将我的待办事项列表复制到 Outlook 中的任务列表文件夹。我想对任务列表进行某种验证,以在运行宏时不重复任务。所以我的 plan是比较To-Do和Tasks的主题数组。

Set TaskFolder = Session.GetDefaultFolder(olFolderTasks)
i = 0 
For Each CurrentItem In TaskFolder.Items
   If TypeOf CurrentItem Is Outlook.TaskItem Then
        Dim otMail As Outlook.TaskItem: Set otMail = CurrentItem
        arrTaskSubject(i) = otMail.Subject
   End If
   i = i + 1
   ReDim Preserve arrTaskSubject(i)
Next CurrentItem

我的 Tasks Outlook 中只有 2 个任务,主题为 TASK1 和 TASK2。但是,当我尝试将元素从任务列表保存到数组时,它只会保存数组中的最后一个元素。

断点下一个 CurrentItem 我得到这些值:

在下一个执行周期,我有这些值:

为什么不将 TASK1 和 TASK2 都保存到 arrTaskSubject 数组中?

【问题讨论】:

  • 你是如何声明变量 arrTaskSubject 的?
  • 将 arrTaskSubject() 调暗为字符串。这就是问题所在,我必须在分配之前重新调整数组

标签: vba outlook


【解决方案1】:

一开始数组没有大小,所以没有给它分配Task1

当它移动到 Task2 时,它会将其分配给 i=1,然后重新调整为大小 2

您可以通过以下方式更改代码:

Set TaskFolder = Session.GetDefaultFolder(olFolderTasks)
i = 0 
For Each CurrentItem In TaskFolder.Items
   If TypeOf CurrentItem Is Outlook.TaskItem Then
        ReDim Preserve arrTaskSubject(i)
        Dim otMail As Outlook.TaskItem: Set otMail = CurrentItem
        arrTaskSubject(i) = otMail.Subject
        i = i + 1
   End If
Next CurrentItem

这将使用索引 0 处的 Task1 和索引 1 处的 Task 2 填充数组

如果您想在数组中保留空项(如果有的话),那么您应该将 i 增量移出 if

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    相关资源
    最近更新 更多