ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:Hawaii218 EXCELでダイアログボックスを開く時表示ファイル名を指定したい
困り度:
  • すぐに回答を!
Openfilenameでファイルを選択するような機能をEXCELのVBAで作っています。
表示するファイルの種類までは、指定の仕方がわかるのですが、
特定のファイル名のものを表示したい時のVBAの記述方法を教えてください。
下記は、作っているプログラムの抜粋なのですが、
これだと、全部のcvsファイルが表示されます。

このCSVファイルで、ファイル名が、*XXX.csvのものをダイアログボックスに表示したいです。

Dim File_list As Variant
Dim Book As Workbook
Dim j As Integer

File_list = Application.getopenfilename(".csvfile(*csv),*.csv")
If File_list = False Then Exit Sub

Application.EnableEvents = False
Set Book = Workbooks.Open(File_list)
質問投稿日時:08/03/25 14:18
質問番号:3893296
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:onlyrom 使い物になるかどうかは別にして、一案。

'------------------------------------------
Sub test()
  Dim File_list As Variant
  Dim Book As Workbook

  File_list = Application.Dialogs(xlDialogOpen).Show("*XXX.csv")
  If File_list = False Then Exit Sub

  Set Book = ActiveWorkbook

End Sub
'------------------------------------------
ブック名 : Book.Name
ブック名を除いたパス : Book.Path
フルパス : Book.Path & "\" & Book.Name

●フォルダーともに指定してもOKです。
Application.Dialogs(xlDialogOpen).Show("C:\FFF\*XXX.csv")

それから、試してみれば分かりますが今回の場合にこの組み込みダイアログを使うと、
ファイル名のテキストボックスには、「 *XXX.xls 」が表示されます。
また、表示されたファイルを選択しても、ファイル名ボックスは変化しません。
が、当然「開く」ボタンで、選択したファイルは開きます。

以上参考までに。
 
種類:回答
どんな人:一般人
自信:自信あり
回答日時:08/03/25 22:47
回答番号:No.3
この回答へのお礼試してみましたら、ファイル名の指定ができました。
こちらを使うと、ファイルの種類は指定ができないようですが、
できることがわかって、助かりました。
これから、思考錯誤してみます。
ありがとうございました。

回答

 

回答者:akina_line こんにちは、#1です。

 >これは、どうやって使うものなのでしょうか?
 サンプルを示します。

-------General-------Declarations--------------------
'ファイルを開くダイアログを表示する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
-----------------------------------------------------
Sub PictureInsert()
'
' フォルダを指定する
Dim res As Long
Dim Fname As OPENFILENAME

With Fname 'GetOpenFileName関数に渡す構造体を設定
.lStructSize = Len(Fname)
.lpstrInitialDir = ThisWorkbook.Path '(最初に表示するディレクトリ)
'(フィルターでファイル種類を絞る)
.lpstrFilter = "Bmp(*.bmp)" & vbNullChar & "*.bmp" _
& vbNullChar & "Tiff(*.tif)" & vbNullChar & "*.tif" _
& vbNullChar & "Gif(*.gif)" & vbNullChar & "*.gif"
.nMaxFile = 256 '(ファイル名の最大長(パス含む))
.lpstrFile = String(256, vbNullChar) '(ファイル名を格納する文字列
' NULLで埋めておく)
End With
res = GetOpenFileName(Fname)

では。
種類:回答
どんな人:経験者
自信:自信あり
回答日時:08/03/25 15:55
回答番号:No.2
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:akina_line こんにちは。

 私は少しやり方が違うのですが、GetOpenFileNameというAPIを利用しています。その場合、ファイル名のフィルターに
  "Tiff(*001.tif)" & vbNullChar & "*001.tif"
 と記述することで複数のtifファイルから絞り込むことが可能でした。

では。
種類:回答
どんな人:経験者
自信:自信あり
回答日時:08/03/25 14:45
回答番号:No.1
この回答への補足さっそくの回答ありがとうございます。
ExcelVBAは初心者で、APIがよくわかりません。
これは、どうやって使うものなのでしょうか?
この回答へのお礼回答ありがとうございます。
APIは理解できました。
さっそくやってみましたが、私が絞り込みたいファイル名は、英数字で、0を含まない為か、vbNullCharでは、エラーが帰ってきました。
文字列に使えるコマンドはありますか?
 
最新から表示回答順に表示良回答のみ表示