簡體   English   中英

從一個工作簿復制到另一個工作簿時,excel vba對象必需錯誤

[英]excel vba object required error when copying from one workbook to another

有誰知道為什么:

Set wb = Workbooks.Open(url)
Worksheets("MF All In Rates").Range("C8:P8").Copy Destination:=Workbooks("Dashboard_Final.xlsm").Worksheets("HIST COF").Range(Cells(Current.Row, 4), Cells(Current.Row, 17))

會給我一個對象必需的錯誤? 該網址有效,並且MF全部費用是打開的電子表格中的有效表格。 即使宏在工作簿中,我也必須提供比Dashboard_Final.xlsm更具體的文件路徑嗎?

在不嘗試重現這一點的情況下(我目前在Linux機器上),我認為您缺少“ Dashboard_Final.xlsm”周圍的引號。

Set wb = Workbooks.Open(url)
wb.Worksheets("MF All In Rates") _ 'did you mean to use the wb var here?
    .Range("C8:P8") _
    .Copy(Destination:= Workbooks("Dashboard_Final.xlsm") _ 'changed this line
        .Worksheets("HIST COF") _
        .Range(Cells(Current.Row, 4), Cells(Current.Row, 17)))

編輯:

根據您對兩個答案的評論,我猜您正在嘗試與剛剛打開的工作簿進行交互(使用Set wb = Workbooks.Open(url) )。 如果是這種情況,請確保您正在使用該工作簿(在我的示例中使用wb.Worksheets...行)。 這是更粗略地測試它的一種方法:

Set wb = Workbooks.Open(url)

Dim wbDest as Excel.Workbook, rngDest as Excel.Range, wsDest as Excel.Worksheet
Set wbDest = Workbooks("Dashboard_Final.xlsm")
Set wsDest = wbDest.Worksheets("HIST COF")
set rngDest = wsDest.Range(cells(Current.Row, 4), Cells(Current.Row, 17))

wb.Worksheets("MF All In Rates").Range("C8:P8").Copy Destination:= rngDest

最好標准化您的單元格引用-使用Range(cells ... cells)或Range(“ C#:C#”)-這樣可以更清楚地看到范圍大小相同。

如果仍然有問題,請嘗試分別寫入每個單元格,例如:

wsDest.cells(8, 3).value = wsSource.Cells(Current.Row, 4).value

要么

Dim Arr() as Variant, rng as Excel.Range

Arr = wsSource.Range("C8:P8") 'put the data in the source sheet into an array

Set rng = wsDest.Range(cells(Current.Row, 4), Cells(Current.Row, 17)) 'get the destination range

rng.Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr 'resize the range (just in case) and transpose the array to the worksheet

其中wsDest是目標工作表(您要復制到的地方),而wsSource是源工作表(您要從中復制的地方)。 您可以在此處找到有關將范圍轉換為數組以及將數組轉換為范圍的更多信息

要對像這樣的長引用進行故障排除,請將它們分解為單獨的幾行並逐步進行。 如果您這樣編寫代碼,則可以輕松確定錯誤的位置:

Dim oBook As WorkBook
Dim oSheet As WorkSheet
Dim oRange As Range
Dim vCell1 As Variant
Dim vCell2 As Variant

vCell1 = Cells(Current.Row, 4)
vCell2 = Cells(Current.Row, 17)

Set oBook = Workbooks(Dashboard_Final.xlsm)
Set oSheet = oBook.Worksheets("HIST COF")
Set oRange = oSheet.Range(vCell1, vCell2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM