VBA按钮触发另存为对话框后双位置保存报错‘参数不可选’求助
解决VBA按钮点击出现"Argument not optional"错误的问题
嗨,我来帮你搞定这个问题!你遇到的报错主要是宏的定义和触发方式不匹配,还有命名冲突的问题,咱们一步步来修正:
错误原因拆解
- 命名撞车了:你把宏命名成了
Save,这和Excel自带的Save方法重名了,很容易让程序搞混。 - 多余的参数:这个宏是按钮点击触发的,根本不需要
Cancel As Boolean这个参数——这个参数是给Workbook_BeforeClose这类事件宏用的,按钮宏加它就会直接触发"参数不可选"的错误。
修正后的完整代码
Private Sub SaveToBothLocations() ' 获取不带扩展名的工作簿名称 Dim NameOfWorkbook As String NameOfWorkbook = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1)) Dim varResult As Variant ' 弹出另存为对话框,指定Excel文件类型更友好 varResult = Application.GetSaveAsFilename(FileFilter:="Excel Workbooks (*.xlsx), *.xlsx") ' 判断用户是否取消了对话框 If varResult <> False Then ' 先保存到用户选择的位置 ThisWorkbook.SaveAs Filename:=varResult Cells(2, 1) = varResult ' 设置指定的PDF保存路径,记得加.pdf扩展名 Dim saveLocation As String saveLocation = "S:\Office information\Returns\Return Notes\" & NameOfWorkbook & ".pdf" ' 导出当前工作表为PDF到指定路径 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=saveLocation ' 提示保存完成 Dim MyMsg As String MyMsg = NameOfWorkbook & " 已成功保存到你选择的位置,同时导出PDF到Return Notes文件夹!" MsgBox MyMsg End If End Sub
额外优化说明
- 给宏改了个独特的名字
SaveToBothLocations,彻底避免和内置方法冲突。 - 补上了实际保存用户选择位置的操作(原代码只把路径写到单元格,没真正保存文件)。
- 给PDF路径加上了
.pdf后缀,避免生成的文件没有扩展名无法正常打开。 - 在另存为对话框里指定了文件类型,引导用户选择正确的Excel格式。
最后操作步骤
- 打开VBA编辑器,把原来的
Save宏替换成上面的代码。 - 回到Excel界面,右键点击你的按钮→选择"指定宏"→选中
SaveToBothLocations确定。 - 测试点击按钮,就能正常弹出另存为对话框,完成后会同时保存到用户选的位置和你指定的PDF路径啦!
内容的提问来源于stack exchange,提问作者itz_reecey
相关产品推荐
相关产品推荐

