vba - 改进 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
问题:
- 如何将其转换为使用文档名称作为“settings.txt”文件
如何将其转换为自动将“settings.txt”文件保存在与文档位置相同的位置。(我不是 100% 确定,但我认为我必须手动创建 setting.txt,我希望创建是自动的)
如果我以错误的方式进行此操作,请告诉我
我的思考过程是:
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.
注意:我还在这个问题上开了一个赏金,让宏在用户正常点击打印后自动运行。目前他们必须手动运行宏来打印。
解决方案
在这种情况下,您可以使用如下宏:
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 格式。
推荐阅读
- javascript - JSLink 到 SharePoint 列表中的超链接列
- mongodb - 在MongoDB中查找子文档中两个条件为真的所有文档
- javascript - 剑道 TabStrip 和传单地图
- tsql - 对于查询中的某些条件,如何将字段值更改为 null?
- html - 网格布局有问题。块从它们的继承块中脱落
- javascript - 活动链接适用于嵌套路由但不适用于单个路由
- php - 如何在 Laravel 中使用文件夹 App\Http\Controllers 外的控制器?
- javascript - 带条件插值的管道
- javascript - 将异步值存储在局部变量中并将其显示在模板中的角度方式
- php - preg_replace 正负和 0