VBScript 不会在特定单词之后将复制的 Excel 插入到 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的帮助文件很容易显示的那样。相反,你需要找到"结束"文本,然后粘贴。例如:

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

ExcelRange与WordRange是不同的动物。首先为每个变量声明变量,比如。。。

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中,范围是由文档中第一个和最后一个字符的位置定义的。如果该范围已命名,则称为书签。所以,如果你有一个名为"的书签;结束">那么正确的分配看起来像。。。

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

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

问题是你的xlRange不是文本。这是一个由16个Excel单元格组成的数组,每个单元格都具有许多属性。根据将此区域复制到Word的方式,可以强制将Excel单元格转换为Word表。请记住,Word表并不具有Excel表或Excel单元格数组的所有属性。它的结构不同,并不是所有的属性都可以转移,但你会得到一个表。

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

最新更新