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



我购买了一个软件(带有大数据库),并且其输出是一个简单的Excel工作簿,在任何地方都没有保存(无路径),名为" Book1",简单地弹出我的屏幕。

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

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

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

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

问题是...每次软件输出新的工作簿时,它似乎都是在Excel的新实例中创建的,我的宏无法达到。我的意思是,我运行代码,但什么也没有发生,因为我的母亲工作书没有找到通用,未保存和位于另一个Excel实例" book1"。

如果打开输出后,我打开了母簿,则代码可以正常工作,因为两者都在同一实例中。但是,由于我需要一直保持母亲工作书,所以我做不到。我也不想保存每个新的输出文件。这会花很多时间。

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

有什么想法?

此代码应该这样做。

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功能的更多信息,您可以查看此页面

非常感谢,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

欢呼!

相关内容

  • 没有找到相关文章

最新更新