打开表单后,如何在Word文档的末尾添加子域

  • 本文关键字:文档 添加 Word 表单 vba ms-word
  • 更新时间 :
  • 英文 :


我正试图编写一个宏,在打开Word文档时将子文档添加到Word文档的末尾。有问题的文档中已经有一些文本,所以在运行宏之前,我想将光标移动到文档的末尾。我可以用代码Selection.EndKey Unit:=wdStory实现这一点,当我在打开文档后运行宏时,它运行良好,但如果我使用Sub:在打开文档后立即运行宏

Private Sub Document_Open()
Selection.EndKey Unit:=wdStory
'Add subdocuments based on user input to a form
'(See edit below)
End Sub

在ThisDocument对象中,子文档添加在文档的开头。这可能是因为光标尚未出现,所以Selection还不"存在"。

如何在打开文档时运行宏,但在文档末尾添加子文档?

我试着先写一个空格,让光标产生,但没有改变。。。

也欢迎对替代方法提出任何建议。

编辑:此文档中的此代码:

Private Sub Document_Open()
CreateWorkbook.Show
End Sub

调用表单CreateWorkbook,用按钮点击sub:

Private Sub GenerateButton_Click()
Dim i As Integer
Dim rng As Word.Range
Set rng = ActiveDocument.Content
rng.Collapse wdCollapseEnd
'ModulesListBox is a user input box that is a list of paths to the subdocuments
For i = 0 To ModulesListBox.ListCount - 1
docpath = ModulesListBox.List(i)
rng.Subdocuments.AddFromFile docpath
Next i
End Sub

由于Document_Open事件首先调用UserForm,Word确实需要一个访问文档的机会。以下内容在我的测试中有效。

'ThisDocument code:
Option Explicit
Private Sub Document_Open()
Dim f As UserForm1
Set f = New UserForm1
Set f.rng = ThisDocument.Content
f.Show
End Sub

请注意用户窗体是如何声明为对象的-UserForm实际上是一个(与ThisDocument相同(,但VBA允许您处理它,而无需专门将其编码为类。通常,这是有效的,但并不总是有效的。因此,对象被声明,并且UserForm类的新实例被分配给它。

Range在UserForm类中声明为类级别的公共成员。它设置为"打开"事件中文档的正文。

然后显示用户表单,代码如下。

此时,Range对象是可访问的,并且可以对其进行实际操作。也就是说,Subdocuments.AddFromFile似乎依赖于一个选择,就像它依赖于在大纲视图中一样。这可能是,因为该功能可以追溯到旧的WordBasic时代,并且从未更改以遵守VBA原则。

'Code in the UserForm
Option Explicit
Public rng As Word.Range
Private Sub CommandButton1_Click()
Me.rng.Collapse 0
'rng.Text = "Test text"
ThisDocument.ActiveWindow.View = wdOutlineView
Me.rng.Select
Selection.Range.Subdocuments.AddFromFile ("C:TestCCRanges.docx")
Application.ScreenRefresh
End Sub

最新更新