【发布时间】:2018-01-23 03:00:34
【问题描述】:
好的,我正在努力让这段代码按照我想要的方式工作。我有一个文档,我正在尝试设置一个宏来将复制的文本从源文档插入到目标文档的中间。我在那里放置了一个书签,我拥有的代码实际上会粘贴文本,但它总是将文本粘贴在书签的最开头。我需要能够多次运行此宏以在书签后插入多个段落。
源文档充满了段落,每个段落都在一个名为“B”的封闭书签内,然后是一个字母数字代码。我们试图填充的目标表单将需要这些段落中的 1 到 7 个。我不介意必须多次运行宏(虽然,如果有办法使用逗号分隔的输入框列表来循环,那会很好),但是宏现在运行的方式,它将段落放入反向顺序,这意味着如果我为第 1 段运行它,然后为第 2 段运行它,它会将它们排序为第 2 段,然后是第 1 段。我需要能够在第一个段落之后插入第二个(和后续)段落。
我尝试过使用 insertbefore 和 insertafter,但无法让它们工作。我尝试在原始书签之前添加一个新书签,然后将新书签用作文本的放置位置,但无法使该代码正常工作。在我希望段落插入的下方还有一个命令按钮 (1),所以如果可以将其用作插入点,那就太好了。但是我根本找不到任何东西,所以我去了书签路线。
Private Sub CommandButton1_Click()
Dim TarDoc As Document, SourDoc As Document
Dim aRng As Word.Range
Dim Mark As String, MarkB As String
Application.ScreenUpdating = False
Set SourDoc = Documents.Open("C:\Projects\SourceDocument.docx")
Set TarDoc = ThisDocument
Set aRng = TarDoc.Bookmarks("End").Range
Do
Mark = InputBox("100, 289, 981a...", "Enter Number and Letter as Shown")
If Len(Mark) Then ' do nothing if user enters nothing
MarkB = "B" & Mark
If SourDoc.Bookmarks.Exists(MarkB) Then
SourDoc.Bookmarks(MarkB).Range.Copy
aRng.PasteAndFormat (wdFormatOriginalFormatting)
Mark = vbNullString ' to enable exiting the loop
Else
MsgBox "Bookmark """ & Mark & """ doesn't exist.", vbInformation, _
"Invalid entry"
End If
End If
Loop While Len(Mark) ' the user entered a wrong mark
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
FWIW(与您的问题无关[老实说我什至没有读过问题])-
Mark = vbNullString可以替换为Exit Do,这可能是一种更直观的退出方式循环