VB:将范围复制到另一个Excel应用程序

时间:2011-12-19 10:48:30

标签: excel vba range

我正在尝试解决一个相对简单的问题,但我无法实现。我的目标是将主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

1 个答案:

答案 0 :(得分:4)

通过用棍子戳Excel来确定,你必须使用Worksheet.Paste进行ex-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使用了活动单元格。