Есть ли диалог SaveAs?
Я хочу сохранить вложение с SaveAs
файл диалога. Можно ли сделать это с VBA и Outlook?
3 ответа
Я не думаю, что Outlook позволит вам открыть диалоговое окно файла!
Уродливый, но быстрый и функциональный обходной путь, который я использовал, состоит в том, чтобы временно открыть экземпляр Excel и использовать его GetSaveAsFilename
метод.
Set xlApp = CreateObject("Excel.application")
xlApp.Visible = False
strSaveAsFilename = xlApp.GetSaveAsFilename
xlApp.Quit
Set xlApp = Nothing
Тогда вы можете сказать MyAttachment.SaveAsFile(strSaveAsFilename)
,
Если Excel не обязательно установлен, то вы можете сделать аналогичный трюк, используя Word и метод FileDialog (Word не имеет GetSaveAsFilename). См. Справку VBA на FileDialog для примера.
Возможно, есть более элегантное решение, но вышесказанное сработает...
Не забывайте BrowseForFolder
функция:
Function BrowseForFolder(Optional OpenAt As String) As String
Dim ShellApp As Object
Set ShellApp = CreateObject("Shell.Application"). _
BrowseForFolder(0, "Please choose a folder", 0, OpenAt)
On Error Resume Next
BrowseForFolder = ShellApp.self.Path
On Error GoTo 0
Select Case Mid(BrowseForFolder, 2, 1)
Case Is = ":"
If Left(BrowseForFolder, 1) = ":" Then
BrowseForFolder = ""
End If
Case Is = "\"
If Not Left(BrowseForFolder, 1) = "\" Then
BrowseForFolder = ""
End If
Case Else
BrowseForFolder = ""
End Select
ExitFunction:
Set ShellApp = Nothing
End Function
Есть два способа смоделировать это поведение (я предполагаю, что Outlook 2003 здесь):
Использовать файл "Сохранить вложения
Этот код вызовет программный пункт "Сохранить вложения" в меню "Файл". Три вспомогательные функции, приведенные ниже, необходимы и должны быть вставлены в один и тот же проект. Выберите или откройте письмо с вложениями и запустите SaveAttachments
процедура.
Sub SaveAttachments()
Dim obj As Object
Dim msg As Outlook.mailItem
Dim insp As Outlook.Inspector
Set obj = GetCurrentItem
If TypeName(obj) = "MailItem" Then
Set msg = obj
Set insp = msg.GetInspector
With insp
.Display
' execute the File >> Save Attachments control
.CommandBars.FindControl(, 3167).Execute
.Close olDiscard ' or olPromptForSave, or olSave
End With
End If
End Sub
Function GetCurrentItem() As Object
Select Case True
Case IsExplorer(Application.ActiveWindow)
Set GetCurrentItem = ActiveExplorer.Selection.item(1)
Case IsInspector(Application.ActiveWindow)
Set GetCurrentItem = ActiveInspector.CurrentItem
End Select
End Function
Function IsExplorer(itm As Object) As Boolean
IsExplorer = (TypeName(itm) = "Explorer")
End Function
Function IsInspector(itm As Object) As Boolean
IsInspector = (TypeName(itm) = "Inspector")
End Function
Обратите внимание, что если есть несколько вложений, вам будет предложено выбрать, какие из них вы хотите сохранить, прежде чем появится диалоговое окно сохранения:
Используйте BrowseForFolder
Я использую функцию BrowseForFolder, найденную в VBAX. Это покажет диалог BrowseForFolder Shell.Application:
Выберите или откройте письмо с вложениями и запустите SaveAttachments
процедура. После выбора папки в диалоговом окне все вложения в электронное письмо будут сохранены в выбранной папке.
Sub SaveAttachments()
Dim folderToSave As String
Dim obj As Object
Dim msg As Outlook.mailItem
Dim msgAttachs As Outlook.attachments
Dim msgAttach As Outlook.Attachment
folderToSave = BrowseForFolder
If folderToSave <> "False" Then
Set obj = GetCurrentItem
If TypeName(obj) = "MailItem" Then
Set msg = obj
Set msgAttachs = msg.attachments
For Each msgAttach In msgAttachs
msgAttach.SaveAsFile folderToSave & "\" & msgAttach.FileName
Next msgAttach
End If
End If
End Sub
Function GetCurrentItem() As Object
Select Case True
Case IsExplorer(Application.ActiveWindow)
Set GetCurrentItem = ActiveExplorer.Selection.item(1)
Case IsInspector(Application.ActiveWindow)
Set GetCurrentItem = ActiveInspector.CurrentItem
End Select
End Function
Function IsExplorer(itm As Object) As Boolean
IsExplorer = (TypeName(itm) = "Explorer")
End Function
Function IsInspector(itm As Object) As Boolean
IsInspector = (TypeName(itm) = "Inspector")
End Function