Я не понимаю: If myFolder.Folders("Close") = 0 Then
. myFolder.Folders("Close")
- это папка, и я бы не стал сравнивать ее с нулем. У вас есть ссылка на сайт, где объясняется эта функциональность, потому что я хотел бы ее понять?
Я хочу создать папку, если она не существует достаточно часто, чтобы написать функцию. Моя функция не имеет идеальных параметров для ваших требований, но она работает. Я предлагаю его как проверенный код, который делает то, что вы хотите, или как источник идей для вашего собственного кода.
Sub DemoGetCreateFldr
показывает, как использовать функцию GetCreateFldr
для достижения желаемого эффекта.
Я не использую GetDefaultFolder
, потому что в моей системе он возвращает ссылку на магазин, которым я не пользуюсь. «Файл данных Outlook» - это хранилище Outlook по умолчанию, но мастер создал отдельное хранилище для каждого из двух моих адресов электронной почты. В Set Store = Session.Folders("Outlook Data File")
замените «Файл данных Outlook» именем магазина, содержащего папку «Входящие», для которой вы хотите создать подпапки.
При первом вызове GetCreateFldr
создается папка «Закрыть», если она не существует, а затем создается папка «EID1». Я сохраняю ссылку на папку и использую Debug.Print, чтобы продемонстрировать, что она возвращает правильную ссылку.
Для папок «EID2» и «EID3» я не сохраняю ссылку, соответствующую вашему коду.
Если существуют папки «Закрыть», «EID1», «EID2» и «EID3», GetCreateFldr
не пытается создать их, хотя все равно возвращает ссылку.
Надеюсь, это поможет.
Sub DemoGetCreateFldr()
Dim FldrEID1 As Folder
Dim FldrNameFull(1 To 3) As String
Dim Store As Folder
Set Store = Session.Folders("Outlook Data File")
FldrNameFull(1) = "Inbox"
FldrNameFull(2) = "Close"
FldrNameFull(3) = "EID1"
Set FldrEID1 = GetCreateFldr(Store, FldrNameFull)
Debug.Print FldrEID1.Parent.Parent.Parent.Name & "|" & _
FldrEID1.Parent.Parent.Name & "|" & _
FldrEID1.Parent.Name & "|" & _
FldrEID1.Name
FldrNameFull(3) = "EID2"
Call GetCreateFldr(Store, FldrNameFull)
FldrNameFull(3) = "EID3"
Call GetCreateFldr(Store, FldrNameFull)
End Sub
Public Function GetCreateFldr(ByRef Store As Folder, _
ByRef FldrNameFull() As String) As Folder
' * Store identifies the store, which must exist, in which the folder is
' wanted.
' * FldrNameFull identifies a folder which is or is wanted within Store.
' Find the folder if it exists otherwise create it. Either way, return
' a reference to it.
' * If LB is the lower bound of FldrNameFull:
' * FldrNameFull(LB) is the name of a folder that is wanted within Store.
' * FldrNameFull(LB+1) is the name of a folder that is wanted within
' FldrNameFull(LB).
' * FldrNameFull(LB+2) is the name of a folder that is wanted within
' FldrNameFull(LB+1).
' * And so on until the full name of the wanted folder is specified.
' 17Oct16 Date coded not recorded but must be before this date
Dim FldrChld As Folder
Dim FldrCrnt As Folder
Dim ChildExists As Boolean
Dim InxC As Long
Dim InxFN As Long
Set FldrCrnt = Store
For InxFN = LBound(FldrNameFull) To UBound(FldrNameFull)
ChildExists = True
' Is FldrNameFull(InxFN) a child of FldrCrnt?
On Error Resume Next
Set FldrChld = Nothing ' Ensure value is Nothing if following statement fails
Set FldrChld = FldrCrnt.Folders(FldrNameFull(InxFN))
On Error GoTo 0
If FldrChld Is Nothing Then
' Child does not exist
ChildExists = False
Exit For
End If
Set FldrCrnt = FldrChld
Next
If ChildExists Then
' Folder already exists
Else
' Folder does not exist. Create it and any children
Set FldrCrnt = FldrCrnt.Folders.Add(FldrNameFull(InxFN))
For InxFN = InxFN + 1 To UBound(FldrNameFull)
Set FldrCrnt = FldrCrnt.Folders.Add(FldrNameFull(InxFN))
Next
End If
Set GetCreateFldr = FldrCrnt
End Function