VBScript 不会在特定单词后将复制的 Excel 插入到 Word 中

VBScript Doesn't insert copied Excel into Word after specific word

我试图在特定单词后插入复制的 Excel 部分。 不幸的是,它不起作用。

        Set ObjXl = CreateObject("Excel.Application")
        Set ObjWkBk = ObjXl.Workbooks.Open("C:\test.xlsx")
        
        Set ObjWd = CreateObject("Word.Application")
        Set ObjDoc = ObjWd.Documents.Open("C:\test.docx")
        
        ObjWkBk.Worksheets("Sheet1").Range("A1:D4").Copy

        #############Here I have Problems############
        ObjDoc.Range.InsertAfter("Ending").Paste
        #############################################

        ObjDoc.SaveAs ("C:\test1.docx")
        
        ObjDoc.Close: ObjWd.Quit: ObjWkBk.Close: ObjXl.Quit
        Set ObjDoc = Nothing: Set ObjWd = Nothing: Set ObjWkBk = Nothing: Set ObjXl = Nothing

你能帮忙吗?

您不能那样使用 .InsertAfter - Word 的帮助文件很容易显示。相反,您需要找到 'Ending' 文本,然后粘贴。例如:

With ObjDoc
  With .Range
    .Find.Execute "Ending", True, True, False, , , True, 0
    .Collapse 0
    .Paste
  End With
  .SaveAs ("C:\test1.docx")
  .Close
End With

An Excel Range 与 Word Range 是不同的动物。首先为每个变量声明变量,例如 ...

Dim xlRange as Excel.Range
Dim wdRange as Word.Range

现在您可以将 Excel 范围分配给 xlRange

Set xlRange =  ObjWkBk.Worksheets("Sheet1").Range("A1:D4")

你也可以对你的单词范围做同样的事情。

Set wdRange = ObjDoc.Range("Ending")

您可能会看到这看起来不对,启用此判断是本练习的目的。在 Word 中,范围由其第一个和最后一个字符在文档中的位置定义。如果范围已命名,则称为 Bookmark。因此,如果您有一个名为 "Ending" 的书签,那么正确的分配应该是 ...

Set wdRange = ObjDoc.Bookmarks("Ending").Range

假设此范围包含字符 1111 和 1122 之间的文本,然后将该范围折叠到其末尾将创建 Range(1122, 1123),此时您可以插入 text (因为它是 Word 文档)通过多种方法。

问题是您的 xlRange 不是文本。它是一个包含 16 Excel 个单元格的数组,每个单元格都具有许多属性。根据您将此范围复制到 Word 的方式,您可以强制将 Excel 个单元格转换为 Word table。请记住,Word table 不具有 Excel table 或 Excel 单元格数组的所有属性。它的结构不同,并非所有属性都可以转让,但您会得到 table.

另一方面,如果您打算从 xlRange 中获取文本并将其作为文本插入到 Word 中,那么您必须首先从每个单元格中提取文本,创建一个字符串,然后将该字符串粘贴到 Word 文档中由 wdRange 定义的位置。在这方面,值得注意的是 VBA Strings 是可以互换的。您可以通过从 Excel 单元格中提取文本并将相同的字符串粘贴到 Word 文档来创建字符串,而不必担心 Excel 和 Strings.

的 Word 类型