Установка объекта папки через строку, описывающую его путь - PullRequest
0 голосов
/ 20 февраля 2019

В MS Outlook (2016) я работаю над процедурой VBA для более быстрого архивирования определенных, индивидуально выбранных электронных писем в определенные папки в моем архиве электронной почты.

У меня есть процедура, которая выполняетхитрость, когда я обращаюсь к целевой папке вручную:

'[...]
Dim MoveToFolder As Outlook.MAPIFolder
'[...]
Set MoveToFolder = ns.Folders("Archive").Folders("Projekte-Archiv").Folders("P03_NetRef")
'[...]

С этим процедура знает, в какую папку перемещать предварительно выбранную электронную почту.

Теперь моя проблема:

Я пытаюсь установить объект папки «MoveToFolder» через строковую переменную , предоставляя ему все необходимые данные.

Почему я хочу это сделать: передача данных папки в виде строковой переменной позволила бы мне использовать одну и ту же процедуру для любого количества папок на любом количестве уровней иерархии, которые я хочу.

Здесьэто то, что я придумал, используя функцию CType:

'[...]
Dim MoveToFolder As Outlook.MAPIFolder
'[...]
Set MoveToFolder = CType("ns.Folders(""Archive"").Folders(""Projekte-Archiv"").Folders(""P03_NetRef"")", Outlook.MAPIFolder)
'[...]

(Идея, конечно, в следующем шаге вставить строку через переменную, а не в простом написании, как в примере.)

Это не работает.Тип объекта «Outlook.MAPIFolder» приводит к ошибке при компиляции («метод или объект данных не найден»).

Позже

Как я понял позжефункция CType () недоступна в VBA (в отличие от VB.net).

1 Ответ

0 голосов
/ 20 февраля 2019

Не проверено:

Set MoveToFolder = GetFolder(ns, "Archive|Projekte-Archiv|P03_NetRef")

Функция для анализа пути:

Function GetFolder(root, fpath)
    Dim f As Object
    Dim arr, i
    arr = Split(fpath, "|")
    For i = 0 To UBound(arr)
        If i = 0 Then
            Set f = root.Folders(arr(i))
        Else
            Set f = f.Folders(arr(i))
        End If
    Next i
    Set GetFolder = f
End Function
...