SaveAs 命令不起作用,但 SaveCopyAs 可以

Posted

技术标签:

【中文标题】SaveAs 命令不起作用,但 SaveCopyAs 可以【英文标题】:SaveAs command does not work, but SaveCopyAs does 【发布时间】:2013-07-03 14:15:32 【问题描述】:

我很难让SaveAs 命令正常工作。对于本地医院,有从模板文件创建的患者图表,在其中输入患者数据,然后手动重命名(使用另存为),然后将其复制到另一个位置作为备份。模板被反复使用。

我的代码的目标是自动化这个过程。因此,我想从模板文件开始保存到两个不同的位置。不应覆盖模板文件。在模板中,用户分别在单元格 K1 和 N1 中设置科室名称和床号。这些字段确定该文件夹中的文件夹和文件名。

当按下保存按钮时,我的代码开始运行。我使用 SaveCopyAs 保存备份文件,之后我想使用 SaveAs 保存到我的主文件夹。 SaveAs 应该将此新文件设置为我的工作文件,因此不会覆盖我的模板。至少我是这么认为的……

问题:运行SaveAs 时,Excel 崩溃(没有任何明确的错误消息)。奇怪的是(对我来说)当我用 SaveCopyAs 替换 SaveAs 时不会崩溃。

问题:为什么此时 Excel 会崩溃?有没有办法解决或避免这种行为?我找不到不改变我的模板的合适解决方案。任何帮助或建议都非常受欢迎。

下面的代码放在我的“ThisWorkbook”文件夹中,每次单击“保存”按钮时都会执行。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    department = Range("K1").Value 'Name of department: CHIC, THIC, ICB or NCIC
    bedNumber = Range("N1").Value 'bednumber or roomnumber: Bed 1. Bed 2 or Room 1, Room 2.
    newFileName = department & "\" & bedNumber & ".xls"

    If IsEmpty(department) Then
        MsgBox "You haven't entered a department. Please try again."
    ElseIf IsEmpty(bedNumber) Then
        MsgBox "You haven't entered a bed or room number. Please try again."
    Else
        ActiveWorkbook.SaveCopyAs "C:\myBackupFolder\" + newFileName
    End If


    ActiveWorkbook.SaveAs "C:\myPrimaryFolder\" + newFileName 'Doesn't work

    'ActiveWorkbook.SaveCopyAs "C:\myPrimaryFolder\" + newFileName 'Does work, but I end up with a messed up template!
End Sub

【问题讨论】:

我注意到您没有在例程中设置Cancel。您可能希望将 Cancel 设置为 True 以便 excel 不会自己保存 【参考方案1】:

除了设置Cancel = True 来阻止默认保存行为,添加:

Application.EnableEvents = False
ActiveWorkbook.SaveAs "C:\myPrimaryFolder\" + newFileName 'Doesn't work
Application.EnableEvents = True

以防止再次调用相同的过程(并再次......)。这可能就是它崩溃的原因。

【讨论】:

非常感谢,这解决了我的问题!

以上是关于SaveAs 命令不起作用,但 SaveCopyAs 可以的主要内容,如果未能解决你的问题,请参考以下文章

saveAs for Excel 文件在 VB.NET 中不起作用

FileUpload.PostedFile.SaveAs() 在实时网站 asp.net 上不起作用

宏 VBA,无法让“SaveAs”发挥作用

我最近添加了一个 /ping 延迟命令,但现在某些命令不起作用并且我没有收到错误

纱线已安装但不起作用。命令被识别,但没有纱线命令做任何事情。 Windows Powershell

我正在制作基于文本的冒险游戏,但动作命令不起作用