• ベストアンサー

EXCELVBAでフォルダを指定するダイアログ

EXCELVBAでフォルダを指定する(ファイルではなく)ダイアログを表示させたいの ですが、VBで存在するコントロールがVBAにないので、どのようにすればいいのか わかりません。どなたか、具体的に教えていただけませんでしょうか? EXCEL97を使っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • baka
  • ベストアンサー率83% (15/18)
回答No.2

コントロールを使わない方法です。 Option Explicit Type BROWSEINFO hwndOwner As Long pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfn As Long lParam As String iImage As Long End Type Const BIF_BROWSEFORCOMPUTER = 1 Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpbi As BROWSEINFO) As Long Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long Declare Function SHFree Lib "shell32" Alias "#195" (ByVal pidl As Long) As Long Sub test() Dim udtBROWSEINFO As BROWSEINFO Dim lngFolder As Long Dim strPathname As String With udtBROWSEINFO .hwndOwner = FindWindow("XLMAIN", vbNullString) .lpszTitle = "フォルダを選択してください..." .ulFlags = BIF_BROWSEFORCOMPUTER End With strPathname = String$(256, vbNullChar) lngFolder = SHBrowseForFolder(udtBROWSEINFO) SHGetPathFromIDList lngFolder, strPathname SHFree lngFolder MsgBox strPathname End Sub

yamasa
質問者

お礼

すばらしいです。 感動して声をあげて喜んでしまいました。 そっくりそのままで、出来てしまいました。 自分の勉強不足のため、ちょっと難しくてコードの意味は よく分からないのが、残念です。 本当にありがとうございました。

その他の回答 (1)

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

Excelのシートにも、コモンダイアログ(OCX)を貼り付けることができるので、それ を使えば簡単に作れると思います。 [表示]-[ツールバー]でコントロールツールボックスを表示させて、[コントロール の選択]-[Microsoft Common Dialog...] を選べばいいはずです。 あと、場所は忘れましたが、CmDialog.OCXと同等の機能を持つクラスがフリーソフ ト(だったかな?)として公開されていたと思います。こっちであれば、再配布のと きの問題(いちいちインストールしなきゃならないなど)は少ないんじゃないかと…

専門家に質問してみよう