• ベストアンサー
  • 暇なときにでも

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

  • 質問No.4321
  • 閲覧数903
  • ありがとう数9
  • 回答数2

お礼率 59% (26/44)

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

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

  • 回答No.2
  • ベストアンサー

ベストアンサー率 83% (15/18)

コントロールを使わない方法です。


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

お礼率 59% (26/44)

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

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 46% (643/1383)

Excelのシートにも、コモンダイアログ(OCX)を貼り付けることができるので、それ
を使えば簡単に作れると思います。

[表示]-[ツールバー]でコントロールツールボックスを表示させて、[コントロール
の選択]-[Microsoft Common Dialog...] を選べばいいはずです。

あと、場所は忘れましたが、CmDialog.OCXと同等の機能を持つクラスがフリーソフ
ト(だったかな?)として公開されていたと思います。こっちであれば、再配布のと
きの問題(いちいちインストールしなきゃならないなど)は少ないんじゃないかと…
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ