アプリ版:「スタンプのみでお礼する」機能のリリースについて

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)

A 回答 (3件)

使い物になるかどうかは別にして、一案。



'------------------------------------------
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 」が表示されます。
また、表示されたファイルを選択しても、ファイル名ボックスは変化しません。
が、当然「開く」ボタンで、選択したファイルは開きます。

以上参考までに。
 
    • good
    • 1
この回答へのお礼

試してみましたら、ファイル名の指定ができました。
こちらを使うと、ファイルの種類は指定ができないようですが、
できることがわかって、助かりました。
これから、思考錯誤してみます。
ありがとうございました。

お礼日時:2008/03/31 17:10

こんにちは、#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)

では。
    • good
    • 0

こんにちは。



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

では。

この回答への補足

さっそくの回答ありがとうございます。
ExcelVBAは初心者で、APIがよくわかりません。
これは、どうやって使うものなのでしょうか?

補足日時:2008/03/25 15:04
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
APIは理解できました。
さっそくやってみましたが、私が絞り込みたいファイル名は、英数字で、0を含まない為か、vbNullCharでは、エラーが帰ってきました。
文字列に使えるコマンドはありますか?

お礼日時:2008/03/25 16:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています