2016-08-24 146 views
1

我已经提出,保护工作表,并更改板至板“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 

回答

2

因为Cancel = True我猜。

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

如果你不想宏的“另存为”在所有的运行,你可以把这个方法的开始:

If SaveAsUI Then 
    Return 
End If 
+0

不过,每当我点击浏览,以检查地方保存文件,宏运行,甚至与您的代码,而不是取消=真 – Kuba

+0

@Kuba,我更新了我的答案。这对你有用吗? –

+0

可惜没有。我应该粘贴此代码而不是取消=真?这是我在代码中做出的唯一改变。它在“返回”时打破。 – Kuba