其中有一个MS Word 2016文档,其中设置了DOCVARIABLES。例如:
sum
我需要使用InputBox通过VBA填写此DOCVARIABLE。 VBA代码:
{ DOCVARIABLE "SerialNumber" \* MERGEFORMAT }
打开文档后,它会自动提示输入用户数据。输入数据后,它将被填充到文档中的DOCVARIABLES中。但是,如果我再次运行代码(当DOCVARIABLES已经存储数据时),则会给我一个错误:运行时错误“ 5903”:变量名称已存在。
问题是如何修复它并使DOCVARIABLES可更新。
这是Cindy Meister提供的解决方案,但引入了array:
Sub Document_Open()
Dim sNumber, mNumber, iDate As String
sNumber = InputBox("Please enter the Serial Number", "Serial number", "Enter
the Serial Number here")
mNumber = InputBox("Please enter the Model Number", "Model number", "Enter
the Model Number here")
iDate = InputBox("Please enter the Date of Issue, dd.mm.yyyy", "Date of
Issue", "Enter the Date of Issue here")
With ActiveDocument
.Variables.Add Name:="SerialNumber", Value:=sNumber
.Variables.Add Name:="ModelNumber", Value:=mNumber
.Variables.Add Name:="IssueDate", Value:=iDate
.Fields.Update
End With
End Sub
答案 0 :(得分:0)
使用文档Variables
,您有两种可能。
“简单”是简单地分配值。根本不需要使用Add
方法。因此,无论文档中是否存在Variable
,您都只需要一行代码:
ActiveDocument.Variables("name").Value = "new value"
(注意:Variables
起源于Word Basic较早的年代,那里的事物正式程度远不及它们变得正式。相反,CustomDocumentProperty
需要一种Add
方法-该对象是在VBA时代引入的。)
如果您希望事情做得非常正确,那么您需要遍历Variables
集合以找出它是否已经存在,并且仅添加它。我为此粘贴了一个小功能,并在您的代码中对其进行了调用。 (为了简化函数调用,我只编辑了一个Variable
。)
Sub Document_Open()
Dim sNumber as String, mNumber As String, iDate As String
sNumber = InputBox("Please enter the Serial Number", "Serial number", _
"Enter the Serial Number here")
With ActiveDocument
If DocVarExists("SerialNumber", ActiveDocument) Then
.Variables("SerialNumber").Value = sNumber
Else
.Variables.Add Name:="SerialNumber", Value:=sNumber
End If
.Fields.Update
End With
End Sub
Function DocVarExists(sVarName As String, doc As Word.Document) As Boolean
Dim var As Word.Variable, bExists As Boolean
bExists = False
For Each var In doc.Variables
If var.Name = sVarName Then
bExists = True
Exit For
End If
Next
DocVarExists = bExists
End Function
(注意:这是CustomDocumentProperties
的必需方法。)
对于不熟悉它们的任何人,只需对Variable
对象做一句话:一旦分配了空值(零长度)字符串,Variable
对象就会被删除,并且在文档。