繁体   English   中英

VBA将数据从一个工作簿复制到另一工作簿/工作表不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM