下面发布的代码会创建一个工作簿的副本,其中包含for循环的每次迭代的宏。
代码将一些信息从一个工作表传输到名为“Ticket”的工作表。然后代码打开一个Word文件,其中包含页眉和页脚以及公司徽标的水印,将Excel工作表(“Ticket”)中的信息复制到带有水印的Word文档,然后打印Word文档。代码完成执行后,每张打印的票据,Book1,Book2,Book3等都会有一本新的Excel书(一本隐藏的书)(全部隐藏)。我不知道这些书在哪里被保存或如何阻止这种情况发生。
有人可以解释一下我做了什么吗?
componentDidMount
答案 0 :(得分:0)
问题在于:
WdObj.Selection.PasteSpecial Link:=False, _
DataType:=wdPasteText, Placement:=wdInLine, DisplayAsIcon:=False
这使用常量wdPasteText
和wdInLine
,这些常量未在Excel VBA中定义。实际上,您正在执行以下操作:
WdObj.Selection.PasteSpecial Link:=False, _
DataType:="", Placement:="", DisplayAsIcon:=False
Excel范围的默认“粘贴特殊”模式显示为wdPasteOLEObject
- 嵌入的Excel工作表。作为创建此过程的一部分,Word将创建一个新的Excel工作簿,其中包含粘贴的数据。这些是您看到的工作簿。如果打开Excel(打开VBA编辑器)并手动复制范围并将特殊/对象粘贴到Word中,您可以看到正在创建的临时工作簿,然后再次快速关闭。不幸的是,如果在某些代码运行时发生这种情况,似乎会发生各种奇怪的事情。我没有工作簿保持打开状态,但我已经随机停止了宏,文档和/或工作簿关闭,代码执行跳转到其他书籍中的宏等等。
由于您不想要嵌入的Excel对象,因此您可以轻松修复此问题 - 将wdPasteText
和wdInLine
替换为其数字值,即2和0:
WdObj.Selection.PasteSpecial Link:=False, _
DataType:=2, Placement:=0, DisplayAsIcon:=False
最后,这是一个很好的例子,说明为什么你应该始终在代码的顶部设置Option Explicit
。如果你有,你会得到一个"变量未定义" wdPasteText
和wdInLine
的错误,这会让您直接解决问题。