保存工作簿的 vba 例程没有预期的结果

Posted

技术标签:

【中文标题】保存工作簿的 vba 例程没有预期的结果【英文标题】:vba routine to save workbook does not have desired result 【发布时间】:2018-09-07 12:12:43 【问题描述】:

我有一个工作簿,每 4 周更新一次新数据。更新时,它必须以特定名称和特定选项保存。我已经有一个脚本可以为我将工作簿保存到一个新文件中,所以我使用了该脚本并对其进行了修改。

Sub save_workbook_name()
Dim workbook_Name As Variant
Dim location As String

location = "N:\IRi\"
workbook_Name = Application.GetSaveAsFilename

If workbook_Name <> False Then

    ActiveWorkbook.SaveAs Filename:=Workbook.Name, WriteResPassword:="TM", FileFormat:=50

End If
End Sub

当我使用此代码并按下按钮时,会出现一个弹出屏幕,询问我要如何保存文件:

但是没有设置文件格式。我在打开保存的文件时注意到设置了打开文件的密码。我自己知道在保存文件时必须添加 .xslb 扩展名,但我不确定是否有任何同事也使用此文件。

当我输入文件名和扩展名时,出现错误:

错误 424:需要对象

我希望保存的选项:

文件类型必须设置为 .xlsb 为防止已保存的副本被更新,我希望保存时使用密码保护打开

如何使例程已经添加 .xlsb 扩展名,以便只输入文件名?

编辑: 根据 Marcucciboy2 的回答,我将脚本更改为:

Sub save_workbook_name()
Dim workbook_Name As Variant
Dim location As String

workbook_Name = Application.GetSaveAsFilename(fileFilter:="Excel binary sheet (*.xlsb), *.xlsb", InitialFileName:="N:\IRi\")

If workbook_Name <> False Then

    ActiveWorkbook.SaveAs WriteResPassword:="TM", FileFormat:=50

End If
End Sub

现在它非常适合保存。

关于此脚本的其他问题和输入的名称发布在一个新问题中: vba script to save workbook overwrites entered filename

【问题讨论】:

我认为问题可能是您没有过滤从GetSaveAsFilename 收到的文件名,所以试试Application.GetSaveAsFilename(fileFilter:="Excel binary sheet (*.xlsb), *.xlsb") 谢谢!正是我所需要的。 酷!我会弹出它作为答案然后保持干净 【参考方案1】:

我认为问题可能是您没有过滤从GetSaveAsFilename 收到的文件名,因此请尝试:

Application.GetSaveAsFilename(fileFilter:="Excel binary sheet (*.xlsb), *.xlsb")

【讨论】:

以上是关于保存工作簿的 vba 例程没有预期的结果的主要内容,如果未能解决你的问题,请参考以下文章

VBA Excel 备份:通过 VBA 以新名称保存当前工作簿的副本,保留 VBA 脚本,无提示

VBA密码保护Excel工作簿而不保存

[VBA]汇总多个工作簿的指定工作表到同一个工作簿的指定工作表中

Excel-VBA - 列出任何给定工作簿的所有用户窗体的控件

vba:以 xlsm 文件格式保存而不更改活动工作簿

让用户选择保存 Excel 工作簿的位置