0

現在のドキュメントを保存するときに何らかの処理を行うカスタム Word テンプレートを作成しています。

Office2007 では、ドキュメントを保存するために、Save および Save As 関数を使用し、FileSave および FileSaveAs マクロでイベントを処理できます。

ただし、ユーザーが [名前を付けて保存] オプションにカーソルを合わせると、他のサブオプションが表示されます: ドキュメントとして保存、Word テンプレートとして保存、Word 97-2003 ドキュメントとして保存など。これらのサブオプションには独自のイベントがないようです。しかし、ユーザーがいつそれらを使用するか知りたいです。

そのため、DocumentBeforeSave イベントを使用するというアイデアを思いつきましたが、保存が標準の Save/SaveAs オプションで行われたのか、サブオプションで行われたのかを把握する必要があります。

私は、Save/SaveAs 関数で変数を True に設定することを考えました。DocumentBeforeSave イベントは、通常の保存方法の 1 つが発生したかどうかを確認し、変数を False に戻します。

しかし、さまざまな方法を試してみたところ、ThisDocument と BeforeSave イベントを持つクラス モジュールの間で変数の値を渡す方法がわかりません。

何か案は?ありがとう!


編集:動作しないコード例:

このドキュメント:

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 のはずです。

4

1 に答える 1

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あなたがサブを実行する方法がわかりません。ただし、実行後、イベントでチェックできるクラス プロパティに値を渡します。とにかくお役に立てば幸いです。

于 2013-04-11T13:50:28.863 に答える