【问题标题】:Getting correct default save name and save directory with spaces in VBA在 VBA 中获取正确的默认保存名称和带有空格的保存目录
【发布时间】:2019-04-02 06:53:53
【问题描述】:

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

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

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

默认文件名(在本例中)为: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 脚本中使用它?

【问题讨论】:

  • 如果包含文件名,GetSaveAsFilename 显然不喜欢双引号:"M:\Commercie\Marktdata\IRi\Segment ontwikkeling\" &amp; workbookname 应该可以工作。
  • correctfilename = workbookdirectory & ActiveWorkbook.Name 将是最干净的。
  • 是的,但因为它没有按我的意愿工作,所以我改变了它。

标签: excel vba filenames savefiledialog


【解决方案1】:

这似乎有点复杂 - 你没有尝试过更简单的:

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

【讨论】:

  • 因为我必须为正确的目录位置使用引号,所以我认为我还需要它们才能正确使用文件名。原来事实并非如此。
  • 老问题!并随时将我的答案标记为正确答案;)
【解决方案2】:

我不知道我是否理解正确,但你可以试试这样:

Dim actWb As Workbook
Dim newName As String

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 2023-02-12
    相关资源
    最近更新 更多