我正在构建一个小的vba脚本,它将来自多个工作簿的表合并到另一个工作簿的单个工作表中。当我尝试设置目标范围的值时会引发错误:
wksPivotData.Range(wksPivotData.Cells(CurrentRow, 1)).Resize(tbl.ListRows.Count, tbl.ListColumns.Count).Value = _
tbl.Range.Value
错误:“运行时错误'1004':应用程序定义或对象定义错误”
我经历了类似的问题,一般答案就是我在this one中找到的:所选单元属于另一个工作表,而不是所需的工作表。
虽然这完全有道理,但我仍然无法弄清楚为什么我的代码会中断,因为我只使用数字引用(CurrentRow
是一个长)和Resize
,这应该阻止我做这样的错误。
此外,我在立即窗口中运行了几个快速测试,结果表明虽然工作表wksPivotData
存在且我可以访问其名称和单元格值,但范围函数根本不起作用:< / p>
Debug.Print wksPivotData.Name
PivotData
Debug.Print wksPivotData.Cells(1, 1).Value
123
这两项都有效,但下一次没有:
Debug.Print wksPivotData.Range(1, 1).Value
答案 0 :(得分:3)
您的最后一行>>> Decimal('1.695').quantize(Decimal('.01'), rounding=ROUND_HALF_UP)
Decimal('1.70')
因为您误导Debug.Print wksPivotData.Range(1, 1).Value
而无法打印。我想你想要A1?
使用Range()
时,您指的是不存在的范围。如果你想做单元格A1,你需要
Range(1,1)
由于您正在使用多个工作表,因此我使用上述With wksPivotData
myData = .Range(.Cells(1,1),.Cells(1,1)).Value
End with
语句。编写相同内容的另一种方法是with
(在使用wksPivotData.Range(wksPivotData.Cells(1,1),wksPivotData.Cells(1,1))
和Range()
时,您需要明确告诉Excel要引用的工作表。
最后,对于你的调整大小,如果我没记错的话,你必须在你的范围内两次添加相同的cells()
:
Cell()
或者,对于同样的事情,但不同的方式:
wksPivotData.Range(wksPivotData.Cells(CurrentRow, 1),ksPivotData.Cells(CurrentRow, 1)).Resize(tbl.ListRows.Count, tbl.ListColumns.Count).Value = _
tbl.Range.Value