1

ドキュメントが既に印刷されている場合にのみ、別の機能「コード」を有効にしたいのですが、次の行に沿って何かを考えていました

Sub Testing
    Dim hasPrinted as boolean
    If ActiveDocument.PrintOut = True Then
        hasPrinted = True
        call code here...
    Else
        hasPrinted = False
        MsgBox "Please Print Before Adding"
    End If
End Sub

「ActiveDocument.PrintOut」行に「コンパイル エラー、関数または変数が必要です」というエラーが表示されます。どなたか道順を教えていただけませんか?

4

2 に答える 2

2

Word VBA で印刷イベントをキャプチャするのは簡単ではありません。ただし、ここに巧妙なトリックがあります:)

これには、次の手順を実行します

クラスモジュールを作成して、Class1このコードを貼り付けます

Option Explicit

Public WithEvents oApp As Word.Application

Private Sub oApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
    ActiveDocument.Bookmarks("DocWasPrinted").Delete
    With ActiveDocument.Bookmarks
        .Add Range:=Selection.Range, Name:="DocWasPrinted"
        .DefaultSorting = wdSortByName
        .ShowHidden = True
    End With
End Sub

モジュールを挿入して、このコードを貼り付けます

Option Explicit

Dim oAppClass As New Class1

Public Sub AutoExec()
    Set oAppClass.oApp = Word.Application
End Sub

Sub Testing()
    If hasPrinted = True Then
        MsgBox "Document was printed"
        '~~> Call your code
    Else
        MsgBox "Please Print Before Adding"
    End If
End Sub

Function hasPrinted() As Boolean
    If ActiveDocument.Bookmarks.Exists("DocWasPrinted") = True Then
        hasPrinted = True
    End If
End Function

ドキュメントを閉じて、もう一度開きます。今それをテストします。

論理:

このコードが行うことは、ユーザーがドキュメントを印刷する瞬間です。コードは、という名前の非表示のブックマークを作成しますDocWasPrinted。私のコードでは、ブックマークが作成されたかどうかを確認します。

Document Exit のブックマークを忘れずに削除してください。

Private Sub Document_Close()
     ActiveDocument.Bookmarks("DoWasPrinted").Delete
End Sub
于 2012-07-16T19:18:18.853 に答える
1

この質問は、印刷後の間に合わせのドキュメントイベントの作成に関する情報を提供します。

これを実行したら、ブール値をtrueに更新して、ドキュメントが印刷されたことを示すことができます。Wordはこの情報をネイティブに保存しません。

于 2012-07-16T19:09:44.997 に答える