ファイルを開くダイアログ
|
|
マクロ / VBA |
■ マクロで別ファイルを開く
マクロを作っていて別ファイルを開きたい時ってよくあると思います。別ファイルの○○のデータを使用したい。ファイルを開く時どうしてますか?
絶対パス?(C:\Document….)って指定してません?そうすると指定ファイルの場所を変えれませんし、ファイル名すら変える事が出来なくなってしまいます。無い場合エラーとなりますし。
そんな時にはファイルを開くダイアログを使用。
エクセルマクロではこれを簡単に使う事が出来ます。
■ マクロで別ファイルを開く
まず開く用のボタンを作ります。コマンドボタン1。これをダブルクリックするとVBAの画面が開き
Private Sub CommandButton1_Click() ~ End Sub が表示されます。
その中に下記を記入します。
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しか選択出来ないようにしています。
内容の解説については黄色文字で書かれている部分を読んでください。
関連記事
- 前の記事
- エクセルで日付データの認識は
- 次の記事
- 自分で関数を作ってみる