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