質問 |
||
| 質問者: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では、エラーが帰ってきました。 文字列に使えるコマンドはありますか? |