2017-05-11 9 views
2

Outlook用のVBAマクロを作成していますが、Application.FileDialogメソッドは使用できません。Outlook Application.FileDialogが見つかりません

インテントは、ユーザーがフォルダ(Outlook電子メールフォルダではなくファイルシステムディレクトリフォルダ)を選択するためのものです。

  • のVisual BasicアプリケーションのMicrosoft Outlook 15.0オブジェクトライブラリのための
  • のMicrosoft Office 15.0オブジェクトライブラリOLEオートメーションMicrosoftは
  • のMicrosoft Office 15.0 Object Libraryの
  • フォーム:ここ

    は、私が有効になっている参照ですOLEオートメーションMicrosoftフォームオブジェクトライブラリ

  • Microsoft Scripting Run-time
  • Microsoft Office 15.0 Accessデータベースエンジンオブジェクトライブラリ

ご意見はありますか?

+2

を使用していた別の回避策があります。ファイルを選択したいだけですか? –

+0

ユーザーがフォルダを選択できるようにしたい。 –

+0

Application.Session.PickFolderを使用する – 0m3r

答えて

2

Outlookは、FileDialogオブジェクトをサポートしていません。ここでは、回避策です:

Dim xlApp As Object 
Set xlApp = CreateObject("Excel.Application") 
    xlApp.Visible = False 

Dim fd As Office.FileDialog 
Set fd = xlApp.Application.FileDialog(msoFileDialogFilePicker) 

Dim selectedItem As Variant 

If fd.Show = -1 Then 
    For Each selectedItem In fd.SelectedItems 
     Debug.Print selectedItem 
    Next 
End If 

Set fd = Nothing 
    xlApp.Quit 
Set xlApp = Nothing 
+1

パーフェクト! 私は5年ごとに1日か2日しかVBAで作業しません。まだExcelやWordアプリケーションを作成する方法はまだ分かりませんでした。時間を節約してくれてありがとう! –

0

ここで私はそれがExcelの参照(私のPC上のMicrosoft Excel 14.0オブジェクトライブラリ)ですかなり確信して

Option Explicit 
' For Outlook 2010. 
#If VBA7 Then 
    ' The window handle of Outlook. 
    Private lHwnd As LongPtr 

    ' /* API declarations. */ 
    Private Declare PtrSafe Function FindWindow Lib "user32" _ 
      Alias "FindWindowA" (ByVal lpClassName As String, _ 
           ByVal lpWindowName As String) As LongPtr 

' For the previous version of Outlook 2010. 
#Else 
    ' The window handle of Outlook. 
    Private lHwnd As Long 

    ' /* API declarations. */ 
    Private Declare Function FindWindow Lib "user32" _ 
      Alias "FindWindowA" (ByVal lpClassName As String, _ 
           ByVal lpWindowName As String) As Long 
#End If 
' 
' Windows desktop - 
' the virtual folder that is the root of the namespace. 
Private Const CSIDL_DESKTOP = &H0 

' Only return file system directories. 
' If user selects folders that are not part of the file system, 
' then OK button is grayed. 
Private Const BIF_RETURNONLYFSDIRS = &H1 

' Do not include network folders below 
' the domain level in the dialog box's tree view control. 
Private Const BIF_DONTGOBELOWDOMAIN = &H2 

Public Sub SelectFolder() 
    Dim objFSO As Object 
    Dim objShell As Object 
    Dim objFolder As Object 
    Dim strFolderPath As String 
    Dim blnIsEnd As Boolean 

    blnIsEnd = False 

    Set objShell = CreateObject("Shell.Application") 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set objFolder = objShell.BrowseForFolder(_ 
       lHwnd, "Please Select Folder to:", _ 
       BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN, CSIDL_DESKTOP) 


    If objFolder Is Nothing Then 
     strFolderPath = "" 
     blnIsEnd = True 
     GoTo PROC_EXIT 
    Else 
     strFolderPath = CGPath(objFolder.Self.Path) 
    End If 

PROC_EXIT: 
    Set objFSO = Nothing 
    If blnIsEnd Then End 
End Sub 

Public Function CGPath(ByVal Path As String) As String 
    If Right(Path, 1) <> "\" Then Path = Path & "\" 
    CGPath = Path 
End Function 
関連する問題