
これはおそらく重複していると思いますが、適切な回答が見つからず、「すでに回答がある可能性のある質問」には Excel の回答のみが表示されます。
印刷された各文書にシリアル番号、つまり増分番号を付けて、印刷された文書を追跡したいと考えています。
目標は、マスターとなる 1 つのドキュメントとログを作成することです。
各ログに増分/一意の番号を付け、その一意の番号をマスター ドキュメントに書き込んで、対応するログを簡単に参照できるようにしたいと考えています。
複雑な VBA をいくつか見つけましたが、Word に VBA コードを追加する方法に慣れておらず、複雑に思えます。Word にはこのための組み込み関数があるのに、それを見逃しているのだと思いました。
フィールドを次のように表示します。
Doc #: 1
次回印刷するときにはフッターに表示されるはずです
Doc #: 2
などなど。
ありがとう、
追記: 現在使用しているのは Office 2013 です。
Word 文書のフッターにシリアル番号または増分番号を印刷する
https://stackoverflow.com/questions/48909968/word ドキュメントを印刷する前にマクロを実行する
答え1
Seem の VBA が最適な方法です。私の問題に適合し、機能するソリューションは 1 つしか見つかりませんでした。
方法1:(この方法では文書を移植できますが、文書ごとに一意の番号が付与されません)
シリアル番号付きドキュメントテンプレート.docm
まず、「Counter」という名前の「カスタム ドキュメント プロパティ」を作成し、初期値を 0 (または任意の値) に設定します。
印刷時に配置したい場所にドキュメントに挿入します (CTRL + F9)
このモジュールは、モジュールが呼び出されるたびに番号を 1 ずつ増加します。
Sub FilePrint()
Dim i As Long, j As Long
With ActiveDocument
j = CLng(InputBox("How many copies to print?", "Print Copies"))
For i = 1 To j
With .CustomDocumentProperties("Counter")
.Value = .Value + 1
End With
.Fields.Update
ActiveDocument.PrintOut Copies:=1
Next
.Save
End With
End Sub
- ここで、印刷時にこのサブを自動的に呼び出すように「EventClassModule」を変更しました。
Private Sub App_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
' MsgBox "Before Print"
' Call Greeting
' Call SerialNumber
Cancel = True
Call FilePrint
End Sub
方法2:(この方法では、シリアル番号を追跡するためにファイルを使用するため、複数の Word ドキュメントで同じ設定/更新ログを共有でき、各 Word ドキュメントに一意の番号が付けられるという利点があります)
私はここにあるこのガイドに従いました -->
https://wordmvp.com/FAQs/MacrosVBA/NumberCopiesOf1Doc.htm
もちろんサイトに掲載されているコードは間違っています...
問題は、次のコード スニペットが必要であることです。
' Display message, title, and default value.
Dim SerialNumber As String
NumCopies = Val(InputBox(Message, Title, Default))
SerialNumber = System.PrivateProfileString("C:\settings.txt", "MacroSettings", "SerialNumber")
Dim SerialNumber As String
ウェブサイトにない行に注意してください。この行がないと、この質問にあるエラーが発生します >>
https://stackoverflow.com/questions/48348049/vba-compile-error-expected-function-or-variable
後世のために、ここにガイドをコピーします。
また、もう 1 つ変更を加えた点に注意してください。サイトでは「settings.txt」の場所が 2 つ表示されますが、1 つは「Settings.Txt」で、もう 1 つは「Settings.txt」です。私は Linux ユーザーなので、大文字やスペースなどが将来的に混乱を招く可能性があることを知っているので、「settings.txt」に変更しました。
------------------------------------------------`
シリアル番号を表示するドキュメント内に、名前を付けたブックマークを作成しますSerialNumber
。番号を表示する場所がヘッダーまたはフッターであれば、そこに作成できます。次に、ドキュメントを印刷するための次のコマンドを含むマクロを作成します。
作成するコピーの数を尋ねられ、各コピーに順番に番号が付けられます。このマクロを初めて実行したとき、最初のコピーに 1 という番号が付けられ、実行が終了すると、最後のコピーの番号に 1 つを加えた番号が Settings.Txt ファイルに保存されます。次にマクロを実行すると、その番号からコピーの番号付けが開始されます。最初に開始したときに番号を 1 以外の番号から開始したい場合は、マクロを実行し、コピーの数として 1 を入力してから、Settings.Txt ファイルを開いて、ファイル内の番号をシリーズの最初の番号に置き換えます。その後いつでも、シリーズを特定の番号から開始したい場合は、そのファイルを開いて、ファイル内の番号をシリーズの最初の番号に置き換えることができます。
Sub SerialNumber()
'
' SerialNumber Macro
'
'
Dim Message As String, Title As String, Default As String, NumCopies As Long
Dim Rng1 As Range
' Set prompt.
Message = "Enter the number of copies that you want to print"
' Set title.
Title = "Print"
' Set default.
Default = "1"
' Display message, title, and default value.
Dim SerialNumber As String
NumCopies = Val(InputBox(Message, Title, Default))
SerialNumber = System.PrivateProfileString("W:\settings.txt", _
"MacroSettings", "SerialNumber")
If SerialNumber = "" Then
SerialNumber = 1
End If
Set Rng1 = ActiveDocument.Bookmarks("SerialNumber").Range
Counter = 0
While Counter < NumCopies
Rng1.Delete
Rng1.Text = SerialNumber
ActiveDocument.PrintOut
SerialNumber = SerialNumber + 1
Counter = Counter + 1
Wend
'Save the next number back to the Settings.txt file ready for the next use.
System.PrivateProfileString("W:\settings.txt", "MacroSettings", _
"SerialNumber") = SerialNumber
'Recreate the bookmark ready for the next use.
With ActiveDocument.Bookmarks
.Add Name:="SerialNumber", Range:=Rng1
End With
End Sub
注: 「settings.txt」の場所を LAN の優先場所に変更できます (変更する必要があります)。
settings.txt
[MacroSettings]
SerialNumber=1