微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 MS Word 中使用宏清除书签数据

如何解决如何在 MS Word 中使用宏清除书签数据

我正在尝试使用宏从 excel 更新 ms word 中的数据。为了简化过程,我使用了书签功能。问题是当我运行代码时,书签中的数据被复制,我在 ms word 中多次看到来自 excel 的相同数据点。在粘贴新数据之前,我试图找出如何清除存储在书签中的数据的解决方案,但问题似乎没有解决

-------------------代码----------------------------

Option Explicit
Const FilePath As String = "C:\Users\Prablee.Singh\Desktop\"
Dim wd As New Word.Application


Sub ExporttoWord()

Dim doc As Word.Document
wd.Visible = True

Dim Model_Name As String
Dim Model_Description As String
Dim Model_Status As String


Model_Name = ThisWorkbook.Sheets(2).Range("A2").Value   'value from sheet1
Model_Description = ThisWorkbook.Sheets(2).Range("B2").Value
Model_Status = ThisWorkbook.Sheets(2).Range("C2").Value

Set doc = wd.Documents.Open(FilePath & "VBA Code Doc.docx")
copy2word "Project1",Model_Name
copy2word "Project1Description",Model_Description
copy2word "Project1Status",Model_Status


doc.Close

wd.Quit


End Sub


Sub copy2word(BookMarkName As String,Text2Type As String)

wd.Selection.GoTo What:=wdGoToBookmark,Name:=BookMarkName
wd.Selection.TypeText Text2Type
End Sub

解决方法

如果我错了,请纠正我。您想插入文本来替换旧书签吗?您的书签是标记为范围还是只是位置?您可以使用此示例替换整个书签文本:

Dim BookmarkRange As Range
Set BookmarkRange = ActiveDocument.Bookmarks("myBookmarkRange").Range
BookmarkRange.Text = "this text will replace the old one."
,

这个问题很可能是因为书签只是在文档中标记了一个位置,如下面截图的顶部示例所示,而不是包含文本。

enter image description here

要查看书签,请转到文件 |选项 |高级 |显示文档内容并勾选“显示书签”选项。

将文本插入封闭书签时,书签会被删除并需要替换。这可以通过使用如下例程来完成,该例程还检查书签是否存在以避免错误。

Public Sub InsertIntoBookmark(bookmarkName As String,text As String,_
   Optional targetDoc As Document = Nothing)
   Dim bookmarkRange As Range

   If targetDoc Is Nothing Then Set targetDoc = ActiveDocument

   If targetDoc.Bookmarks.Exists(bookmarkName) Then
      Set bookmarkRange = targetDoc.Bookmarks(bookmarkName).Range
      bookmarkRange.text = text
      targetDoc.Bookmarks.Add bookmarkName,bookmarkRange
   End If
   
End Sub
,

由于文本,正如您所说的那样是重复的,这表明您的书签是文档中的一个点,而不是跨度范围。结果是在书签后面添加文本并将书签留在原处。如果您的书签是现有文本的跨越范围,则 Word 会替换该文本,但也会删除书签。

无论哪种方式,您的代码都必须重新建立书签……除非您想在将新数据放入文档后删除书签。

试试这个代码...

Dim rng As Word.Range
Set rng = doc.Bookmarks("BookMarkName").Range
rng.Text = "Project Name"
doc.Bookmarks.Add "BookMarkName",rng

正如我上面试图解释的那样,如果您的 Word 文档在 BookMarkName 中有一个“临时名称”的占位符,则上面的代码会将其替换为“项目名称”,然后重新建立围绕“项​​目名称”的 BookMareName。如果你没有重新建立BookMarkName,那么就省略最后一行。

如果在您现有的文档中 BookMarkName 是单个地址点而不是一个文本跨度,上面的代码仍将添加新文本,但它也会将 BookMarkName 范围重新定位到新的文本跨度。这里的区别在于,如果您不希望在插入新文本后保留 BookMarkName,则必须将最后一行代码替换为 ...

doc.Bookmarks(BookMarkName).Delete

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。