EXCEL と ACCESS にはファイルダイヤログがありますが、PowerPoint にはありませんので、 EXCEL のファイルダイヤログを使います。
ユーザーフォームに書くコード
とりあえず CODE の全体は次のようになります。
ボタン「ダイヤログ」のクリックすると MsgBox を実行するために getFileName を実行して戻り値を取得しようとします。
値を取得したらメッセージを表示します。
Option Explicit '// 64bit版 #If VBA7 And Win64 Then Private Declare PtrSafe Function SetForegroundWindow Lib "user32" _ (ByVal hwnd As LongPtr) As Long '// 32bit版 #Else Private Declare Function SetForegroundWindow Lib "user32" _ (ByVal hwnd As Long) As Long #End If Private xlApp As Object '----------------------------------------- 'フォームを開くときに実行するコード Private Sub UserForm_Initialize() If Not xlApp Is Nothing Then Set xlApp = Nothing End If Set xlApp = CreateObject("Excel.application") End Sub '----------------------------------------- 'ボタン「閉じる」のクリック Private Sub bu閉じる_Click() Unload Me End Sub '----------------------------------------- 'フォームが閉じるときに実行されるコード Private Sub UserForm_Terminate() Set xlApp = Nothing End Sub '----------------------------------------- 'ボタン「ダイヤログ」のクリック Private Sub buダイヤログ_Click() MsgBox getFileName("Accessを選択") End Sub '----------------------------------------- 'エクセルのダイヤログを開き選択したファイルのパスを返します。 Private Function getFileName(ByVal myTitle As String) As String Const msoFileDialogFilePicker = 3 Dim ThisPath As String Dim BUF As String '開いている PowerPoint のパス ThisPath = ActivePresentation.Path BUF = "" 'エクセルのダイヤログを開きます。 With xlApp 'これをしないとExcelはPowerPointに隠れたままです。 Call SetForegroundWindow(.hwnd) With .FileDialog(msoFileDialogFilePicker) .InitialFileName = ThisPath & "\" .AllowMultiSelect = False .Title = myTitle .Filters.Add "ACCESS", "*.accdb" .Filters.Add "すべてのファイル", "*.*" .FilterIndex = 1 .ButtonName = "開く" If .Show = True Then BUF = .SelectedItems(1) End If End With 'エクセルを閉じる .Quit End With getFileName = BUF End Function
コードの実行
フォームを開き、ボタン「ダイヤログ」をクリックします。
EXCEL のダイヤログ
EXCEL のダイヤログが開いてます。選択してボタン「開く」をクリックします。
戻り値を表示
選択した ACCESS ファイルのフルパスがPowerPoint のメッセージで表示されました。