プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
ExcelVBA、「名前を付けて保存」ダイアログボックスを表示する
結論から言えば「GetSaveAsFilename()」を使えばOKです。

一番単純なのは例えばこんな感じφ(--)

Sub ボタン1_Click()
Dim fileName As Variant

    '保存先指定のダイアログを開く
    fileName = _
        Application.GetSaveAsFilename()

    If fileName <> False Then
        MsgBox fileName
    End If
End Sub

これだけだと味気ないので、ダイアログのタイトルを指定してみましょうかφ(--)

Sub ボタン1_Click()
Dim fileName As Variant

    '保存先指定のダイアログを開く
    fileName = _
        Application.GetSaveAsFilename( _
            Title:="保存先を選べ!" _
         )

    If fileName <> False Then
        MsgBox fileName
    End If
End Sub

ついでなんで初期のファイル名も指定してみましょうφ(--)

Sub ボタン1_Click()
Dim fileName As Variant

    '保存先指定のダイアログを開く
    fileName = _
        Application.GetSaveAsFilename( _
            Title:="保存先を選べ!" _
         , InitialFileName:="hoge" _
         )

    If fileName <> False Then
        MsgBox fileName
    End If
End Sub

おまけに保存するときに選べる「ファイルの種類」も絞ってみましょうφ(--)

Sub ボタン1_Click()
Dim fileName As Variant

    '保存先指定のダイアログを開く
    fileName = _
        Application.GetSaveAsFilename( _
            Title:="保存先を選べ!" _
         , InitialFileName:="hoge" _
         , FileFilter:="Excelの97-2003形式だよ,*.xls" & _
                         ",CSV形式だよ,*.csv" & _
                         ",テキストファイルだよ,*.txt" & _
                         ",なんでもOKだよ,*.*"
_
         )

    If fileName <> False Then
        MsgBox fileName
    End If
End Sub

ここは解説が必要ですかね。
「ファイルの種類」を指定する「FileFilter」は

表示する文字列,ファイルのパターン(,表示する文字列,ファイルのパターン,……)

の順にカンマ区切りでズラズラと書けます。
サンプルでは見やすくするために適時改行していますが、
1行で

, FileFilter:="Excelの97-2003形式だよ,*.xls,CSV形式だよ,*.csv,テキストファイルだよ,*.txt,なんでもOKだよ,*.*" _

のように書くことも可能です。

「表示する文字列」はダイアログの「ファイルの種類」に表示される文言です。
Excelを保存しようとしたときの「Excel 97-2003 ブック(.xls)」とかなっている部分ですね。
この文言を好きに指定できます。

「ファイルのパターン」は保存時の拡張子だと思っても構いません。
「*.xls」であればExcel、「*.csv」であればCSVで保存されます。

では何故「保存時の拡張子」ではなくわざわざ「ファイルのパターン」と書いたのか?

「名前を付けて保存」のダイアログでは選択中のフォルダの中身が表示されますが、
ここで表示されるファイルは「ファイルの種類」で選択されているファイルのみです。
「ファイルの種類」で選択されているのが「*.xls」であればExcelファイル、
「*.csv」であればCSVファイルのみが表示されます。

そしてパターンで指定するのは普通は「*.xls」とか「*.csv」とかです。

でもですね(--)b

「aaa.*」とかもその気になれば指定できるのです。

, FileFilter:="ほげほげ,aaa.*" _

とか書けちゃいます。
そうすると「名前を付けて保存」のダイアログでは「aaa.txt」「aaa.csv」のように
ファイル名が「aaa」のファイルのみが表示されるようになります。
まぁ使いどころは無いと思いますけどね。

読んで字の如く、あくまで「フィルター」なので拡張子以外でも絞り込めるのですよ。
普通は拡張子で絞り込むので、それ以外で絞ると違和感がありますけどね。

そんな感じ(--)ノ

あっ、そうそう。
任意の「ファイルの種類」を選択状態にすることも可能です。

例えばこんなコードを書くとφ(--)

Sub ボタン1_Click()
Dim fileName As Variant

    '保存先指定のダイアログを開く
    fileName = _
        Application.GetSaveAsFilename( _
            Title:="保存先を選べ!" _
         , InitialFileName:="hoge" _
         , FileFilter:="Excelの97-2003形式だよ,*.xls" & _
                         ",CSV形式だよ,*.csv" & _
                         ",テキストファイルだよ,*.txt" & _
                         ",なんでもOKだよ,*.*" _
         , FilterIndex:=2 _
         )

    If fileName <> False Then
        MsgBox fileName
    End If
End Sub

「CSV形式だよ(*.csv)」が初期状態で選択された状態になりますよ。

今度こそ、そんな感じ(--)ノ
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:ExcelVBA  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事