首页 > 解决方案 > VBA Word - InsertFile 更改书签的样式(字体、大小...)并添加新行

问题描述

我正在尝试用 VBA 中的纯文本文件填充 Word 文档。这是我所拥有的:

  1. Word 文档中有带有默认文本的书签(这有助于我确保所有书签都被替换)
  2. 以下 VBA 完成了在书签中插入 txt 文件中的内容的工作
strt = bookmark.Range.Start
bookmark.Select
Selection.InsertFile Filename:=Filename, ConfirmConversions:=False, Link:=False, Attachment:=False
Selection.Bookmarks.Add Name:=bookmarkname, Range:=ActiveDocument.Range(strt, Selection.Range.End)

主要问题是,在我运行 VBA 之后,字体名称、字体大小、项目符号点(如果有的话)......都更改为不同的内容(Courier New 10,5pts)。如果修改了文本文件,我会重新创建书签以便能够多次运行宏。

我找到了一个丑陋的(恕我直言)解决方案:

  1. 保存样式名称并在插入文件之后应用它。对于要点,应用样式不会设置正确的字体和大小,因此最后两行
strt = bookmark.Range.Start
bookmark.Select
myStyle = (Selection.Style)
Selection.InsertFile Filename:=Filename, ConfirmConversions:=False, Link:=False, Attachment:=False
Selection.Bookmarks.Add Name:=bookmarkname, Range:=ActiveDocument.Range(strt, Selection.Range.End)
ActiveDocument.Range(strt, Selection.Range.End).Style = myStyle
ActiveDocument.Range(strt, Selection.Range.End).Font.Name = "Calibri"
ActiveDocument.Range(strt, Selection.Range.End).Font.Size = 11

你有什么想法可以做一些更“专业”的事情吗?

另一个问题是即使文件末尾没有新行,插入文件也总是在末尾添加新行。有什么想法可以防止它或至少在插入后将其移除?

感谢您有任何帮助我的想法!

标签: vbams-word

解决方案


纯文本文件没有样式。它们将采用应用于您插入文件的选择的任何样式。创建一个看起来像您希望最终文本看起来的样式,将其应用于接收文档,然后重新运行您的代码。

尝试摆脱对选择对象进行编程的习惯。它缓慢且不可靠。范围比选择更好。这是微软对 Ranges 的介绍:Working with Range Objects

您可以使用 Range.Text 插入文本,而不是使用 InsertFile:

Sub Text2Doc()
    Dim iFreeFileNum As Integer
    Dim strPath As String
    Dim strFileContent As String

    strPath = "C:\Test.txt"
    'Get the next file number available for use by the FileOpen function
    iFreeFileNum = FreeFile
    Open strPath For Input As iFreeFileNum
    strFileContent = Input(LOF(iFreeFileNum), iFreeFileNum)
    ActiveDocument.Bookmarks("BookmarkName").Range.Text = strFileContent
    Close iFreeFileNum
End Sub

不会添加尾随段落标记。


推荐阅读