在 VBA 中获取正确的默认保存名称和带空格的保存目录

Getting correct default save name and save directory with spaces in VBA

我有很多 excel 个名称各不相同的模板。其中之一叫做 griep-weerstand v4.xlsb。但我的问题是关于所有模板。

我想将文件名整合到一个设置默认保存目录和默认保存名称的保存脚本中。两者的名称中都有空格。添加正确数量的引号后,默认保存目录设置正确,但是,我一直在努力将工作簿名称添加到脚本中。我尝试了几件事,到目前为止,其中 none 已经奏效。

默认保存目录为:M:\Commercie\Marktdata\IRi\Segmentontwikkeling

默认文件名(在此示例中)是:griep-weerstand v4.xlsb

以下是我最后尝试的结果:

Sub save_workbook_name()
Dim workbook_Name As Variant
Dim location As String
Dim workbookname As String
Dim workbookdirectory As String
Dim correctfilename As Variant

workbookname = ActiveWorkbook.Name
workbookdirectory = "M:\Commercie\Marktdata\IRi\Segment ontwikkeling\"

correctfilename = """M:\Commercie\Marktdata\IRi\Segment ontwikkeling\" & workbookname & """"
workbook_Name = Application.GetSaveAsFilename(fileFilter:="Excel binary sheet (*.xlsb), *.xlsb", initialfilename:=correctfilename)

If workbook_Name <> False Then

    ActiveWorkbook.SaveAs Filename:=workbook_Name, FileFormat:=50

End If
End Sub

我认为以字符串形式读取工作簿名称并将正确数量的引号添加到组合 initialfilename 中就可以了。

当我添加显示合并结果的消息框时,我得到了正确的路径和名称:

但是当在 getsaveasfilename 行中使用它时,我一直在正确的目录中保存对话框屏幕但没有文件名。

如何才能使目录和文件名的组合与 getsaveasfilename 一起使用?或者我应该只在 activeworkbook.saveas 脚本中使用它?

不知道我理解的对不对,你可以这样试试:

Dim actWb As Workbook
Dim newName As String

Set actWb = ActiveWorkbook
newName = "M:\Commercie\Marktdata\IRi\Segment ontwikkeling\" & actWb.Name
actWb.SaveAs newName

好像有点复杂-你没试过更简单的吗:

workbook_Name = Application.GetSaveAsFilename(fileFilter:="Excel binary sheet (*.xlsb), 
*.xlsb", initialfilename:=workbookdirectory & ActiveWorkbook.Name)

完整代码基于您在此处的示例:.. 这对我来说完全符合您的要求(使用包含空格的文件名进行测试)

Sub save_workbook_name()
Dim workbook_Name As Variant
Dim location As String
Dim workbookname As String
Dim workbookdirectory As String
Dim correctfilename As Variant

'workbookname = ActiveWorkbook.Name
workbookdirectory = "C:\Users\myusername\folder with spaces too\"

'correctfilename = """M:\Commercie\Marktdata\IRi\Segment ontwikkeling\" & workbookname & """"
workbook_Name = Application.GetSaveAsFilename(fileFilter:="Excel binary sheet (*.xlsb), *.xlsb", InitialFileName:=workbookdirectory & ActiveWorkbook.Name)

If workbook_Name <> False Then

    ActiveWorkbook.SaveAs Filename:=workbook_Name, FileFormat:=50

End If
End Sub