読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

VBAでファイルのサフィックス(接尾辞)をチェックして、ファイルの保存形式を指定する方法

VBA
<スポンサーリンク>

VBAでサフィックスをチェックして、ファイルの保存形式を指定する

1.ファイル名を「.」で区切って、positionを取得する。

pos = InStrRev(fileName, ".")

2.そのpositionから1つ後ろから、文字列を抜き出す。
指定した位置から抜き出す関数は、Mid(String, startPosition)

If LCase(Mid(fileName, pos + 1)) = "txt" Then
    fileFilter = "テキストファイル(*.txt), *.txt"
End If

こんな感じになる。

3.ファイルを保存するダイアログを表示する

Application.GetSaveAsFilename(InitialFileName:=fileName, fileFilter:=fileFilter)

これらを全部合わせると、以下のようになる。

Sub FileRegist()
    Const c_fileName = "hoge.txt"
    Dim strFilePath As String
    
    strFilePath = saveAsFileName(c_fileName)
    
    'キャンセルされた場合はstrFilePathは「False」になる。
    If StrConv(strFilePath, vbUpperCase) = "FALSE" Then Exit Sub
    
    '同じファイルがある場合は上書きするか確認する
    If Dir(strFilePath) <> "" Then
        If MsgBox("上書きしますか?", vbOKCancel) = vbCancel Then
            Exit Sub
        End If
    End If
End Sub

Function saveAsFileName(fileName As String) As String
    Dim fileFilter As String
    Dim pos As Integer
    pos = InStrRev(fileName, ".")
    
    If pos > 0 Then
        If LCase(Mid(fileName, pos + 1)) = "txt" Then
            fileFilter = "テキストファイル(*.txt), *.txt"
        End If
        If LCase(Mid(fileName, pos + 1)) = "sql" Then
            fileFilter = "SQLファイル(*.sql), *.sql"
        End If
    End If
    
    '選択したフォルダ + ファイル名を返り値として設定する
    saveAsFileName = Application.GetSaveAsFilename(InitialFileName:=fileName, fileFilter:=fileFilter)
    
End Function

今回使った関数

引数で指定した文字列を変換する。
String(文字列)をConversion(変換)するからStrConv。

strConv(String, conversion)

conversionに指定する変換ケースは以下のサイトを参照。
http://officetanaka.net/excel/vba/function/strconv.htm