[英]Access VBA - Problems looping through fields in Access last record and exporting to Word bookmarks?
[英]Word VBA - Looping through bookmarks with a condition
我对 VBA 很陌生,所以非常感谢任何帮助。
我正在尝试构建一个实现以下功能的宏:
运行时打开用户表单
用户表单要求用户将不同的主题分类为“适用”或“不适用”
对每个主题进行分类后,宏会将所有“不适用”主题移动到文档中的“不适用”部分
默认情况下,分类为“适用”
每个主题都设置为自己的书签。 我被困在代码的 For each / next 部分。 到目前为止我有这个:
Sub CleanUp()
Dim doc As Document
Dim book As Bookmark
For Each book In ActiveDocument.Range.Bookmarks
If book = "Applicable" Then
Selection.GoTo what;= wdgotobookmark, which:= book
Selection.Cut
Selection.GoTo what:=wdGoToBookmark, Name:="PASTE_HERE"
Selection.PasteAndFormat (wdFormatOriginalFormatting)
Next book
end sub
两个初步问题:
如何使用选项按钮为每个主题设置一个值? 我什至可以使用这样的用户表单吗? 大约有 50 个主题,所以我不确定是否需要为每个主题设置一个变量。
Private Sub OptionButton2_Click() Set book = "Applicable" End Sub
如果我确实需要为每个主题/书签创建一个变量,使用 for/next 循环是否更好? 这样我就可以将变量名设置为等于计数器? 例如topic1、topic2、topic3等?
更好的方法(恕我直言)是使用文档变量,其状态可以通过文档中的 IF 字段进行测试,这样,根据测试结果,内容将显示在“适用”或“不适用”部分中,如合适的。
例如,假设您创建了一个名为“Topic1”的文档变量,其值可以是 1 或 0。在:
“适用”部分,您将有一个 IF 字段编码为:
{IF{DOCVARIABLE Topic1}= 1“要显示的内容”}
“不适用”部分,您将有一个 IF 字段编码为:
{IF{DOCVARIABLE Topic1}= 0“要显示的内容”}
其中“要显示的内容”在每个字段中都相同。 为了简化处理,您可能只在“适用”部分创建字段,然后将它们复制到“不适用”部分并将 1 更改为 0。
如果使用复选框来指示给定主题是否适用,则宏代码可以像这样简单:
Private Sub CommandButton1_Click()
Dim Ctrl As Control: Const CtrlType As String = "CheckBox"
For Each Ctrl In UserForm1.Controls
If TypeName(Ctrl) = CtrlType Then
With Ctrl
If .Caption Like "Topic#*" Then
ActiveDocument.Variables(.Name).Value = .Value ^ 2
End If
End With
End If
Next
ActiveDocument.Fields.Update
End Sub
注意:上述示例的字段大括号对(即“{}”)都是在文档本身中创建的,通过 Ctrl-F9(Mac 上的 Cmd-F9,或者,如果您使用的是笔记本电脑,您可能需要使用 Ctrl-Fn-F9); 您不能简单地键入它们或从该消息中复制和粘贴它们。 通过任何标准 Word 对话添加它们也不切实际。 字段结构中表示的空格都是必需的。
有关使用文档变量的更多信息,请参阅: https : //support.microsoft.com/en-us/help/306281/how-to-store-and-retrieve-variables-in-word-documents
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.