A family of Microsoft word processing software products for creating web, email, and print documents.
Well, see how you get on with the following code. There is plenty of scope for improvement! You should really add some error checking and documentation.
Option Explicit
' Constants containing document texts
' In case you want to translate them)
Private Const strBuiltinText As String = "Built-in properties"
Private Const strFileNameText As String = "Filename"
Private Const strDirectoryText As String = "Directory"
Private Const strTemplateText As String = "Template"
Private Const strTitleText As String = "Title"
Private Const strSubjectText As String = "Subject"
Private Const strAuthorText As String = "Author"
Private Const strKeywordsText As String = "Keywords"
Private Const strCommentsText As String = "Comments"
Private Const strTimeCreatedText As String = "Creation Date"
Private Const strRevisionText As String = "Change Number"
Private Const strTimeLastSavedText As String = "Last Saved On"
Private Const strLastAuthorText As String = "Last Saved By"
Private Const strVBATotalEditText As String = "Total Editing Time (minutes)"
Private Const strTimeLastPrintedText As String = "Last Printed On"
Private Const strStatisticsSubsectionText As String = "As of Last Complete Printing (approx):-"
Private Const strPagesText As String = "Number of Pages"
Private Const strWordsText As String = "Number of Words"
Private Const strCharactersText As String = "Number of Characters"
'Private Const strCustomText As String = "Word Custom Properties"
'Private Const strServerText As String = "Server Properties"
Private Const strSeparator As String = ":" & vbTab
' The following is the UK date format used by the standard printout
Private Const strDateTimeFormat1 As String = "DDDD, DD MMMM YYYY MM/DD/YYYY hh:mm"
' Constants for when properties are missing etc.
Private Const strMissing1 As String = "(Missing)"
Private Const strDocNotSaved As String = "(Document not yet saved)"
' Constants containing the document style names that
' we will create
Private Const strSectionTitle As String = "nSectionTitle"
Private Const strPropParagraph As String = "nPropParagraph"
Private Const strSubSectionTitle As String = "nSubSectionTitle"
Private Const strPropSubParagraph As String = "nPropSubParagraph"
Sub printActiveDocumentProperties()
' Prints the ActiveDocument's properties
Dim objActiveDocument As Word.Document
Dim objPrintDocument As Word.Document
Dim objStyle As Word.Style
Set objActiveDocument = Application.ActiveDocument
Set objPrintDocument = Application.Documents.Add(Visible:=True)
Call initPrintDocument(OutputDocument:=objPrintDocument)
Call outputBuiltinProperties( _
TheDocument:=objActiveDocument, _
OutputDocument:=objPrintDocument)
objPrintDocument.PrintOut
VBA.DoEvents
objPrintDocument.Close savechanges:=WdSaveOptions.wdDoNotSaveChanges
Set objPrintDocument = Nothing
objActiveDocument.Activate
Set objActiveDocument = Nothing
End Sub
Sub initPrintDocument(OutputDocument As Word.Document)
Dim objStyle As Word.Style
OutputDocument.Content.Delete
Set objStyle = OutputDocument.Styles.Add(Name:=strSectionTitle, Type:=WdStyleType.wdStyleTypeParagraph)
With objStyle
With .Font
.Bold = True
.Size = 14
End With
With .ParagraphFormat
.Alignment = wdAlignParagraphCenter
.KeepTogether = False
.KeepWithNext = True
.SpaceAfter = 18
End With
End With
Set objStyle = OutputDocument.Styles.Add(Name:=strPropParagraph, Type:=WdStyleType.wdStyleTypeParagraph)
With objStyle
With .Font
.Bold = False
.Size = 12
End With
With .ParagraphFormat
.Alignment = wdAlignParagraphLeft
.FirstLineIndent = -96
.LeftIndent = 96
.KeepTogether = False
.KeepWithNext = True
.SpaceAfter = 0
.TabStops.Add Position:=96
End With
End With
Set objStyle = OutputDocument.Styles.Add(Name:=strSubSectionTitle, Type:=WdStyleType.wdStyleTypeParagraph)
With objStyle
With .Font
.Bold = False
.Size = 12
End With
With .ParagraphFormat
.Alignment = wdAlignParagraphLeft
.KeepTogether = False
.KeepWithNext = True
.SpaceAfter = 0
End With
End With
Set objStyle = OutputDocument.Styles.Add(Name:=strPropSubParagraph, Type:=WdStyleType.wdStyleTypeParagraph)
With objStyle
With .Font
.Bold = False
.Size = 12
End With
With .ParagraphFormat
.Alignment = wdAlignParagraphLeft
.FirstLineIndent = -72
.LeftIndent = 96
.KeepTogether = False
.KeepWithNext = True
.SpaceAfter = 0
.TabStops.Add Position:=96
End With
End With
Set objStyle = Nothing
End Sub
Sub outputBuiltinProperties(TheDocument As Word.Document, _
OutputDocument As Word.Document)
outputSectionTitle _
OutputDocument:=OutputDocument, _
SectionTitle:=strBuiltinText
outputProperty _
OutputDocument:=OutputDocument, _
PropertyName:=strFileNameText, _
PropertyValue:=TheDocument.Name, _
ParagraphStyle:=strPropParagraph
If TheDocument.path = "" Then
outputProperty _
OutputDocument:=OutputDocument, _
PropertyName:=strDirectoryText, _
PropertyValue:=strDocNotSaved, _
ParagraphStyle:=strPropParagraph
Else
outputProperty _
OutputDocument:=OutputDocument, _
PropertyName:=strDirectoryText, _
PropertyValue:=TheDocument.path, _
ParagraphStyle:=strPropParagraph
End If
outputProperty _
OutputDocument:=OutputDocument, _
PropertyName:=strTemplateText, _
PropertyValue:=TheDocument.AttachedTemplate.FullName, _
ParagraphStyle:=strPropParagraph
outputBuiltinProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strTitleText, _
PropertyID:=WdBuiltInProperty.wdPropertyTitle
outputBuiltinProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strSubjectText, _
PropertyID:=WdBuiltInProperty.wdPropertySubject
outputBuiltinProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strAuthorText, _
PropertyID:=WdBuiltInProperty.wdPropertyAuthor
outputBuiltinProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strKeywordsText, _
PropertyID:=WdBuiltInProperty.wdPropertyKeywords
outputBuiltinProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strCommentsText, _
PropertyID:=WdBuiltInProperty.wdPropertyComments
outputBuiltinDateTimeProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strTimeCreatedText, _
PropertyID:=WdBuiltInProperty.wdPropertyTimeCreated
outputBuiltinDateTimeProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strRevisionText, _
PropertyID:=WdBuiltInProperty.wdPropertyRevision
outputBuiltinDateTimeProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strTimeLastSavedText, _
PropertyID:=WdBuiltInProperty.wdPropertyTimeLastSaved
outputBuiltinProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strLastAuthorText, _
PropertyID:=WdBuiltInProperty.wdPropertyLastAuthor
outputBuiltinProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strVBATotalEditText, _
PropertyID:=WdBuiltInProperty.wdPropertyVBATotalEdit
outputBuiltinDateTimeProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strTimeLastPrintedText, _
PropertyID:=WdBuiltInProperty.wdPropertyTimeLastPrinted
outputSubSectionTitle _
OutputDocument:=OutputDocument, _
SubSectionTitle:=strStatisticsSubsectionText
outputBuiltinSubProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strPagesText, _
PropertyID:=WdBuiltInProperty.wdPropertyPages
outputBuiltinSubProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strWordsText, _
PropertyID:=WdBuiltInProperty.wdPropertyWords
outputBuiltinSubProperty _
TheDocument:=TheDocument, _
OutputDocument:=OutputDocument, _
PropertyName:=strCharactersText, _
PropertyID:=WdBuiltInProperty.wdPropertyCharacters
End Sub
Sub outputBuiltinProperty(TheDocument As Word.Document, _
OutputDocument As Word.Document, _
PropertyName As String, _
PropertyID As WdBuiltInProperty)
Dim s As String
On Error Resume Next
s = strMissing1
s = TheDocument.BuiltInDocumentProperties(PropertyID)
Err.Clear
On Error GoTo 0
outputProperty _
OutputDocument:=OutputDocument, _
PropertyName:=PropertyName, _
PropertyValue:=s, _
ParagraphStyle:=strPropParagraph
End Sub
Sub outputBuiltinSubProperty(TheDocument As Word.Document, _
OutputDocument As Word.Document, _
PropertyName As String, _
PropertyID As WdBuiltInProperty)
Dim s As String
On Error Resume Next
s = strMissing1
s = TheDocument.BuiltInDocumentProperties(PropertyID)
Err.Clear
On Error GoTo 0
outputProperty _
OutputDocument:=OutputDocument, _
PropertyName:=PropertyName, _
PropertyValue:=s, _
ParagraphStyle:=strPropSubParagraph
End Sub
Sub outputBuiltinDateTimeProperty(TheDocument As Word.Document, _
OutputDocument As Word.Document, _
PropertyName As String, _
PropertyID As WdBuiltInProperty)
Dim s As String
On Error Resume Next
s = strMissing1
s = Format(TheDocument.BuiltInDocumentProperties(PropertyID), strDateTimeFormat1)
Err.Clear
On Error GoTo 0
outputProperty _
OutputDocument:=OutputDocument, _
PropertyName:=PropertyName, _
PropertyValue:=s, _
ParagraphStyle:=strPropParagraph
End Sub
Sub outputProperty(OutputDocument As Word.Document, _
PropertyName As String, _
PropertyValue As String, _
ParagraphStyle As String)
Dim r As Word.Range
Set r = OutputDocument.Content
r.SetRange OutputDocument.Content.End, OutputDocument.Content.End
r.Style = ParagraphStyle
Set r = Nothing
OutputDocument.Content.InsertAfter PropertyName & strSeparator & PropertyValue
OutputDocument.Content.InsertParagraphAfter
End Sub
Sub outputSectionTitle(OutputDocument As Word.Document, _
SectionTitle As String)
Dim r As Word.Range
Set r = OutputDocument.Content
r.SetRange OutputDocument.Content.End, OutputDocument.Content.End
r.Style = strSectionTitle
Set r = Nothing
OutputDocument.Content.InsertAfter SectionTitle
OutputDocument.Content.InsertParagraphAfter
End Sub
Sub outputSubSectionTitle(OutputDocument As Word.Document, _
SubSectionTitle As String)
Dim r As Word.Range
Set r = OutputDocument.Content
r.SetRange OutputDocument.Content.End, OutputDocument.Content.End
r.Style = strSubSectionTitle
Set r = Nothing
OutputDocument.Content.InsertAfter SubSectionTitle
OutputDocument.Content.InsertParagraphAfter
End Sub