Vba 引用文本内容控件
我试图引用指定的字符串并将其粘贴到特定的文本内容控件中,但无法正确执行此操作 基本上,我经历并尝试了一些不同的事情,首先是这个Vba 引用文本内容控件,vba,ms-word,Vba,Ms Word,我试图引用指定的字符串并将其粘贴到特定的文本内容控件中,但无法正确执行此操作 基本上,我经历并尝试了一些不同的事情,首先是这个 Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean) Dim ccs As ContentControls, cc As ContentControl Set ccs = ActiveDocument.ContentCon
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
Dim ccs As ContentControls, cc As ContentControl
Set ccs = ActiveDocument.ContentControls
For Each cc In ccs
If cc.Title = "ComboBox1" And cc.Range.Text = "Choose an item." Then
SelectContentControlsByTitle("TextBox1").Add.SetPlaceholderText , , "Please make a drop down selection or manually fill out if not applicable"
上述方法不起作用,因为每次我退出content controller组合框时,它实际上会多次重新创建“占位符文本”。我需要这个来填充“TextBox1”内容控件
我也试过这样做
Dim ccs As ContentControls, cc As ContentControl
Set ccs = ActiveDocument.ContentControls
Set CB1 = SelectContentControlsByTitle("TextBox1")
For Each cc In ccs
If cc.Title = "ComboBox1" And cc.Range.Text = "Choose an item." Then
CB1.Value = "Please make a drop down selection or manually fill out if not applicable"
由于类型的原因,值不能像这样使用。这也不起作用。下面是我用Active-X文本框做我想做的事情的原始方式,它确实有效
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
Dim ccs As ContentControls, cc As ContentControl
Set ccs = ActiveDocument.ContentControls
For Each cc In ccs
If cc.Title = "ComboBox2" And cc.Range.Text = "Choose an item." Then
TextBox2.Value = "Please make a drop down selection or manually fill out if not applicable"
ElseIf cc.Title = "ComboBox2" And cc.Range.Text = "TMS backup" Then
TextBox2.Value = "The TMS installation directory, settings directory and the database was backed up before the update was performed"
ElseIf cc.Title = "ComboBox2" And cc.Range.Text = "TMS installation" Then
TextBox2.Value = "Installation of version 1.17.X.19XXX performed"
ElseIf cc.Title = "ComboBox2" And cc.Range.Text = "TMS update" Then
TextBox2.Value = "Update from version 1.16.X.XXXXX to version 1.17.X.19XXX performed"
ElseIf cc.Title = "ComboBox2" And cc.Range.Text = "Tool presetter update" Then
TextBox2.Value = "Update from version 1.16.X.XXXXX to version 1.17.X.19XXX performed"
ElseIf cc.Title = "ComboBox2" And cc.Range.Text = "Database generated" Then
TextBox2.Value = "Database structure created with version 1.17.0"
在使用文本内容控件时,如何执行上述操作 尝试以下设置文本框文本:
Sub SetContentcontrolText()
Dim oRange As Range
Dim cc As ContentControl
For Each cc In ActiveDocument.ContentControls
If cc.Title = "ComboBox1" And cc.Range.Text = "Choose an item." Then
Set oRange = ActiveDocument.SelectContentControlsByTitle("TextBox1")(1).Range
oRange.Text = "Please make a drop down selection or manually fill out if not applicable"
End If
Next
End Sub
请尝试以下设置文本框文本:
Sub SetContentcontrolText()
Dim oRange As Range
Dim cc As ContentControl
For Each cc In ActiveDocument.ContentControls
If cc.Title = "ComboBox1" And cc.Range.Text = "Choose an item." Then
Set oRange = ActiveDocument.SelectContentControlsByTitle("TextBox1")(1).Range
oRange.Text = "Please make a drop down selection or manually fill out if not applicable"
End If
Next
End Sub
更好的办法是:
Private Sub Document_ContentControlOnExit(ByVal Ctrl As ContentControl, Cancel As Boolean)
Dim i As Long, StrDetails As String
With Ctrl
If .Title = "ComboBox1" Then
If ShowingPlaceholderText = True Then
StrDetails = ""
Else
For i = 1 To .DropdownListEntries.Count
If .DropdownListEntries(i).Text = .Range.Text Then
StrDetails = .DropdownListEntries(i).Value
Exit For
End If
Next
End If
ActiveDocument.SelectContentControlsByTitle("TextBox1")(1).Range.Text = StrDetails
End If
End With
End Sub
要实现这一点,只需将“条件”文本添加到每个条目的“值”属性中,并使“TextBox1”内容控件的占位符文本符合您的要求。这样,您就不必在VBA代码中硬编码下拉选项或“条件”文本。有关实际演示,请参见:
PS:您确实应该摆脱默认的ActiveX命名约定,为内容控件提供有意义的标题。更好的方法是:
Private Sub Document_ContentControlOnExit(ByVal Ctrl As ContentControl, Cancel As Boolean)
Dim i As Long, StrDetails As String
With Ctrl
If .Title = "ComboBox1" Then
If ShowingPlaceholderText = True Then
StrDetails = ""
Else
For i = 1 To .DropdownListEntries.Count
If .DropdownListEntries(i).Text = .Range.Text Then
StrDetails = .DropdownListEntries(i).Value
Exit For
End If
Next
End If
ActiveDocument.SelectContentControlsByTitle("TextBox1")(1).Range.Text = StrDetails
End If
End With
End Sub
要实现这一点,只需将“条件”文本添加到每个条目的“值”属性中,并使“TextBox1”内容控件的占位符文本符合您的要求。这样,您就不必在VBA代码中硬编码下拉选项或“条件”文本。有关实际演示,请参见:
PS:您真的应该摆脱默认的ActiveX命名约定,为内容控件提供有意义的标题。这非常有效。非常感谢你的帮助!这太奇怪了,因为我甚至尝试过用.Text方法做类似的事情,但都没能让它工作。再次感谢!这很好用。非常感谢你的帮助!这太奇怪了,因为我甚至尝试过用.Text方法做类似的事情,但都没能让它工作。再次感谢!谢谢你。我很高兴你发布了这篇文章,因为我认为我已经完成了,但是当我进行测试时,我发现我当前的代码没有EndIf语句,因此如果我编辑文本框内容,它会将其更改回原来的状态。到目前为止,您的方法没有这个问题,而且加载时间要快得多。非常感谢。谢谢你。我很高兴你发布了这篇文章,因为我认为我已经完成了,但是当我进行测试时,我发现我当前的代码没有EndIf语句,因此如果我编辑文本框内容,它会将其更改回原来的状态。到目前为止,您的方法没有这个问题,而且加载时间要快得多。非常感谢。