我遇到了一个新的VBA问题:只有当有问题的工作表处于活动状态时才会执行某些代码行,否则会产生错误(运行时错误'1004':应用程序定义的错误或对象定义的错误“)。我需要代码才能在后台运行。
也许有一双新鲜(精通VBA)眼睛的人可以找到线条的错误。 (我将它们一起发布在这里,但实际上它们来自不同的宏。)
Dim senaste As Range
Sheets("PA").Range(Cells(senaste.Row, (senaste.Column - 2)), Cells(senaste.Row, senaste.Column)).Copy
Worksheets("GL").Range(Cells(3, 1), Cells(Sheets("GL").UsedRange.Rows.Count, Sheets("GL").UsedRange.Columns.Count)).Delete
编辑:下面的答案很棒!用不同的线做同样的坐标变得疯狂,发生了什么? (-4和-9曾经是-1。)
Set pt = Worksheets("PA").PivotTables("A")
pt.DataBodyRange.Range(pt.DataBodyRange.Cells(-4, (pt.DataBodyRange.Cells.Columns.Count - 9)), pt.DataBodyRange.Cells((pt.DataBodyRange.Cells.Rows.Count - 6), (pt.DataBodyRange.Cells.Columns.Count - 7))).Copy
答案 0 :(得分:1)
您未正确限定所有范围 - 您需要限定所有范围和单元格调用,以便它们指定相同的工作表:
Dim senaste As Range
Sheets("PA").Range(Sheets("PA").Cells(senaste.Row, (senaste.Column - 2)), Sheets("PA").Cells(senaste.Row, senaste.Column)).Copy
Worksheets("GL").Range(Worksheets("GL").Cells(3, 1), Worksheets("GL").Cells(Sheets("GL").UsedRange.Rows.Count, Sheets("GL").UsedRange.Columns.Count)).Delete
或者您可以使用With
块来整理:
Dim senaste As Range
With Sheets("PA")
.Range(.Cells(senaste.Row, (senaste.Column - 2)), .Cells(senaste.Row, senaste.Column)).Copy
End With
同样地:
With Worksheets("GL")
.Range(.Cells(3, 1), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Delete
End With
请注意所有.Range
和.Cells
来电之前的点。
对于您的更新部分,您需要:
Set pt = Worksheets("PA").PivotTables("A")
With pt.DataBodyRange
pt.Parent.Range(.Cells(1, .Columns.Count - 3), .Cells(.Rows.Count - 1, .Columns.Count - 1)).Select
End With
请注意,第一个Range调用需要使用Worksheet限定,而不是DataBodyRange,否则您将获得所需的范围偏移。