3

ユーザーがレポートを物理的に印刷するときに実行したいコードがあります。印刷プレビュー時などではなく、プリンターへの送信時のみ。ユーザーはレポートを取得して表示できる必要があります。印刷する場合は、vba コードが引き継ぎ、レポートの生成に使用されているテーブルとは別のテーブルに情報を書き込みます。実際のレポートに [印刷] ボタンを配置する必要がないことを望んでいました (印刷のために非表示にできることはわかっていましたが)。

運が良かった人はいますか?

4

1 に答える 1

3

よく考えた結果、これを達成する最善の方法は、レポートの Page イベント中にアクティブ ウィンドウのテキストを識別することだと思います。印刷プレビュー中、このテキストはデータベース自体の名前で、「Microsoft Access - DatabaseName : Database (Access 2003)」のようになります。実際の印刷操作中、アクティブなウィンドウは「印刷中」になります。

ほとんどのコードは、このソースからのものであると信じています。

Declare Function GetActiveWindow Lib "user32" () As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
   (ByVal Hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Private Sub Report_Page()
On Error GoTo PrintError

    Dim strCaption As String
       Dim lngLen   As Long

       ' Create string filled with null characters.
       strCaption = String$(255, vbNullChar)
       ' Return length of string.
       lngLen = Len(strCaption)

       ' Call GetActiveWindow to return handle to active window,
       ' and pass handle to GetWindowText, along with string and its length.
       If (GetWindowText(GetActiveWindow, strCaption, lngLen) > 0) Then
          ' Return value that Windows has written to string.
          ActiveWindowCaption = strCaption
       End If

    If ActiveWindowCaption = "Printing" Then

        '
        ' Special activity goes here.
        '

    End If

    Exit Sub

PrintError:
    ' Just in case

End Sub
于 2012-07-05T19:14:43.123 に答える