使用VBA将文本添加到文档中的特定文本框

时间:2013-09-23 10:33:13

标签: vba ms-word word-vba

有没有办法在MS Word中命名文本框,以便我可以在vba中调用它们并向它们添加文本?​​例如,我有一个用户表单从用户获取一些数据。在对此数据进行一些计算之后,我想在文本框或方程中显示文档的结果...... 就像,在Visual Basic中我们有:

textbox1.text="My Text Goes Here"

我们在VBA中有类似的东西吗?喜欢:

ActiveDocument.textboxname.text="My Text"?!!

我不想为此使用activeX控件。

2 个答案:

答案 0 :(得分:4)

在Word和PowerPoint中,您只能使用VBA为形状指定名称(与Excel相反,您可以在公式栏中执行此操作)。

Word不强制形状具有唯一名称,因此可以有两个名为Text Box 2的形状。您也可以通过ActiveDocument.Shapes集合中的索引位置来引用形状。

一旦确定了您需要使用的Shape,那么您可以简单地操纵.TextFrame.TextRange.Text属性:

Sub Test()
Dim shp As Shape
Dim str As String

For Each shp In ActiveDocument.Shapes
    str = "My name is " & shp.Name
    str = str & vbNewLine & "My EditID is " & shp.EditID
    shp.TextFrame.TextRange.Text = str
Next
End Sub

您可能考虑的另一件事是为每个形状添加AlternativeText属性。当然,这并不能解决“非唯一性”问题,但您可以使用此(或CustomerData/CustomXMLParts将一些元数据分配给形状,作为识别和区分它们的进一步方法

答案 1 :(得分:2)

如何利用CC几乎没有可能,但在我看来,最好的选择是将每个经过验证的段落包装成CC。

Dim par As Paragraph

'set reference to appropriate paragraph
Set par = ActiveDocument.Paragraphs(2)

Dim cc As ContentControl
Set cc = ActiveDocument.ContentControls.Add( _
            wdContentControlRichText, par.Range)

cc.Tag = "VERIFIED"

'options
'disable deletion of CC
cc.LockContentControl = True

'disable edition of CC
cc.LockContents = True