Это встроенное свойство документа должно помочь:
ThisWorkbook.BuiltinDocumentProperties.Item(10)
Это свойство содержит дату/время последней печати документа, если вообще когда-либо было.
Как вы должны это использовать, зависит от объема ваших требований к этой информации, того, что вы собираетесь с ней делать, и других соображений, таких как "с чем вы ее сравниваете?" .... Вас беспокоит, когда пользователь печатает документ... а не что? Он также автоматически печатает?
Если вы хотите узнать, распечатывался ли документ с момента его открытия, вы можете использовать событие Workbook_Open
для сохранения даты последней печати в этот момент:
Public lastPrinted As Date
Private Sub Workbook_Open()
lastPrinted = ThisWorkbook.BuiltinDocumentProperties.Item(10)
End Sub
... и позже сравните lastPrinted
с ThisWorkbook.BuiltinDocumentProperties.Item(10)
, чтобы определить, был ли он напечатан с тех пор.
В качестве альтернативы вы можете присвоить значение переменной с помощью Workbook_BeforePrint
, что даже позволит вам предотвратить печать в зависимости от ваших критериев, если это ваша конечная цель, или вы можете установите настраиваемое свойство документа, если это поможет.
Дополнительная информация:
Другие встроенные свойства документа
1 : Title
2 : Subject
3 : Author
4 : Keywords
5 : Comments
6 : Template
7 : Last author
8 : Revision number
9 : Application name
10 : Last print date
11 : Creation date
12 : Last save time
13 : Total editing time
14 : Number of pages
15 : Number of words
16 : Number of characters
17 : Security
18 : Category
19 : Format
20 : Manager
21 : Company
22 : Number of bytes
23 : Number of lines
24 : Number of paragraphs
25 : Number of slides
26 : Number of notes
27 : Number of hidden Slides
28 : Number of multimedia clips
29 : Hyperlink base
30 : Number of characters (with spaces)
31 : Content type
32 : Content status
33 : Language
34 : Document version
Немного не по теме, но пока я на этом, я мог бы также включить код, который вернет список всех встроенных и пользовательских свойств документа:
Sub listDocumentProperties()
'lists all built-in and custom document properties for the active Office document
On Error Resume Next
Dim p As DocumentProperty, x As Long
With ActiveWorkbook ' ...or ActiveDocument or ActivePresentation etc.
'list built-in properties
Debug.Print "Built-in Document Properties for " & .Name
For Each p In .BuiltinDocumentProperties
x = x + 1
Debug.Print Format(x, "\#00\: ") & p.Name & String(35 - Len(p.Name), " "), ;
Debug.Print p.Value
If Err Then
Debug.Print "<N/A>"
Err.Clear
End If
Next
'list custom properties
Debug.Print vbLf & "Custom Document Properties for " & .Name
x = 0
For Each p In .CustomDocumentProperties
x = x + 1
Debug.Print Format(x, "\#00\: ") & p.Name & String(35 - Len(p.Name), " "), ;
Debug.Print p.Value
If Err Then
Debug.Print "<N/A>"
Err.Clear
End If
Next
If x = 0 Then Debug.Print "(No Custom Properties Found)"
End With
End Sub
Это будет работать в любом приложении Office; вам просто нужно изменить строку With
на соответствующий тип документа.
Альтернативное решение:
Другое возможное решение — использовать событие Workbook_BeforePrint
для заполнения общедоступной переменной.
Поместите это в верхнюю часть стандартного модуля:
Option Explicit
Public lastPrinted As Date
... и поместите это в модуль ThisWorkbook
:
Option Explicit
Private Sub Workbook_BeforePrint(Cancel As Boolean)
lastPrinted = Now()
End Sub
... и тогда вы сможете определить, действительно ли документ был отправлен на принтер (в отличие от предварительного просмотра), проверив значение lastPrinted
. Если он не был распечатан (поскольку документ был открыт), он должен содержать ноль, иначе он будет содержать дату/время отправки документа на принтер. Обратите внимание, что невозможно определить, успешно ли принтер напечатал его.
Обратите внимание, что вы также можете запретить печать, используя вместо этого в модуле ThisWorkbook
:
Option Explicit
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Cancel = True
End Sub
Если вы не уверены, куда разместить код в ThisWorkbook
Модуль <56> Стандартный модуль , см. Это руководство.
Событие перед печатью? Возможно, msdn.microsoft.com/en-us/vba/excel-vba/articles/… webcache.googleusercontent.com/search?q=cache:http://…
В каком объеме вам необходимо иметь эту информацию? т.е. нужно ли его сохранять после закрытия книги?
Событие BeforePrint будет вызвано методом PrintPreview, а не только методом PrintOut. И программа вызывает PrintPreview, чтобы запретить пользователям редактировать файл Excel.