Articles

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

この記事をdel.icio.usに登録する この記事をはてなブックマークに登録する この記事をGoogleブックマークに登録する この記事をYahoo!ブックマークに登録する この記事をdiggに登録する この記事をlivedoor clipに登録する この記事をNewsGattor Onlineに登録する

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


マクロを作っていて別ファイルを開きたい時ってよくあると思います。別ファイルの○○のデータを使用したい。ファイルを開く時どうしてますか?
絶対パス?(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しか選択出来ないようにしています。
内容の解説については黄色文字で書かれている部分を読んでください。
関連記事




この記事をdel.icio.usに登録する この記事をはてなブックマークに登録する この記事をGoogleブックマークに登録する この記事をYahoo!ブックマークに登録する この記事をdiggに登録する この記事をlivedoor clipに登録する この記事をNewsGattor Onlineに登録する

トラックバック一覧

コメント一覧

コメント投稿フォーム
Name
Subject
Mail
URL
Comment

Password
Secret
管理者にだけ表示を許可する

Navigations, etc.

Navigations

ブログ記事を検索

SPONSORS

人気記事ランキング

ブログパーツ

メールフォーム

名前:
メール:
件名:
本文:

Tweet

最新記事