有谁知道原因:
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 All In Rates是打开的电子表格中的有效工作表。我是否必须提供比Dashboard_Final.xlsm更具体的文件路径,即使宏在该工作簿中?
答案 0 :(得分:1)
没有尝试重现这一点(我目前在我的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(单元格...单元格)或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是源工作表(您从中复制的位置)。您可以找到有关将数组和数组的范围转换为范围here的更多信息。
答案 1 :(得分:1)
对于像这样的长引用的疑难解答,将它们分解为单独的行并逐步执行。如果您编写这样的代码,您将能够相当容易地确定错误的位置:
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)