3

そのため、XLTMファイルを使用しており、ユーザーにXLSMとして保存することを確認してもらいたいと思います。[保存]をクリックすると正常に機能しますが、[名前を付けて保存]をクリックすると、ファイルは「*.xlsm.xlsm」として保存されます。ファイル名を「filename.xlsm.xlsm」ではなく「filename.xlsm」として保持しながら、ユーザーがXLSMとして保存することを確認する方法に少し迷っています。

    'Action makes sure the user saves as XLSM file type.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    Dim FileNameVal As String 
    If SaveAsUI Then 
        FileNameVal = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm") 
        Cancel = True 
        If FileNameVal = "False" Then 'User pressed cancel
            Exit Sub 
        End If 

        Application.EnableEvents = False 
        ThisWorkbook.SaveAs Filename:=FileNameVal & ".xlsm", FileFormat:=ThisWorkbook.FileFormat 
        Application.EnableEvents = True 
    End If 
End Sub 

問題は「.xlsm」を次のように記述している可能性があると思いました。

ThisWorkbook.SaveAs Filename:=FileNameVal & ".xlsm", FileFormat:=ThisWorkbook.FileFormat 

ただし、そこに「.xlsm」と書かれていないと、代わりにファイルが不正なファイルサフィックスとして保存されていることがわかります。(たとえば、XLTMファイルの名前がTemplate(File001).xltmで、ユーザーが新しいテンプレートファイルを開くと、Template(File001)1として保存されます(「1)1」がファイルタイプであると考えられます)。

それは私のコードの構造かもしれないので、それをどのように修正するかについての指示が必要です。

4

1 に答える 1

6

テンプレートが実際に最初に保存される前にファイルに「Template(1)1」という名前を付けるため、問題が存在したように見えました。これにより、Excelがファイルを保存する方法が変わるため、この最初の保存とそれ以降の保存(すでにファイル拡張子が含まれている)を対比する最も簡単な方法は、if-thenステートメントを使用して拡張子が既に存在するかどうかを判断することでした。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim FileNameVal As String
If SaveAsUI Then
    FileNameVal = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
    Cancel = True
    If FileNameVal = CStr(False) Then 'User pressed cancel
        Exit Sub
    End If
    Application.EnableEvents = False
        If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then
            ThisWorkbook.SaveAs Filename:=FileNameVal & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
        Else
            ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled
        End If
    Application.EnableEvents = True
End If
End Sub
于 2012-08-30T14:27:49.890 に答える