我购买了一个软件(带有大数据库),并且其输出是一个简单的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
欢呼!