VBAを使用してPSTでMapiFolderを作成します
-
09-10-2019 - |
質問
フォルダーとサブフォルダーの構造をあるOutlook PSTから別のフォルダーにコピーしようとしていますが、 Folders.Add()
声明:
Private Sub Process(S As MAPIFolder, T As MAPIFolder, RootLevel As Boolean, BeforeDate As Date)
Dim N As NameSpace, F As MAPIFolder, G As MAPIFolder
' S is source folder (parameter)
' T is target folder (parameter)
' F is current source subfolder for recursion (private)
' G is target folder for recursion (private)
Set N = Application.GetNamespace("MAPI")
' recurse through subfolders
For Each F In S.Folders
If F.Items.Count <> 0 Or F.Folders.Count <> 0 Then ' process only if items or subfolders found
If FoundFolder(T, F) Then ' this function works fine
Set G = T.Folders(F.Name) ' found - just assign
Else
Set G = T.Folders.Add(F.Name, N.GetDefaultFolder(F.DefaultItemType)) ' not found - create
End If
'
' more code (working well)
'
' process next level without Root flag
Process F, G, False, BeforeDate
End If
Next F
Set F = Nothing
Set G = Nothing
End Sub
のように Folders.Add()
ステートメント私は指定しません Type
パラメーターは、DefaultType Olmailitemを備えたフォルダーが作成されます(私のルートフォルダーがたまたまメールフォルダーであるため)。ただし、ソースフォルダーと同じタイプのフォルダーを作成したいと思います。
最初の特異な観察:
- VBAヘルプ、MSNなどは、フォルダーの場合(名前、タイプ)タイプはオプションの長いと言います。
- VBAエディターは(タイピング時にツールチップで)タイプはMapiFolderであると言います
2番目の観察:しかし、私はタイプの引数を設定しようとします、私はエラーを受け取ります
エラー-2147024809(80070057)
操作を完了できませんでした。 1つ以上のパラメーター値は無効です
次のことを試しました
' Type as Long
Set G = T.Folders.Add(F.Name, 0)
Set G = T.Folders.Add(F.Name, olMailItem)
Set G = T.Folders.Add(F.Name, OlItemType.olMailItem)
Set G = T.Folders.Add(F.Name, F.DefaultItemType) ' this is what I actually want
' Type as MAPIFolder
Set G = T.Folders.Add(F.Name, F)
Set G = T.Folders.Add(F.Name, N.GetDefaultFolder(F.DefaultItemType))
エラー - エラー - エラー
ソースフォルダーfと同じタイプのフォルダーを作成するにはどうすればよいですか
誰でも助けてください....お願いします
よろしくお願いします
解決
OK解決された....問題は私が単に使用したことでした 間違った列挙 :-(
と同様のタイプのMapiフォルダーを作成する関数 Source
与えられた下 Target
このように見えます:
Private Function CreateFolderOfType(Source As MAPIFolder, Target As MAPIFolder) As MAPIFolder
Dim F As MAPIFolder
Set CreateFolderOfType = Nothing
' if source already exists below Target
For Each F In Target.Folders
If F.Name = Source.Name Then
Set CreateFolderOfType = F
Exit Function
End If
Next F
Select Case Source.DefaultItemType
Case olAppointmentItem
Set CreateFolderOfType = Target.Folders.Add(Source.Name, olFolderCalendar)
Case olContactItem, olDistributionListItem
Set CreateFolderOfType = Target.Folders.Add(Source.Name, olFolderContacts)
Case olJournalItem
Set CreateFolderOfType = Target.Folders.Add(Source.Name, olFolderJournal)
Case olMailItem, olPostItem
Set CreateFolderOfType = Target.Folders.Add(Source.Name, olFolderInbox)
Case olNoteItem
Set CreateFolderOfType = Target.Folders.Add(Source.Name, olFolderNotes)
Case olTaskItem
Set CreateFolderOfType = Target.Folders.Add(Source.Name, olFolderTasks)
Case Else
Set CreateFolderOfType = Target.Folders.Add(Source.Name)
End Select
End Function
所属していません StackOverflow