vba字变量值删除
vba word variables value delete
有一个 MS Word 2016 文档,其中设置了 DOCVARIABLES。例如:
{ DOCVARIABLE "SerialNumber" \* MERGEFORMAT }
我需要通过 VBA 使用 InputBox 填写此 DOCVARIABLE。 VBA代码:
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
当文档打开时,它会自动提示输入用户数据。输入数据后,它会填充到文档中的 DOCVARIABLES 中。但是如果我再次 运行 代码(当 DOCVARIABLES 已经存储数据时)它会给我一个错误:运行-Time Error "5903": The Variable name already exists。
问题是如何修复它并使 DOCVARIABLES 可更新。
这是 Cindy Meister 提供的解决方案,但引入了数组:
Sub Document_Open()
Dim sNumber As String, mNumber As String, iDate As String, i As Integer
Dim varData(1 To 3) As String
varData(1) = "SerialNumber"
varData(2) = "ModelNumber"
varData(3) = "IssueDate"
Dim varInput(1 To 3) As String
varInput(1) = InputBox("Please enter the Serial Number", "Serial number", "Enter the Serial Number here")
varInput(2) = InputBox("Please enter the Model Number", "Model number", "Enter the Model Number here")
varInput(3) = InputBox("Please enter the Date of Issue, dd.mm.yyyy", "Date of Issue", "Enter the Date of Issue here")
For i = 1 To 3
With ActiveDocument
If DocVarExists(varData(i), ActiveDocument) Then
.Variables(varData(i)).Value = varInput(i)
Else
.Variables.Add Name:=varData(i), Value:=varInput(i)
End If
.Fields.Update
End With
Next i
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
使用文档 Variables
你有两种可能性。
"simple"一种是简单的赋值。根本不需要使用 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
对象的评论,供阅读本文但不熟悉它们的任何人使用:一旦分配了 emtpy(零长度)字符串,Variable
对象就会被删除,不再在文档中可用。
有一个 MS Word 2016 文档,其中设置了 DOCVARIABLES。例如:
{ DOCVARIABLE "SerialNumber" \* MERGEFORMAT }
我需要通过 VBA 使用 InputBox 填写此 DOCVARIABLE。 VBA代码:
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
当文档打开时,它会自动提示输入用户数据。输入数据后,它会填充到文档中的 DOCVARIABLES 中。但是如果我再次 运行 代码(当 DOCVARIABLES 已经存储数据时)它会给我一个错误:运行-Time Error "5903": The Variable name already exists。
问题是如何修复它并使 DOCVARIABLES 可更新。
这是 Cindy Meister 提供的解决方案,但引入了数组:
Sub Document_Open()
Dim sNumber As String, mNumber As String, iDate As String, i As Integer
Dim varData(1 To 3) As String
varData(1) = "SerialNumber"
varData(2) = "ModelNumber"
varData(3) = "IssueDate"
Dim varInput(1 To 3) As String
varInput(1) = InputBox("Please enter the Serial Number", "Serial number", "Enter the Serial Number here")
varInput(2) = InputBox("Please enter the Model Number", "Model number", "Enter the Model Number here")
varInput(3) = InputBox("Please enter the Date of Issue, dd.mm.yyyy", "Date of Issue", "Enter the Date of Issue here")
For i = 1 To 3
With ActiveDocument
If DocVarExists(varData(i), ActiveDocument) Then
.Variables(varData(i)).Value = varInput(i)
Else
.Variables.Add Name:=varData(i), Value:=varInput(i)
End If
.Fields.Update
End With
Next i
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
使用文档 Variables
你有两种可能性。
"simple"一种是简单的赋值。根本不需要使用 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
对象的评论,供阅读本文但不熟悉它们的任何人使用:一旦分配了 emtpy(零长度)字符串,Variable
对象就会被删除,不再在文档中可用。