VBA字变量值删除

时间:2018-07-05 05:11:52

标签: vba ms-word docvariable

其中有一个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

1 个答案:

答案 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对象就会被删除,并且在文档。