• ベストアンサー

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と同等の機能を持つクラスがフリーソフ ト(だったかな?)として公開されていたと思います。こっちであれば、再配布のと きの問題(いちいちインストールしなきゃならないなど)は少ないんじゃないかと…

関連するQ&A

  • excelVBAにて開くフォルダを指定

    エクセル上にボタンを作成し、押下するとファイルを選択するダイアログが開き、ファイル(csv)を指定して読み込みエクセルに貼り付けていくというのをつくったのですが、これをフォルダを指定してそのフォルダ内のファイルをすべてループさせて読み込ませたいのですが、フォルダの指定がよくわかりません。参考になるHPなどありましたらご紹介下さい。宜しくお願いいたします。

  • 【AccessVBA】フォルダを指定してインポート

    私は現在、Accessでフォルダ内のExcelファイルを一括でインポートし集計するというツールを作成しております。 そこで質問ですが、フォルダ指定ダイアログを表示し、ダイアログで指定したフォルダ(中はxls,xlsx,xltmなど)をテーブル上にインポートするようなVBAはありますでしょうか? まとめます。 ・フォルダを選択するダイアログを表示したい ・一つのフォルダの中に、幾つものエクセルファイルが存在する ・ファイル名などはバラバラです ・シート単位でインポートしたいです ・インポートするシートを選択できるようにしたいです ・テーブルのカラムは決まっています 以上です。 どうか皆様のアドバイスよろしくお願い致します。

  • ExcelVBAで

    ExcelVBAで、Excelファイルを保存するダイアログを表示し、指定パスにファイル名を指定して保存したいのですが、 保存ダイアログが開いた際に、デフォルトでパスを指定しておくことは可能なんでしょうか?(プログラム上で)

  • ExcelVBAでJPEG画像を比較

    ExcelVBAの初心者です。 Excelにイメージコントロールを2つ貼り付け、片方には任意のJPEGファイルを表示させるというVBAを作成しました(やっとの思いで)。JPEGファイルは特定のフォルダに多数存在しています。 片方のJPEGファイルが表示された時、同じ画像の(又は酷似している)ファイルがあれば、その画像をもう1つのイメージコントロールに表示させるという事はできるのでしょうか。もしできるのであれば、その方法と記述を教えて頂きたいのです。 なにぶん初心者です...よろしくお願いします。 ちなみに、Excel2000です。

  • VBScriptでのフォルダ指定ダイアログについて

    VBSciptでの「フォルダ指定ダイアログ」について教えてください。 「フォルダ指定ダイアログ」を利用して、保存元のフォルダと保存先の フォルダを選択し、特定ファイル(*.jpg)のコピーをするツールを作っています。 下記のプログラムで、「フォルダ指定ダイアログ」が表示されるのは 確認できたのですが、選択したフォルダの階層をテキストフォームに 表示させる方法を教えてください。(書き込みできませんのエラーになります。) --------------------------------------------------------- Dim objShell Dim objFolder ' オブジェクトの生成 Set objShell = CreateObject("Shell.Application") ' フォルダ選択ダイアログを表示 Set objFolder = objShell.BrowseForFolder(0, "フォルダを選択してください。", 0) Set objShell = Nothing --------------------------------------------------------- 以上、宜しくお願い致します。

  • ExcelのVBAでフォルダ指定ができるダイアログボックスを出す方法

    指定したフォルダに自動でExcelファイルを保存できるようにしたいのですが、フォルダ指定ができるダイアログボックスはないのでしょうか?ファイルを指定するダイアログボックスはできるのですが、それでは必ずファイルを選択しないといけないので・・・ 指定できる方法が見つかりません。何か良い方法はないでしょうか?よろしくお願い致します。

  • ExcelVBAでファイルを開くフォルダ指定方法

    ExcelのVBAを用いて実験データのcsvファイルをまとめるプログラムを書いています. 肝心のプログラムはほぼできています. しかし OpenfileName = Application.GetOpenFilename("CSVファイル,*.csv?") としたときに開かれるフォルダ(ファイルを指定するフォルダ)がカレントフォルダ?となっております. 実行するExcel(VBA入り)と実験データが下記のパスにあったとして C:\Users\ABC\Documents\Data\110302\ カレントフォルダはなぜかマイドキュメントがデフォルトになってしまいます. C:\Users\ABC\Documents\ 階層移動できるので問題なくもないのですが,一々階層移動するのも面倒なので修正したいと考えております. そこで (1)プログラム実行直前にカレントフォルダを実行するExcel(VBA入り)の位置に変更する方法 (2)カレントフォルダと関係なく実行するExcel(VBA入り)があるフォルダを開く方法 どちらかで対処できると考えたのですがその方法が見つかりません. (ちなみに実行するExcel(VBA入り)の位置は動かすものとするので絶対パスでの指定はなしとします) どなたかご教授お願いします.

  • フォルダを開くダイアログ

    C++ Builder6を使用しています。 ファイルを開くダイアログと同じように、フォルダを開くダイアログがほしいのですが、自作するしかないのでしょうか? 指定されたフォルダにファイルを書き出したりする為に、ユーザーがフォルダの位置を指定出来る様にしたいのです。 Builder初心者なので、回答お願い致します。

  • VBAでユーザーにフォルダを指定させたい

     Win2000でEXCEL97を使ってます。  ExcelVBAでダイアログボックスなどによりユーザーにフォルダを指定させたいのです。  ファイルを指定させるには、GetOpenFileNameメソッドを使えば出来ることは分かったのですが、フォルダを指定させるような方法が分からないのです。  本で読んだところでは、Excel2002ではFileDialogプロパティで可能なようなのですが、Excel97では出来ないようで…  97でも可能な方法があればご教授下さい。  よろしくお願いします。

  • フォルダ参照のダイアログについて

    フォルダ参照のダイアログ(フォルダだけを選択できるように)を表示したいのですが、 毎回違うダイアログボックスが表示されて困っております。 具体的には「フォルダの参照」や「コンピュータの参照」、「プリンタの参照」といった ダイアログがランダムに表示されています。 BrowseInfo構造体の ulFlags に BIF_RETURNONLYFSDIRS を指定して 呼び出しているのですが、記述の仕方がまずいのでしょうか? 毎回違うものが表示されるのが何故かわからないので 何か参考になるようなホームページなどを教えて頂けると助かります。