【发布时间】:2020-06-18 21:07:29
【问题描述】:
在现有邮箱文件夹层次结构中,有一个文件夹包含名为“01”、“05”、“06”等的子文件夹。请注意,数字不连续:“02”、“03”、“04”此示例中缺少。在我的 VBA 代码中,我需要检查一个名为“02”的文件夹是否存在,如果不存在,则创建它。
我目前有(被剥离到最低限度):
Dim NameStr as String
NameStr="02"
On Error Resume Next
Set NewSubFolder = ContainerFolder.folders(NameStr)
On Error GoTo 0
If NewSubFolder Is Nothing Then
Set NewSubFolder = ContainerFolder.folders.Add(NameStr)
End If
只要 NameStr 包含一个字母数字字符串,或者一个数值大于 ContainerFolder 中的项目数的纯数字字符串(例如“2020”),一切正常。但是,如果 NameStr 设置为“02”(或其他低到足以作为现有子文件夹的序列号的值),则第一个 set 语句不会失败并返回 Nothing,而是返回指向第三个文件夹的指针(从零,02 对应于容器文件夹中的第 3 项)。在上面的示例中,这将是“06”。不会创建名为“02”的文件夹。
显然 VBA 解释器“亲切地”将字符串“02”转换为整数 2,然后返回指向第三个文件夹的指针。如何防止这种行为? 如何强制 Outlook 检查名称中只有数字的文件夹是否存在?
【问题讨论】:
-
进一步查看我的调试输出,我什至不确定字符串“02”是否会被解释为子文件夹的序列号。似乎返回了一个指向看似随机的现有子文件夹的指针。
-
使用 Item 属性有帮助吗?
Set NewSubFolder = ContainerFolder.Folders.Item(NameStr)? -
我想我最初有 Item() 并删除它只是为了看看它是否有所作为。现在又加回来了。没有任何区别。
-
没有真正解决根本问题,但您可以创建一个函数,将父文件夹和要查找的子文件夹的名称传递给该函数:该函数循环遍历子文件夹,检查每个匹配的名称,并返回匹配的子文件夹(如果不匹配,则返回
Nothing)。