vba 中的 Public 个文件夹
Public folders in vba
我正在努力寻找如何从 word 宏创建 public 文件夹,目前我正在 outlook 中调试。问题是我的宏将被多个用户 运行 因此我不能在 "public folders -xxxx@xxx.no" 中进行硬编码那么有没有办法避免这种情况?
Sub AddContactsFolder()
Dim myNameSpace As Outlook.NameSpace
Dim myFolder As MAPIFolder
Dim myNewFolder As MAPIFolder
Set myNameSpace = Application.GetNamespace("MAPI")
'Set myFolder = myNameSpace.GetDefaultFolder(olFolderContacts)
'Set myFolder = myNameSpace.GetSharedDefaultFolder(
'Set myFolder = GetFolder("Public Folders - xxxx@xxxx.no/All Public Folders/Prototech/")
'fails below .....
Set myFolder = GetFolder("Public Folders - *.xxxxx.no/All Public Folders/Prototech/Avd. 150 R&D") '.Folders.Add("Test")
Set myNewFolder = myFolder.Folders.Add("AAAAA")
End Sub
Public Function GetFolder(strFolderPath As String) As MAPIFolder
' strFolderPath needs to be something like
' "Public Folders\All Public Folders\Company\Sales" or
' "Personal Folders\Inbox\My Folder"
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim colFolders As Outlook.Folders
Dim objFolder As Outlook.MAPIFolder
Dim arrFolders() As String
Dim I As Long
On Error Resume Next
strFolderPath = Replace(strFolderPath, "/", "\")
arrFolders() = Split(strFolderPath, "\")
Set objApp = Application
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.Folders.Item(arrFolders(0))
If Not objFolder Is Nothing Then
For I = 1 To UBound(arrFolders)
Set colFolders = objFolder.Folders
Set objFolder = Nothing
Set objFolder = colFolders.Item(arrFolders(I))
If objFolder Is Nothing Then
Exit For
End If
Next
End If
Set GetFolder = objFolder
Set colFolders = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Function
遍历 Namespace.Stores 集合中的所有商店,为每个商店检查 Store.ExchangeStoreType
属性。对于 PF 商店,它将是 2 (OlExchangeStoreType.olExchangePublicFolder)
。然后,您可以从 Store.GetRootFolder 文件夹开始向下钻取文件夹层次结构。
您无需指定用户。
Sub AddContactsFolder()
Dim myNameSpace As Outlook.Namespace
Dim myFolder As Folder
Dim myNewFolder As Folder
Dim TopPublicFolder As Folder
Set myNameSpace = Application.GetNamespace("MAPI")
Set TopPublicFolder = myNameSpace.GetDefaultFolder(olPublicFoldersAllPublicFolders)
Set myFolder = TopPublicFolder.Folders("Prototech").Folders("Avd. 150 R&D")
Set myNewFolder = myFolder.Folders.Add("AAAAA")
End Sub
这里是word修改后的工作代码,感谢niton
Sub createPublicFolder(folderName As String)
Dim OutApp As Object
Set OutApp = CreateObject("Outlook.Application")
Dim myNameSpace As Object
Dim myFolder As Object
Dim myNewFolder As Object
Dim TopPublicFolder As Object
Set myNameSpace = OutApp.GetNamespace("MAPI")
Set TopPublicFolder = myNameSpace.GetDefaultFolder(18)
Set myFolder = TopPublicFolder.Folders("Prototech").Folders("Avd. 150 R&D")
Set myNewFolder = myFolder.Folders.Add(folderName)
End Sub
我正在努力寻找如何从 word 宏创建 public 文件夹,目前我正在 outlook 中调试。问题是我的宏将被多个用户 运行 因此我不能在 "public folders -xxxx@xxx.no" 中进行硬编码那么有没有办法避免这种情况?
Sub AddContactsFolder()
Dim myNameSpace As Outlook.NameSpace
Dim myFolder As MAPIFolder
Dim myNewFolder As MAPIFolder
Set myNameSpace = Application.GetNamespace("MAPI")
'Set myFolder = myNameSpace.GetDefaultFolder(olFolderContacts)
'Set myFolder = myNameSpace.GetSharedDefaultFolder(
'Set myFolder = GetFolder("Public Folders - xxxx@xxxx.no/All Public Folders/Prototech/")
'fails below .....
Set myFolder = GetFolder("Public Folders - *.xxxxx.no/All Public Folders/Prototech/Avd. 150 R&D") '.Folders.Add("Test")
Set myNewFolder = myFolder.Folders.Add("AAAAA")
End Sub
Public Function GetFolder(strFolderPath As String) As MAPIFolder
' strFolderPath needs to be something like
' "Public Folders\All Public Folders\Company\Sales" or
' "Personal Folders\Inbox\My Folder"
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim colFolders As Outlook.Folders
Dim objFolder As Outlook.MAPIFolder
Dim arrFolders() As String
Dim I As Long
On Error Resume Next
strFolderPath = Replace(strFolderPath, "/", "\")
arrFolders() = Split(strFolderPath, "\")
Set objApp = Application
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.Folders.Item(arrFolders(0))
If Not objFolder Is Nothing Then
For I = 1 To UBound(arrFolders)
Set colFolders = objFolder.Folders
Set objFolder = Nothing
Set objFolder = colFolders.Item(arrFolders(I))
If objFolder Is Nothing Then
Exit For
End If
Next
End If
Set GetFolder = objFolder
Set colFolders = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Function
遍历 Namespace.Stores 集合中的所有商店,为每个商店检查 Store.ExchangeStoreType
属性。对于 PF 商店,它将是 2 (OlExchangeStoreType.olExchangePublicFolder)
。然后,您可以从 Store.GetRootFolder 文件夹开始向下钻取文件夹层次结构。
您无需指定用户。
Sub AddContactsFolder()
Dim myNameSpace As Outlook.Namespace
Dim myFolder As Folder
Dim myNewFolder As Folder
Dim TopPublicFolder As Folder
Set myNameSpace = Application.GetNamespace("MAPI")
Set TopPublicFolder = myNameSpace.GetDefaultFolder(olPublicFoldersAllPublicFolders)
Set myFolder = TopPublicFolder.Folders("Prototech").Folders("Avd. 150 R&D")
Set myNewFolder = myFolder.Folders.Add("AAAAA")
End Sub
这里是word修改后的工作代码,感谢niton
Sub createPublicFolder(folderName As String)
Dim OutApp As Object
Set OutApp = CreateObject("Outlook.Application")
Dim myNameSpace As Object
Dim myFolder As Object
Dim myNewFolder As Object
Dim TopPublicFolder As Object
Set myNameSpace = OutApp.GetNamespace("MAPI")
Set TopPublicFolder = myNameSpace.GetDefaultFolder(18)
Set myFolder = TopPublicFolder.Folders("Prototech").Folders("Avd. 150 R&D")
Set myNewFolder = myFolder.Folders.Add(folderName)
End Sub