使用 Microsoft Word 365 VBA 代码从下拉内容控件选择创建包含内容控件的表格

问题描述 投票:0回答:1

当从下拉内容控件中进行选择时,我尝试插入具有多个内容控件的各种不同的表格。

我尝试了多种方法,但每次我按 Tab 键退出下一个内容控件的下拉内容控件时,我都会得到

运行时错误“4605”:此方法或属性不可用,因为当前选择部分覆盖了纯文本内容控件。

当我使用光标单击而不是单击内容控件时,不会出现此错误,然后代码会生成包含所有内容控件的表格。

我一直用代码来测试不同的想法。我计划在代码完成后保护此文档,以防止人们修改表单。

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
    
    If ContentControl.Tag = "ReturnType" Then
        
        Dim tbl As Table
        Dim rng As Range
        
        Select Case ContentControl.Range.Text
            Case "Selection 1"
                Set rng = ActiveDocument.Content.Paragraphs(3).Range
                Set tbl = rng.Tables.Add(rng, 3, 3)
                    tbl.cell(1, 2).Range.ContentControls.Add wdContentControlCheckBox
            Case "Selection 2"
                Set rng = ActiveDocument.Content.Paragraphs(3).Range
                Set tbl = rng.Tables.Add(rng, 2, 2)
            Case "Selection 3"
                Set rng = ActiveDocument.Content.Paragraphs(3).Range
                Set tbl = rng.Tables.Add(rng, 1, 1)
        End Select
    End If
End Sub

我尝试使用多个 If 语句、Select Case 语句并引用新的子语句来生成表。

vba ms-word contentcontrol word-contentcontrol
1个回答
1
投票

只需将 Selection 重置到您想要的位置,然后再尝试添加 ContentControl,就可以了。

                    tbl.cell(1, 2).Range.Select

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
    
    If ContentControl.Tag = "ReturnType" Then
        
        Dim tbl As Table
        Dim rng As Range
        
        Select Case ContentControl.Range.Text
            Case "Selection 1"
                Set rng = ActiveDocument.Content.Paragraphs(3).Range
                Set tbl = rng.Tables.Add(rng, 3, 3)
                    tbl.cell(1, 2).Range.Select
                    tbl.cell(1, 2).Range.ContentControls.Add wdContentControlCheckBox
            Case "Selection 2"
                Set rng = ActiveDocument.Content.Paragraphs(3).Range
                Set tbl = rng.Tables.Add(rng, 2, 2)
            Case "Selection 3"
                Set rng = ActiveDocument.Content.Paragraphs(3).Range
                Set tbl = rng.Tables.Add(rng, 1, 1)
        End Select
    End If
End Sub

© www.soinside.com 2019 - 2024. All rights reserved.