簡體   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