2012-07-24 75 views
3

我目前有一個宏,它可以進行數據挖掘並最終保存工作簿。我打算禁用工作簿的保存功能,並強制用戶在每次需要保存工作簿時使用宏。這是我迄今爲止的,但它似乎沒有工作。當我這樣做時,我的宏和下面描述的這個子都是循環運行的。每次我的宏試圖保存工作簿時,該子文件都不允許它。我基本上想強制用戶使用宏來保存工作簿。如何禁用保存功能

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

    NoSave = MsgBox("Changes have to be submitted before the workbook can be saved, Proceed and submit ?", vbYesNo, "Continue?") 

    If NoSave = vbNo Then 
     Cancel = True 
    Else 
     Main 
    End If 
End Sub 
+1

難道你不能只保存你的宏,並在BeforeSave事件上運行你的宏? – JMK 2012-07-24 12:30:43

+0

工作正常!好主意,謝謝 – user1452091 2012-07-24 13:19:03

回答

2

這裏是一個例子。粘貼在ThisWorkbook。這不會讓你使用SaveSaveAs。但是,您可以使用宏SaveThisFile來保存工作簿。請修改它以適應您的需求。

Option Explicit 

Dim SaveByCode As Boolean 
Const msg As String = "Please use the macro to save the file" 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    If Me.Saved = False And SaveByCode = False Then 
     MsgBox msg, vbExclamation, "Unable to save" 
     Cancel = True 
    End If 
End Sub 

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    Application.EnableEvents = False 
    If SaveByCode = True Then 
     SaveThisFile 
    Else 
     MsgBox msg, vbExclamation, "Unable to save" 
     Cancel = True 
    End If 
    Application.EnableEvents = True 
End Sub 

'~~> Your macro to save the file 
Sub SaveThisFile() 
    SaveByCode = True 
    ThisWorkbook.Save 
End Sub 

注意:如果您保存宏是在一個模塊中,然後從ThisWorkbook刪除此Dim SaveByCode As Boolean並將Public SaveByCode As Boolean一個模塊中。

+0

非常感謝! – user1452091 2012-07-24 13:22:42

0

替代,這個怎麼樣(我誤解了這個問題,在第一,但也想給它一個嘗試,因爲它是有趣的):
聲明公共布爾(例外)放在ThisWorkbook模塊中:

Option Explicit 
Public bSave As Boolean 

在事件BeforeSave事件:

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

Dim sNoSave As String 

If bSave = True Then 
    bSave = False 
    Exit Sub 
End If 

sNoSave = MsgBox("Changes have to be submitted before the workbook can be saved, Proceed and submit ?", vbYesNo, "Continue?") 

If sNoSave = vbNo Then 
    bSave = False 
    Cancel = True 
    Exit Sub 
Else 
    bSave = True 
    Call Main(bSave) 
End If 

End Sub 

在主營:

Explicit選項

Sub Main(bSave) 

If bSave = True Then 
    ThisWorkbook.SaveAs Filename:="U:\Book1.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled 
    MsgBox "Main method called" 
End If 

End Sub