[英]VBA to Copy data from one workbook to another workbook/worksheet not working
我在使用Excel模板中的某些代码时遇到了很多麻烦。 模板代码不是我完成的,但我正在使用它为团队自动生成报告。
让我开始介绍如何将数据获取到模板的问题:发生的第一步是Access运行几个查询,并将数据传输到Excel模板中的工作表,然后打开模板。 打开触发器将运行宏,以运行一些格式设置,计算和Vlookups。 一切正常,直到我到达将数据从一个工作簿复制到另一工作簿的工作表的那一部分为止。 我在这里进行了研究,看看是否可以找到答案,但是我很迷茫(我是vba编码的新手)。
这是代码(在我到达此处之前,负趋势WB已打开)
'Copy top ten Data to paste into Negative Trend 2017
Worksheets("Qry_Total").Range("A2:L11").Copy
'PasteSpecial Values Only
'Worksheets("Sheet2").Range("A2").PasteSpecial Paste:=xlPasteValues
Workbooks("Negative Trend 2017.xls").Activate
Worksheets("Top Ten").Activate
'Finds the last non-blank cell (in Negative Trend column B)and paste top ten data
Dim LastRow As String
LastRow = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row + 1
Range("B" & LastRow).Select
Selection.PasteSpecial
'Deselect coppied cells
Application.CutCopyMode = False
Workbooks("Negative Report Macro Template").Activate
'Disable marching ants around copied range
Application.CutCopyMode = False
'Rename Tabs
Sheets("Qry_Summary").Name = "Summary"
Sheets("Qry_Total").Name = "Detail"
代码在这里中断了Worksheets("Top Ten").Activate
运行时错误“ 9”。
从此行Worksheets("Qry_Total").Range("A2:L11").Copy
复制的数据Worksheets("Qry_Total").Range("A2:L11").Copy
未粘贴到此处Range("B" & LastRow).Select
我想念一些东西。
仅供参考,如果我手动执行所有操作(从将访问数据传输到excel WB并手动触发“运行报告”宏),则一切正常。 我迷路了。
我试过为您精简一下。 为避免特殊粘贴,您只需将一个范围的值分配给另一范围即可。 为了避免选择,您只需在完全定义的范围内对选择应用任何内容即可。 由于您知道边界,因此很容易找出新工作表上容纳所有值的必要范围。
如果您想每次都写出工作簿和工作表有点麻烦,可以尝试使用块,也可以创建一个新的变量,将其作为工作表或工作簿并将其设置为所需的对象。 一个例子是
Dim TopTen As Worksheet
Dim NegTrend As Workbook
Set TopTen = Workbooks("Negative Trend 2017.xls").Worksheets("Top Ten")
Set NegTrend = Workbooks("Negative Trend 2017.xls")
LastRow = TopTen.Cells(Rows.Count, "B").End(xlUp).Row + 1
变量现在是工作表,您可以调用与通常使用工作表(如Range, Cells
等)调用的相同属性Range, Cells
但是键入较少,并且仍然可以完全定义它。
这是您的代码,压缩并实现了我上面提到的with块。
Sub test()
Dim LastRow As Long
With Workbooks("Negative Trend 2017.xls").Worksheets("Top Ten")
LastRow = .Cells(Rows.Count, "B").End(xlUp).Row + 1
.Range("B" & LastRow & ":M" & LastRow + 9).Value = _
Workbooks("Negative Report Macro Template").Worksheets("Qry_Total").Range("A2:L11").Value
End With
With Workbooks("Negative Report Macro Template")
.Sheets("Qry_Summary").Name = "Summary"
.Sheets("Qry_Total").Name = "Detail"
End With
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.