Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 引用文本内容控件_Vba_Ms Word - Fatal编程技术网

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语句,因此如果我编辑文本框内容,它会将其更改回原来的状态。到目前为止,您的方法没有这个问题,而且加载时间要快得多。非常感谢。