保存前不适用于另存为

Posted

技术标签:

【中文标题】保存前不适用于另存为【英文标题】:Before save does not work with save as 【发布时间】:2016-08-24 13:37:30 【问题描述】:

我制作了一个宏来保护工作表并将工作表更改为工作表“A”,然后保存文件,然后返回到我开始使用的工作表。

很遗憾,当我的宏在工作簿中时,另存为选项不起作用。每当我单击另存为并想要搜索保存文件的位置时,宏就会开始运行,并禁用我尝试执行的操作。

这是我正在写的代码:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  
    Cancel = True  
    Application.EnableCancelKey = XlEnableCancelKey.xlDisabled  
    Application.ScreenUpdating = False  
    Application.EnableEvents = False  
    Dim aktywny As Worksheet    
    Set aktywny = ActiveSheet   
For Each Sh In ThisWorkbook.Sheets  
    If InStr(Sh.Name, ".") <> 0 Then  
        If Sh.ProtectContents = False Then  
            Sh.Protect Password:="XXX", DrawingObjects:=True,   Contents:=True, Scenarios:=True _  
            , AllowFormattingCells:=True, AllowFormattingColumns:=True  
        End If  
    End If   
Next  
ThisWorkbook.Sheets("A").Activate  
Me.Save  
aktywny.Activate  
ThisWorkbook.Saved = True  
Cancel = True  
Application.EnableEvents = True  
Application.ScreenUpdating = True  
End Sub 

【问题讨论】:

【参考方案1】:

我猜是因为Cancel = True

您可能应该使用ByVal SaveAsUI As Boolean 标志来查看用户是否单击了“另存为”。

如果您根本不希望宏在“另存为”上运行,您可以将其放在方法的开头:

If SaveAsUI Then
    Return
End If

【讨论】:

不过,每当我单击浏览以检查保存文件的位置时,宏都会运行,即使使用您的代码而不是 Cancel = true 很遗憾没有。我应该粘贴此代码而不是 Cancel = True 吗?这是我对代码所做的唯一更改。它在“返回”时中断。

以上是关于保存前不适用于另存为的主要内容,如果未能解决你的问题,请参考以下文章

强制“是”以保存并另存为无宏工作簿

excel 保存时弹出窗口为另存为,怎么办?

HTML中保存,另存为,功能是如何实现的

如何保存不另存为

GUI设计:合并“保存”和“另存为”

Java“保存”与“另存为”策略