首页 > 解决方案 > 改进 Word 中的 VBA 宏以自动创建与文档名称和位置相关的文件

问题描述

我目前正在使用宏将递增的文档编号添加到文档的页脚。问题是它使用全局“settings.txt”文件。

我想将此宏应用于许多文档,并且每个文档都有自己的递增数字记录。

我不是 VBA/宏写作的专业人士,所以我确实需要一些非常清晰的说明或复制和粘贴代码。

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

问题:

我的思考过程是:

If "document_name.txt" exists then do run macro

If "settings/document_name.txt" DOESN'T exists then do create document_name.txt in current open files location
and use current document name.

注意:我还在这个问题上开了一个赏金,让宏在用户正常点击打印后自动运行。目前他们必须手动运行宏来打印。

在打印 Word 文档之前运行宏

标签: vbams-word

解决方案


在这种情况下,您可以使用如下宏:

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
    .PrintOut
  Next
  .Save
End With
End Sub

再加上一个名为“计数器”的自定义文档属性,您最初将其值设置为 0。如果由于某种原因需要重新设置计数器,只需相应地编辑“计数器”自定义文档属性。

然后,无论您希望计数出现在何处,添加一个引用“计数器”属性的 DOCPROPERTY 字段。您可以通过 Insert|Quick Parts|Field 执行此操作,或按 Ctrl-F9 创建一对字段大括号(即“{}”)并在它们之间键入“DOCPROPERTY Counter”,这样您最终会得到“{DOCPROPERTY”柜台}'。您可以使用 DOCPROPERTY 字段中的数字图片开关将数字格式化为具有特定长度(例如 4 位)。在这种情况下,域代码将显示为“{DOCPROPERTY Counter # 0000}”。完成后,按 F9 更新字段。然后,您可以将该字段复制并粘贴到您可能希望它出现在文档中的任何其他位置。

如果您希望此应用的文档共享一个通用模板,但该模板也不用于其他文档,您可以简单地将宏添加到该模板;否则您可能需要将其添加到每个相关文档中,并将它们保存为docm 或doc 格式。


推荐阅读