Excel模板中的某些代码给我带来很多麻烦。模板代码不是我完成的,但我正在使用它为团队自动生成报告。
让我开始介绍如何将数据获取到模板的问题:发生的第一步是Access运行几个查询并将数据传输到Excel模板中的工作表,然后打开模板。打开触发器将运行宏,以运行一些格式设置,计算和Vlookups。一切正常,直到我到达将数据从一个工作簿复制到另一工作簿的工作表的那一部分为止。我在这里进行了研究,看看是否可以找到答案,但是我很迷茫(我是vba编码的新手)。
这是代码(在到达此处之前,负趋势WB已打开)
Worksheets("Top Ten").Activate
代码在Worksheets("Qry_Total").Range("A2:L11").Copy
处以
运行时错误'9'。
从此行Range("B" & LastRow).Select
复制的数据未粘贴到此处Select
我丢失了一些东西。
仅供参考,如果我手动完成从将访问数据传输到excel WB以及手动触发“运行报告”宏的所有操作,则一切正常。我迷路了。
答案 0 :(得分:0)
我已尝试为您精简一下。为避免特殊粘贴,您只需将一个范围的值分配给另一范围即可。为了避免选择,您只需在完全定义的范围内对选择应用任何内容即可。由于您知道边界,因此很容易找出新工作表上容纳所有值的必要范围。
如果您每次都想写出工作簿和工作表有点麻烦,可以尝试使用块,也可以创建一个新变量,将其作为工作表或工作簿并将其设置为所需的对象。
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
等工作表调用的相同属性,但是键入较少并仍保持其完全定义。
这是您的代码,压缩并实现我上面提到的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