【问题标题】:Excel to Word wrong range copied if sheet containing range not active如果包含范围的工作表未激活,则 Excel 复制到 Word 错误范围
【发布时间】:2019-02-07 04:34:36
【问题描述】:

在 Office 2016 中(在其他版本中未尝试过)将范围从 Excel 复制到 Word 作为 OLEObject 时,我发现了一个奇怪的问题。 VBA 在 Excel 中。这是代码,它在 Word 文件中找到一个书签,粘贴到表格中并重置书签:

Set wordRange = wordDoc.bookmarks("Table").Range
wsService.Range("A1:B15").Copy
wordRange.PasteSpecial Link:=False, DataType:=0, Placement:=0
wordDoc.bookmarks.Add "Table", wordRange

如果工作表 wsService 在 Excel 中处于活动状态,则此方法有效。如果不是Range("A1:B15"),则将复制活动工作表上的内容。我尝试过其他数据类型(例如位图、元文件、形状),它们都可以正常工作。这是一个错误吗?

【问题讨论】:

  • 你是如何设置对象wsService的?
  • 它是属性中的工作表对象名称。我会尝试设置一个变量并报告回来。
  • @Nathan_Sav 不,同样的问题
  • 你试过worksheets("sheetname").range("a1:b15")吗?
  • 您可以说这是一个错误,但您可以通过一些技巧来解决,例如 Application.ScreenUpdating = False & wsService.visible = false 在运行程序时以及在结束之前再次激活您的工作表, Application.ScreenUpdating = true 和 wsService.visible = true。我希望它有所帮助。

标签: excel vba ms-word


【解决方案1】:

您的描述表明您对 wsService 所做的一切都是将其指向 ActiveSheet。例如:

set wsService = ActiveSheet

而不是说它应该使用哪个特定的工作表:

set wsService = ThisWorkbook.Sheets("Sheet1")

这样,工作表不需要可见就可以从中复制任何内容。

【讨论】:

  • 不,不是这样的,请看上面的cmets
  • @Absinthe 不管您的“上面的 cmets”如何,在将工作表复制并粘贴到 Word 之前,根本不需要激活工作表。 真正的 问题涉及 PasteSpecial 的一个错误 - 如果您设置 Link:=True,您将获得正确的工作表。然后,您可以取消链接粘贴的对象。
  • 此外,当您使用 Link:=False 和 DataType:=0 粘贴时,您将获得 整个 工作簿。但是,如果您想要的工作表未处于活动状态,您将显示活动工作表,或者,如果工作簿未处于活动状态,则显示第一个工作表。所以,你得到了正确的数据;它只是不可见。您可以在粘贴和切换工作表后激活对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多