我买了一个软件(带有一个大型数据库),它的输出是一个简单的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。
有什么想法吗?
答案 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
干杯!