ファイルを開くダイアログ

マクロ / VBA

 マクロで別ファイルを開く


マクロを作っていて別ファイルを開きたい時ってよくあると思います。別ファイルの○○のデータを使用したい。ファイルを開く時どうしてますか?
絶対パス?(C:\Document….)って指定してません?そうすると指定ファイルの場所を変えれませんし、ファイル名すら変える事が出来なくなってしまいます。無い場合エラーとなりますし。
そんな時にはファイルを開くダイアログを使用。
エクセルマクロではこれを簡単に使う事が出来ます。
16-1.jpg


 マクロで別ファイルを開く


まず開く用のボタンを作ります。コマンドボタン1。これをダブルクリックするとVBAの画面が開き
Private Sub CommandButton1_Click() ~ End Sub が表示されます。
16-2.jpg
その中に下記を記入します。

Private Sub CommandButton1_Click()
Dim Fkouzou As OPENFILENAME
Dim lngRet As Long, NULLPos As Long
Dim FileName As String
Dim wb2 As Workbook
With Fkouzou                             'GetOpenFileName関数に渡す構造体を設定
.lStructSize = Len(Fkouzou)
.lpstrInitialDir = ThisWorkbook.Path    '(最初に表示するディレクトリ)
'(フィルターでファイル種類を絞る)
.lpstrFilter = "Excel(*.xls)" & vbNullChar & "*.xls" _
& vbNullChar & "Text(*.txt)" & vbNullChar & "*.txt"
.nMaxFile = 256                        '(ファイル名の最大長(パス含む))
.lpstrFile = String(256, vbNullChar)   '(ファイル名を格納する文字列
' NULLで埋めておく)
End With
lngRet = GetOpenFileName(Fkouzou)   'ファイル選択ダイアログを表示。
'(「開く」を押すと.lpstrFileにファイル名が格納される。
'  実際に「開かれる」わけではない!)
NULLPos = InStr(Fkouzou.lpstrFile, vbNullChar)  'ファイル名の終り(NULLの位置)を調べる
FileName = Left(Fkouzou.lpstrFile, NULLPos - 1) 'ファイル名の有効部分を取り出す
If FileName <> "" Then  'キャンセルを押された場合は実行しない。
Set wb2 = Workbooks.Open(FileName)  '指定されたファイルを開く
End If
End Sub

それとVBAにて標準モジュールを追加し、下記を記入します。

'ファイルを開くダイアログを表示するAPI
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" _
(pOpenfilename As OPENFILENAME) As Long
'APIに渡す構造体を定義
Public 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                 'lpstrFileのバッファサイズ
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

この例ではフィルターを使い.xls .txtしか選択出来ないようにしています。
内容の解説については黄色文字で書かれている部分を読んでください。

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  • ▼お小遣い稼ぎしませんか?▼ 日々の生活にhappyをプラスする|ハピタス

    クレジットカード・FX口座を作るだけで簡単に3万円GETです。一切支出はありません。

置換 HLOOKUP コピペ 日付 ワイルドカード SUMIF 印刷 図形 TODAY ユーザー定義関数 目標 XLSTART 作業効率UP テンプレート VLOOKUP グラフ 検索 SUMIFS NA() SUM MATCH COUNTIF 条件付き書式 INDEX 変換 フロー図 無料 バーコード COLUMN DATE
  • 関西在住の30代サラリーマン。事務職で毎日Excelと戯れています。
    システム導入なんて資金が無い!Excelでなんとかやりたい零細中小の社長さん・事務員さんの力になればと思います。
    詳しいプロフィール


PAGE TOP ↑