excel - VBA将数据从一个工作簿复制到另一个工作簿/工作表不起作用
问题描述
我在 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
没有粘贴到这里Range("B" & LastRow).Select
我错过了一些东西。
仅供参考,如果我手动执行所有操作,从将访问数据传输到 excel WB 并手动触发“运行报告”宏,一切正常。我迷路了。
解决方案
我试过为你浓缩它。为避免特殊粘贴,您只需将一个范围的值分配给另一个范围。为了避免选择,您只需在完全定义的范围内应用您将使用的任何内容。由于您知道自己的界限,因此很容易找出新工作表上容纳所有值的必要范围。
如果您觉得每次都写出工作簿和工作表有点麻烦,您可以尝试使用 with 块,或者您可以创建一个新变量,它可以是工作表或工作簿,并将其设置为您想要的对象。这方面的一个例子是
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
etc 之类的工作表调用的相同属性,但输入更少,并且仍然保持完全定义。
这是您的代码,浓缩并实现了我上面提到的 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
推荐阅读
- c# - Issue describing an object for XML in Swagger 2.0 from C#
- arrays - 打字稿数组混淆 - TS 2488 类型为“从不”
- c++ - 代码未在在线编译器上显示结果
- amazon-ses - Amazon SES SPF 记录失败
- html - CSS - 转换 div 推动其他 div
- spring-boot - 运行为 Spring Boot 选项未出现在 STS 中
- python - 如何使用正则表达式在 Python 中加入超过 2 行的字符串?
- css - ::after 元素相交的细线
- php - 如何使用视图源在代码库中查找函数
- python-3.x - 根据某些标准从文本文件创建数据框