Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 基于用户通过复选框选择生成Word文档的最佳方法是什么?_Vba_Ms Word - Fatal编程技术网

Vba 基于用户通过复选框选择生成Word文档的最佳方法是什么?

Vba 基于用户通过复选框选择生成Word文档的最佳方法是什么?,vba,ms-word,Vba,Ms Word,我正在尝试创建一个表单模板,以便在工作中使用,可以通过复选框进行自定义 到目前为止,我一直在考虑在每个段落之前添加复选框,并在最后添加一个按钮。 当我点击按钮时,我的意图是删除所有没有激活复选框的段落 问题是,我不知道哪种方法对用户最友好。 我正在考虑为每个段落制作书签,并为每个复选框使用IF公式。 最用户友好的复选框是内容控制复选框,但我不知道如何在VBA代码中引用它们 我能找到的只是表单字段复选框,但我不知道如何使它们可点击 在研究这两个选项之前,我感兴趣的是找出这两个选项中哪一个更适合满足

我正在尝试创建一个表单模板,以便在工作中使用,可以通过复选框进行自定义

到目前为止,我一直在考虑在每个段落之前添加复选框,并在最后添加一个按钮。 当我点击按钮时,我的意图是删除所有没有激活复选框的段落

问题是,我不知道哪种方法对用户最友好。 我正在考虑为每个段落制作书签,并为每个复选框使用IF公式。 最用户友好的复选框是内容控制复选框,但我不知道如何在VBA代码中引用它们

我能找到的只是表单字段复选框,但我不知道如何使它们可点击

在研究这两个选项之前,我感兴趣的是找出这两个选项中哪一个更适合满足我的需求


谢谢大家!

我已经做到了我想要的。 首先,我将内容控制复选框放在每个段落之前,并为每个段落设置了唯一的标记。 然后,对于每个复选框,我选择了段落,包括复选框,并添加了一个与复选框完全相同的书签。接下来,我只选中了复选框,并添加了一个书签名hide_nameofcheckbox

我添加了一个ActiveX按钮,单击时带有以下vba代码:

Private Sub btnSubmit_Click()
Dim bookmark As String
Dim ctl As ContentControl
    For Each ctl In ActiveDocument.ContentControls
        If ctl.Type = wdContentControlCheckBox Then
            If ctl.Checked = False Then
            bookmark = ctl.Tag
                 Bookmarks(bookmark).Range.Font.Hidden = True
                 Else
                 bookmark = "hide_" & ctl.Tag
                  Bookmarks(bookmark).Range.Font.Hidden = True

                 ' DO NOTHING
            End If
        End If
    Next
End Sub
基本上,当我单击Submit按钮时,代码会验证每个复选框的值True或False。如果选中,则隐藏复选框;如果未选中,则隐藏整个段落,包括复选框。
这样,在我单击“提交”按钮后,将看不到任何复选框,因此文档已准备好打印。

带有“定位内容”控件。如果我理解正确,您希望用户能够根据所选复选框删除段落。因此,您希望在每个段落上显示一个复选框,并允许选中或取消选中它。对我来说,这听起来像是快速的部分。您知道Microsoft Word的这一功能吗?如果您使用Mircosoft Word 2016,也有一个构建块管理器(用于快速部件)。也许值得一看这个功能:@BrunoBieri,我熟悉快速部件,我在工作中经常使用它们。我在考虑一个包含所有段落的模板。我希望用户只选择他使用的内容,然后文档将被删除未使用的段落。有了快速部分,你很容易忘记一个段落,你必须重复执行任务(单击“插入-每个段落的快速部分”),而在我的例子中,它会更快,用户在所有可用选项上都有一个glympse。我明白了。好的,在这种情况下,我建议您使用userform。我不确定你的模板是什么样子。我想您可以创建一个模板,并在用户需要选择的部分添加书签。在模板启动时,显示userform。在初始化该用户表单时,您可以访问所有书签,并将它们列在一个列表框中,并将“样式选项选择”和“多重选择”设置为“多重”。然后,您提供一个“确定”按钮,在那里您可以检查哪些框未被选中,并删除相关的书签。@brunobieri我实际上通过“内容控制”复选框做到了这一点。基本上,每个段落前面都有一个复选框。选中所需段落后,单击submit按钮,然后放入一个公式来隐藏所有与未选中复选框同名的书签。