从Excel复制到Word并打印,代码每次打印时都会创建工作簿的副本

时间:2015-09-23 16:48:29

标签: excel vba excel-vba printing ms-word

下面发布的代码会创建一个工作簿的副本,其中包含for循环的每次迭代的宏。

代码将一些信息从一个工作表传输到名为“Ticket”的工作表。然后代码打开一个Word文件,其中包含页眉和页脚以及公司徽标的水印,将Excel工作表(“Ticket”)中的信息复制到带有水印的Word文档,然后打印Word文档。代码完成执行后,每张打印的票据,Book1,Book2,Book3等都会有一本新的Excel书(一本隐藏的书)(全部隐藏)。我不知道这些书在哪里被保存或如何阻止这种情况发生。

有人可以解释一下我做了什么吗?

componentDidMount

1 个答案:

答案 0 :(得分:0)

问题在于:

WdObj.Selection.PasteSpecial Link:=False, _
        DataType:=wdPasteText, Placement:=wdInLine, DisplayAsIcon:=False

这使用常量wdPasteTextwdInLine,这些常量未在Excel VBA中定义。实际上,您正在执行以下操作:

WdObj.Selection.PasteSpecial Link:=False, _
        DataType:="", Placement:="", DisplayAsIcon:=False

Excel范围的默认“粘贴特殊”模式显示为wdPasteOLEObject - 嵌入的Excel工作表。作为创建此过程的一部分,Word将创建一个新的Excel工作簿,其中包含粘贴的数据。这些是您看到的工作簿。如果打开Excel(打开VBA编辑器)并手动复制范围并将特殊/对象粘贴到Word中,您可以看到正在创建的临时工作簿,然后再次快速关闭。不幸的是,如果在某些代码运行时发生这种情况,似乎会发生各种奇怪的事情。我没有工作簿保持打开状态,但我已经随机停止了宏,文档和/或工作簿关闭,代码执行跳转到其他书籍中的宏等等。

由于您不想要嵌入的Excel对象,因此您可以轻松修复此问题 - 将wdPasteTextwdInLine替换为其数字值,即2和0:

WdObj.Selection.PasteSpecial Link:=False, _
        DataType:=2, Placement:=0, DisplayAsIcon:=False

最后,这是一个很好的例子,说明为什么你应该始终在代码的顶部设置Option Explicit。如果你有,你会得到一个"变量未定义" wdPasteTextwdInLine的错误,这会让您直接解决问题。