4

Before_Printユーザーがシートを印刷する前に、必要なすべてのフィールドに入力していることを確認するために、Excel でイベントをインターセプトするコードがあります。ただし、このコードは、ユーザーが印刷プレビューを呼び出しているときではなく、実際に印刷しているときにのみ実行する必要があります。

Before_Printユーザーが実際に印刷しているのか、単にプレビューしているのかをコードで確認する方法はありますか?

私が現在持っているコードは次のとおりです(イベントスタブはExcelによって生成されました):

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    If Not Sheet2.CheckAllFieldsFilled Then
        Cancel = True
    End If
End Sub
4

3 に答える 3

0

イベントが印刷プレビューなのか印刷リクエストなのかを判断するための適切な方法はないと思います。

以下の解決策は、特にきちんとしたものではなく、ユーザーに少し不便をかけますが、機能します。

コードはイベントをキャンセルし、ユーザーにプロンプ​​トを表示します。ユーザーの応答に基づいて、印刷プレビューを表示するか、印刷します。

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim Print_or_Preview As XlYesNoGuess

Application.EnableEvents = False

    Cancel = True
    Print_or_Preview = MsgBox("Show Print Preview?", vbYesNo)

    If Print_or_Preview = True Then
        ActiveWindow.ActiveSheet.PrintPreview
        Else
        ActiveWindow.ActiveSheet.PrintOut
    End If
Application.EnableEvents = True

End Sub
于 2009-09-03T14:48:30.447 に答える
-1

印刷するには、次のようにします。

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

提案されたようにプレビューを印刷するには:

ActiveWindow.ActiveSheet.PrintPreview 

それぞれに異なるボタンが必要になりますが、実際に両方が必要かどうかをテストすることを強くお勧めします。これは、プレビュー ボタンが印刷オプションで機能する可能性があるためです。特に、ほとんどの場合、プレビューから直接印刷できるためです。

私はここで間違っているかもしれませんが、そうは思いません。

ここに投稿した印刷オプションは直接印刷されます。オプションは要求されません。スクリプトにコード化されているためです。印刷する部数を変更したい場合は、任意のcopies:=数に変更してください。願い...

楽しみ :)

于 2012-08-27T13:58:48.870 に答える
-1

印刷プレビューを表示したいときにユーザーが押すための非常に目に見えるボタンを提供すると思います。

ボタンを印刷用に非表示にし (ボタンのオプションで)、コードに次のように単純に記述します。

ActiveWindow.ActiveSheet.PrintPreview
于 2009-09-30T20:47:35.083 に答える