GetOpenFileNameは、ファイル選択ダイアログボックスを開くことができるWindows API です。
Windows API GetOpenFileNameとは
■ GetOpenFileNameの宣言
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA"
(pOpenfilename As OPENFILENAME) As Long
■ GetOpenFileNameの構文
長整数型変数 = GetOpenFileName( OPENFILENAME構造体 )
GetOpenFileName使用例画面
入力したVBAコードです。
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Declare Function GetActiveWindow Lib "user32" () As Long
Const OFN_PATHMUSTEXIST = &H800
Const OFN_FILEMUSTEXIST = &H1000
Const OFN_HIDEREADONLY = &H4
Const BUFF_SIZE = 512
Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter 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
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Sub ファイル選択ダイアログ()
Dim lLen As Long
Dim sFilter As String
Dim sRetFile As String
Dim tOpen As OPENFILENAME
sFilter = "Excel ファイル (*.xls; *.xlsx; *.xlsm),*.xls; *.xlsx; *.xlsm"
tOpen.lStructSize = Len(tOpen)
tOpen.hwndOwner = GetActiveWindow()
tOpen.hInstance = 0
tOpen.lpstrFilter = sFilter
tOpen.nFilterIndex = 1
tOpen.flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY
tOpen.lpstrTitle = "ファイルを選択してください"
tOpen.nMaxFile = BUFF_SIZE
tOpen.lpstrFileTitle = String(BUFF_SIZE, vbNullChar)
tOpen.nMaxFileTitle = BUFF_SIZE
tOpen.lpstrFile = String(BUFF_SIZE, vbNullChar)
tOpen.lpstrDefExt = vbNullChar
If GetOpenFileName(tOpen) <> False Then
lLen = InStr(tOpen.lpstrFile, vbNullChar) - 1
sRetFile = Left(tOpen.lpstrFile, lLen)
Range("B3") = sRetFile
Else
Range("B3") = "ファイルは選択されませんでした。"
End If
End Sub
VBAプログラムの説明
GetOpenFileName Windows APIの宣言
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
GetActiveWindow Windows APIの宣言
Declare Function GetActiveWindow Lib "user32" () As Long
有効なパス及びファイル名でなければ入力を許さない
Const OFN_PATHMUSTEXIST = &H800
既存のファイル名しか入力を許さない
Const OFN_FILEMUSTEXIST = &H1000
「読み取り専用」チェックボックスを隠す
Const OFN_HIDEREADONLY = &H4
ファイル名保存用のエリア
Const BUFF_SIZE = 512
OPENFILENAME構造体
Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter 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
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Subプロシージャの宣言
Sub ファイル選択ダイアログ()
長整数型の変数を宣言
Dim lLen As Long
文字型の変数を宣言
Dim sFilter As String
文字型の変数を宣言
Dim sRetFile As String
OPENFILENAME構造体を宣言
Dim tOpen As OPENFILENAME
表示するファイルのフィルター
sFilter = "Excel ファイル (*.xls; *.xlsx; *.xlsm),*.xls; *.xlsx; *.xlsm"
OPENFILENAME構造体のサイズ
tOpen.lStructSize = Len(tOpen)
ダイアログボックスの親ウィンドウハンドル
tOpen.hwndOwner = GetActiveWindow()
インスタンスハンドル
tOpen.hInstance = 0
ファイルの種類
tOpen.lpstrFilter = sFilter
フィルターのインデックス
tOpen.nFilterIndex = 1
フラグ指定
tOpen.flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY
ダイアログボックスのタイトル
tOpen.lpstrTitle = "ファイルを選択してください"
lpstrFileの変数サイズ
tOpen.nMaxFile = BUFF_SIZE
選択ファイル名の保存先
tOpen.lpstrFileTitle = String(BUFF_SIZE, vbNullChar)
pstrFileTitleのサイズ
tOpen.nMaxFileTitle = BUFF_SIZE
選択ファイル名の保存先(フルパス)
tOpen.lpstrFile = String(BUFF_SIZE, vbNullChar)
デフォルトのファイルの種類
tOpen.lpstrDefExt = vbNullChar
ダイアログボックスの戻り値がFalseでなければ(キャンセルでなければ)
If GetOpenFileName(tOpen) <> False Then
選択ファイルの長さを取得
lLen = InStr(tOpen.lpstrFile, vbNullChar) - 1
選択されたファイル名を取得
sRetFile = Left(tOpen.lpstrFile, lLen)
B3セルにファイル名を入力
Range("B3") = sRetFile
真でなければ
Else
B3セルにメッセージを入力
Range("B3") = "ファイルは選択されませんでした。"
IF文の終了
End If
プロシージャの終了
End Sub
ファイル選択ダイアログの実行画面
マクロ一覧から「ファイル選択ダイアログ」マクロを実行します。
実行しファイル選択ダイアログが開いている画面です。
上のファイル選択ダイアログでファイルを選択し「開く」をクリックした場合のシートです。キャンセルをクリックした場合は、「ファイルは選択されませんでした。」と表示されます。
Excelマクロのサンプルファイル:
フリーダウンロード
Copyright (C) excel.usefulhp.com All rights reserved.