【问题标题】:VB: Copy a Range to another Excel ApplicationVB:将范围复制到另一个 Excel 应用程序
【发布时间】:2014-09-24 06:31:12
【问题描述】:

我正在尝试解决一个相对简单的问题,但我无法实现。我的目标是将主 Excel 应用程序的工作表中的一系列单元格复制到第二个新创建的 Excel 应用程序的工作表中的另一个范围(相同大小)。我使用创建第二个应用程序

Set secondExApp = CreateObject("Excel.Application")

我正在使用此参考进行进一步处理。到目前为止,我已经尝试了两种不同的方法。两者都不能正常工作。

0.:准备/介绍

Set srcWb = Application.ActiveWorkbook
Set srcSheet = srcWb.Worksheets("example")

Set dstApp = CreateObject("Excel.Application")
Set dstWb = dstApp.Workbooks(1)
Set dstSheet = dstWb.Worksheets(1)

1.: PasteSpecial - 提供图像(!) 而不仅仅是范围

srcSheet.Range("A1:B2").Copy
dstSheet.Range("A1:B2").PasteSpecial xlPasteAll

2.: Range.Copy [Destination] - 不起作用 - 我只能将此方法用于同一应用程序中的工作表是否正确?

srcSheet.Range(srcSheet.Cells(..., ...), srcSheet.Cells(..., ...)).Copy _
dstSheet.Range(dstSheet.Cells(..., ...), dstSheet.Cells(..., ...))

感谢任何帮助。


编辑: 我已经使用过“录制宏”功能,但我更喜欢自己编写代码,而不需要“选择”或“激活”单元格/表格/等。


编辑(已解决: 非常感谢 GSerg 和 iDevlop,你们为我提供了一个很好的起点。我对xlClipboardFormatDspText 所涉及的 Excel 常量进行了一些研究。

真正帮助我的是打开一个新的 Excel 实例会更改粘贴(特殊)菜单。

因此,我现在只需添加一个工作簿(可以隐藏)并使用此对象添加我的内容,而不是创建一个新实例。由于它保存在同一个实例中(也可以查看任务管理器),因此粘贴(特殊)菜单是完全相同的。

现在即使没有选择也可以使用 Range.Copy [destination]!

结果

'Hides the new workbook
Application.ScreenUpdating = False

Set dstWb = Workbooks.Add
Set dstSheet = dstWb.Worksheets(1)

srcSheet.Range(srcSheet.Cells(..., ...), srcSheet.Cells(..., ...)).Copy
dstSheet.Paste dstSheet.Range(dstSheet.Cells(..., ...), dstSheet.Cells(..., ...))

'Avoids the often seen dashed border around the copied range
Application.CutCopyMode = False

'Setting the initial change back
Application.ScreenUpdating = True

软件:Excel 2007

【问题讨论】:

  • 为什么在同一个 Excel 实例中使用第二个 Excel 应用程序而不是另一个工作簿?我能看到的唯一好处是利用双核处理器进行大量计算。但如果你不需要它,它会更慢。
  • @iDevlop 真有趣。在我发现自己之后,我才阅读了您的评论。很有用的评论!

标签: excel vba range


【解决方案1】:

通过用棍子戳 Excel 来确定,你必须使用 Worksheet.Paste 来处理 inter-excel 的东西:

srcSheet.Range("A1:B2").Copy
dstSheet.Paste dstSheet.Range("A1")

用较粗的棍子戳 Excel 显示,从剪贴板粘贴为 xlClipboardFormatDspText 时,公式会被保留:

srcSheet.Range("A1:B2").Copy
dstSheet.Range("A1").Select
dstSheet.PasteSpecial xlClipboardFormatDspText, False

但是,这确实需要先在 dstSheet 上选择一个单元格,因为 Worksheet.PasteSpecial 使用活动单元格。

【讨论】:

  • 谢谢GSerg!除了不传输 公式 之外,这很好用。有没有办法包含公式?为什么 PasteSpecial 方法不起作用?
  • @Mic 它确实有效,但没有使用您想要的格式。查看我的编辑。
  • 这对我也不起作用。结果是某种单列表,每个单元格中都有一个包含一行的 CSV 列表。但请看我的评论!
  • @Mic 哦,好吧。似乎在 Excel 中有更多依赖于语言环境的小惊喜。您在尝试xlClipboardFormatCSV 时得到的结果。
猜你喜欢
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
相关资源
最近更新 更多