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 类型
我试图在特定单词后插入复制的 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
.