2013-04-11 66 views
0

我在寫保存當前文檔時會執行一些處理的自定義Word模板。檢測用戶在Office2007中使用Word VBA選擇的保存功能

在Office2007中,要保存文檔,您可以使用「保存」和「另存爲」功能,並使用FileSave和FileSaveAs宏處理事件。

但是當用戶將鼠標懸停在SaveAs選項上時,將顯示其他子選項:另存爲文檔,作爲Word模板,作爲Word 97-2003文檔等。這些子選項似乎沒有他們自己的事件,但我想知道用戶何時使用它們。

所以我想出了使用DocumentBeforeSave事件的想法,但是我仍然需要弄清楚是否使用標準的Save/SaveAs選項或子選項進行保存。

我想過在Save/SaveAs函數中設置一個變量爲True,DocumentBeforeSave事件會檢查其中一個正常的保存方法是否發生,然後將該變量設置爲False。

但是在用不同的方法進行實驗之後,我無法弄清楚如何在ThisDocument和具有BeforeSave事件的類模塊之間傳遞一個變量的值。

任何想法?謝謝!


編輯:實施例的代碼不工作:

的ThisDocument:

Public pSSave As Boolean 

Public Property Get SSave() As Boolean 
    SSave = pSSave 
End Property 

Public Property Let SSave(Value As Boolean) 
    pSSave = Value 
End Property 

Sub FileSave() 

Me.SSave = True 

If SSave = True Then 
    MsgBox "True" 
End If 

Application.ActiveDocument.Save 

If SSave = True Then 
    MsgBox "True" 
End If 

End Sub 

類模塊:

Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean) 

    If Application.ActiveDocument.SSave = False Then 
     MsgBox "False" 
    End If 
End Sub 

類模塊登記完成正確我不會粘貼她的代碼。

顯示的結果是True,False,True,理論上它應該是True,True。

+1

我不確定我是否能幫助你...你真正的目標是什麼?允許還是不允許保存?控制過程?或者只是將對象的值傳遞給Class ...看起來你有一些想法,但問題還不清楚。您可以添加一些代碼以更好地瞭解您的需求... – 2013-04-11 06:57:08

+0

我想在用戶使用子選項保存文檔時(不使用標準的「保存」和「另存爲」菜單項)檢測它並運行一段代碼。 – Steve 2013-04-11 07:47:18

+0

你可以在你的類中創建額外的'property let \ get'屬性,並使用該屬性將任何值傳遞給你的類。或者在你的班級中添加額外的「公共變量」,這可能會使你通過這個值 – 2013-04-11 07:51:03

回答

1

我仍然錯過了你的邏輯。在評論中,我想到了不同的反向邏輯,它會這樣。下面的代碼是我提供的方式和代碼的組合。

類模塊

Public WithEvents App As Word.Application 

Public pSSave As Boolean 'your class variable/property 

Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean) 
If pSSave = False Then 
    MsgBox pSSave 
Else 
    MsgBox pSSave 
End If 
End Sub 

模塊1

'class initialization 
Public wrdAPP As New myClass 
Sub set_References() 
    Set wrdAPP.App = Application 
End Sub 

的ThisDocument模塊

Private Sub Document_Open() 
'to initialize public variable when open 
    Call Module1.set_References 
End Sub 

Sub FileSave() 

wrdAPP.pSSave = True 

Application.ActiveDocument.Save 

If wrdAPP.pSSave = True Then 
    MsgBox "True" 
End If 

End Sub 

我不知道是哪個你會跑的方式FileSave分。但是在運行後,它會將值傳遞給您可以在事件中檢查的類屬性。 希望它能幫助你。

+0

它的工作原理,謝謝! – Steve 2013-04-11 17:48:43

+0

不客氣:) – 2013-04-11 17:49:42