在不同的Excel实例之间复制和粘贴

时间:2017-09-30 20:23:56

标签: excel-vba vba excel

我买了一个软件(带有一个大型数据库),它的输出是一个简单的Excel工作簿,没有保存在任何地方(没有路径),一般命名为#Book;" Book1",它只是弹出我的屏幕。

每当我向软件询问此输出时,我都需要复制此工作簿的内容并将其粘贴到另一个工作簿,即我命名的母亲工作簿中,以合并所有数据。

我必须每天重复这个动作几十次,所以我认为创建一些VBA代码来自动完成这项任务是个好主意。

所以...我做了一个非常简单的事情:

ActiveWorkbook.ActiveSheet.Range("A1:C32").Copy 
Workbooks("Mother-Workbook.xlsm").Worksheets("Sheet1").Range("B6:D37").PasteSpecial Paste:=xlPasteValues

问题是......每次软件输出一个新的工作簿时,它似乎是在一个新的Excel实例中创建的,我的宏无法达到。我的意思是,我运行代码,但没有任何反应,因为我的母亲工作簿找不到通用的,未保存的并且位于另一个excel实例中#Book;"。

如果我打开输出后打开母工作簿,那么代码可以工作,因为两者都在同一个实例中。但是,由于我需要始终保持母亲工作簿的开放,我无法做到这一点。我也不想保存每个新的输出文件。这需要我很多时间。

我使用2016版的Excel,但已经尝试了2010版。我的操作系统是Windows 10 Pro。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

此代码应该这样做。

Dim xlapp As Object
Set xlapp = GetObject("Book1").Application

xlapp.ActiveWorkbook.ActiveSheet.Range("A1:C32").Copy
Workbooks("Mother-Workbook.xlsm").Worksheets("Sheet1").Range("B6:D37").PasteSpecial Paste:=xlPasteValues

xlapp.DisplayAlerts = False
xlapp.Quit

请注意,您需要关闭" Book1"在代码的最后,为了确保下次创建一个Excel文件,它也会被称为" Book1"而不是" Book2"。并且我们在它的时候也可以关闭Excel实例!

有关GetObject函数的更多信息,您可以查看this page

答案 1 :(得分:0)

非常感谢,DecimalTurn和Patrick Lepelletier!

GetObject真的帮助了我。 “关闭”命令的效果更好:

Sub CollectA() 

Dim oApp As Application 
Dim oWb As Workbook      
Set oWb = GetObject("Book1") 
Set oApp = oWb.Parent      
oWb.ActiveSheet.Range("A1:C32").Copy      
Workbooks("Mother-Workbook.xlsm").Worksheets("Sheet1").Range("B6:D37").PasteSpecial Paste:=xlPasteValues 
oWb.Close False 
oApp.Quit
End Sub

干杯!