-PR-
解決
済み

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

  • 暇なときにでも
  • 質問No.4321
  • 閲覧数753
  • ありがとう数9
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 59% (26/44)

EXCELVBAでフォルダを指定する(ファイルではなく)ダイアログを表示させたいの
ですが、VBで存在するコントロールがVBAにないので、どのようにすればいいのか
わかりません。どなたか、具体的に教えていただけませんでしょうか?
EXCEL97を使っています。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル7

ベストアンサー率 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:00
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル13

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

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

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

あと、場所は忘れましたが、CmDialog.OCXと同等の機能を持つクラスがフリーソフ
ト(だったかな?)として公開されていたと思います。こっちであれば、再配布のと
きの問題(いちいちインストールしなきゃならないなど)は少ないんじゃないかと…
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

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

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ