- ベストアンサー
Excel97のVBAでコモンダイアログを使いたい
現在Excel97で二つのテキストデータベース(固定長形式)を読み込み、解析を行おうとしています。 現在、べたに二つのファイルのパスをコードに書き込めばファイルの読み込みも上手くいくのですが、やはりここは出来るならばファイル指定を汎用のダイアログで行えるようにしたいと思いあれこれ方法を探しています。 そこで読み込みたい二つのファイルのパスを、VBで利用できるCommonDialogで取得出来るなら、一からファイル選択用フォームを作成しなくても済むので楽になると思いついたのですが、Excel97のVBAでの転用がうまくいかなくて企画倒れの状態になっています。 参照設定でComCtrl32.OCXを読み込めればと思い試験してみたもののうまくいかず、次の方法が見つからずに途方に暮れています。 もしかしてVBAではコモンダイアログは利用できないのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
少なくともExcel2000ではできました。 Type OPENFILENAME lStructSize As Long hwndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustrFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustrData As Long lpfnHook As Long lpTemplateName As String End Type Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long Sub fdas() Dim sOpenFileName As OPENFILENAME sOpenFileName.lStructSize = Len(sOpenFileName) GetOpenFileName sOpenFileName End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセル2000です。私の場合はコモンダイアログの表示が出来ました。 ただ僅かな環境の差で出来ないかも知れないので、成功を祈ります。 (1)メニューバーの余白で右クリック、ツールバーの一覧の中のコントロールツールボックスをクリックして「V」にする。 (2)ワークシートの画面で、ツール―マクロ-VBEをクリックして VBE画面にする。 (3)「槌とスパナ」のアイコンをクリックする。(「コントロールの選択」)のリストに出てくるコントロールの一覧の中から「Microsoft Common Dialog Control,version6.0」をクリック。 (4)ワークシート画面になり、その上にマウスポインタを持ってくると「+」型になるので、コントロールを貼り付ける要領で、右下方向にドラッグする。コモンダイアログのアイコンが出る。 (5)標準モジュールModule1に Sub test01() Worksheets("sheet1").CommonDialog1.ShowOpen End Sub を入れる。 (6)実行をクリック(またはF5)。 (7)ワークシートにファイルを「開く」のダイアログが現われる。 (8)あと、下記が使える。 Worksheets("sheet1").CommonDialog1.Filter=".xls" Worksheets("sheet1").CommonDialog1.Initdir="a:\" (9)選択ファイル名の取得 fn=Worksheets("sheet1").CommonDialog1.Filename で取得できる。
お礼
無事利用できることを確認しました。 確かに環境次第では使えない事もあるかも知れませんが、こういうものの利用で大分開発作業は楽になりますよね。 大変参考になりました。
少なくともExcelであればわざわざActiveXコントロールやらAPIを使わなくても「Application.GetOpenFilename」で「ファイルを開く」ダイアログを使えますよ。 ファイルの種類も自由自在です。
お礼
こんなに簡単にファイルパスが取得出来るんですね。 ありがとうございました!
お礼
早速の回答ありがとうございます! ComCtrl32.OCXでは間違いだらけなところを丁寧に回答頂きましたので、早速やってみました。 これです、これなんです。 comdlg32.dllならばExcel97でも利用できそうですありがとうございました。