运行时错误1004

时间:2014-07-09 11:30:58

标签: excel excel-vba vba

我遇到了一个新的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

1 个答案:

答案 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,否则您将获得所需的范围偏移。