2014-07-09 124 views
0

我已经运行了一个新的VBA问题:某些代码行只会在问题表单处于活动状态时执行,否则会生成一个错误(运行时错误'1004':应用程序定义或对象定义的错误“)我需要代码能够在后台运行运行时错误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

你没有正确排位赛的所有范围 - 你需要有资格的所有范围和细胞电话,让他​​们指定相同的表:

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 

,或者你

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 
可以通过使用 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 

注意第一个范围内的通话需要与工作表,而不是DataBodyRange合格,否则你将得到一个范围从你想去的地方偏移。

+0

谢谢!更新的问题。 – Emmy

+0

@艾米我已经更新了解决这个问题的答案。 (这是一个稍微不同的情况) – Rory

+0

你是最棒的!太感谢了! – Emmy