'wordで変更履歴またはコメントがあるページだけprintするマクロです
'******************************************************************************
' Function : printPagesHavingChangesOrComments
' Description : メイン処理
' Parameter : なし
' Example :
' Return Value : なし
' Author: kagen88@gmail.com/ 2010/10/10
'******************************************************************************
Sub printPagesHavingChangesOrComments()
Dim pageNum As Integer
Dim pageArray() As Variant
ReDim Preserve pageArray(0)
'ここはポイント、「'文章の先頭から検索を続けますか?」がPOPUPされる
Application.DisplayAlerts = True
'カーソルを最初に移動
Selection.HomeKey Unit:=wdStory
'無限ループにならないように保険
Dim i As Integer
i = 1
'文章の先頭から検索を続けますかに「いいえ」をクリック、エラーを起こす
'ここのエラー実はループの終わり
On Error GoTo finish
Do
i = i + 1
'次の変更またはコメントに移動
WordBasic.NextChangeOrComment
'その時のページ番号を取得
pageNum = Selection.Information(wdActiveEndPageNumber)
'そのページ番号は既にプリント要ページ番号リストに登録していますか
If Not uInArrayStr(pageNum, pageArray) Then
ReDim Preserve pageArray(UBound(pageArray) + 1)
pageArray(UBound(pageArray)) = pageNum
End If
Loop While i < 500
finish:
MsgBox "検索完了"
Dim strPage As String
Dim sep As String
sep = ""
If IsArray(pageArray) Then
Dim x As Integer
For x = 1 To UBound(pageArray)
strPage = strPage & sep & pageArray(x)
sep = ","
Next
res = MsgBox("プリントしますか?", vbOKCancel)
If res = vbOK Then
Application.PrintOut FileName:="",
Range:=wdPrintRangeOfPages, Item:= _
wdPrintDocumentWithMarkup, Copies:=1, Pages:=strPage, PageType:= _
wdPrintAllPages, ManualDuplexPrint:=False, Collate:=True,
Background:= _
True, PrintToFile:=False, PrintZoomColumn:=0, PrintZoomRow:=0, _
PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
End If
End If
End Sub
'******************************************************************************
' Function : uInArrayStr
' Description : 文字列が配列に入ってるかどうかをチェック
' Parameter : 文字列、配列
' Example :
' Return Value :
' True:あり
' False:なし
' Author: kagen88@gmail.com/ 2010/10/10
'******************************************************************************
Public Function uInArrayStr(ByVal strTarget As String, ByVal arrArray
As Variant) As Boolean
Dim blnReturn As Boolean
Dim intX As Integer
blnReturn = False
If IsArray(arrArray) Then
For intX = 0 To UBound(arrArray)
If arrArray(intX) = strTarget Then
blnReturn = True
Exit For
End If
Next
End If
uInArrayStr = blnReturn
End Function
2010年10月11日月曜日
wordで変更履歴またはコメントがあるページだけprintするマクロです
ラベル:
vba
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿