在对话框窗口中建议文件名/位置"Save As"(具有不同的文件类型)



我想填写"文件名";而是一根自己的绳子。我从一个模板文件开始,我点击";保存";,并且我得到";将文件另存为";对话框窗口中,在这个窗口中,我想填写一个自定义文件名。我不想要一个具体的";保存按钮";在我的Excel表上,所以我想我必须使用";保存之前的私有子工作簿";事件这是我在atm上的代码:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI Then
Dim suggestedFileName As String
suggestedFileName = ThisWorkbook.Worksheets("Sheet1").Range("A1")
With Application.FileDialog(msoFileDialogSaveAs)
Application.EnableEvents = False
.InitialFileName = suggestedFileName
.FilterIndex = 2
If .show Then
ActiveWorkbook.SaveAs Filename:=.SelectedItems(1), FileFormat:=xlOpenXMLWorkbookMacroEnabled
End If
Application.EnableEvents = True
End With
'Cancel true is necessary to avoid having 2 "save as" dialogue windows
Cancel = True
End If
End Sub

当我保存文件时,没有发生任何事情(例外(,当我保存该文件时,我得到了包含我想要的file_name主张的对话框窗口。但上面的代码似乎是用固定扩展名"保存的;xlsm";,它不是从"另存为类型"底部的组合框中提取的;另存为";窗这是一个主要问题,因为除了XLSM之外;另存为";函数将图纸导出为PDF文件。

我现在想要的是:

  • 如何使用从组合框中选择的文件类型而不是";硬编码">
  • 如何设置文件位置;如何/在哪里可以将其指定到SaveAs函数中

我以为这会很容易,但令人惊讶的是,它不是。。。

您可以使用以下函数,根据需要进行修改并将其添加到您的代码中

Function FileFormatValue(fName As String) As Long
Select Case LCase(Right(fName, Len(fName) - InStrRev(fName, ".", , 1)))
Case "xls": FileFormatValue = 56
Case "xlsx": FileFormatValue = 51
Case "xlsm": FileFormatValue = 52
Case "xlsb": FileFormatValue = 50
' add further cases as needed
Case Else: FileFormatValue = 0
End Select

End Function

你的代码看起来像

If .show Then
ActiveWorkbook.SaveAs Filename:=.SelectedItems(1), FileFormat:=FileFormatValue(.SelectedItems(1))
End If

最新更新