2016-08-24 110 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