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