【问题标题】: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 

【问题讨论】:

    标签: vba excel save before-save


    【解决方案1】:

    我猜是因为Cancel = True

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

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

    If SaveAsUI Then
        Return
    End If
    

    【讨论】:

    • 不过,每当我单击浏览以检查保存文件的位置时,宏都会运行,即使使用您的代码而不是 Cancel = true
    • 很遗憾没有。我应该粘贴此代码而不是 Cancel = True 吗?这是我对代码所做的唯一更改。它在“返回”时中断。
    猜你喜欢
    • 2013-10-27
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多