我知道当您尝试将粘贴范围从一个工作表复制到另一个工作表时,有很多与错误1004(对象或应用程序错误)相关的主题,但我不明白(我仍然是VBA的初学者) )。
我有一个包含2张的Excel文件:
要了解我的问题,请查看我的代码
Dim a As Integer
Dim b As Integer
Dim val4 as integer
val4 = 4
a = 2
b = 1
For i = 1 To val4
Worksheets("Worksheet1").Range(Worksheets("Worksheet1").Cells(a, 1), Cells(a + 2999, 1)).Copy Destination:=Worksheets("Feuil1").Range(Worksheets("Feuil1").Cells(2, b), Cells(a + 2999, b))
a = a + 3000
b = b + 1
Next i
注意:在完整代码中,val4已在此部分之前使用过。
当我尝试运行它时,我获得错误1004(对象或应用程序错误)。 根据我的阅读,我认为问题来自“Cells”属性,其中必须指定工作表(与范围不同),但我不明白为什么我的代码无法复制。
有人可以向我解释一下吗?
答案 0 :(得分:1)
你可以按照以下方式进行swop并完全限定工作表引用,因为这会导致问题
Option Explicit
Sub test()
Dim a As Long
Dim b As Long
Dim val4 As Long
val4 = 4
a = 2
b = 1
Dim i As Long
For i = 1 To val4
With Worksheets("Worksheet1")
Worksheets("Feuil1").Range(Worksheets("Feuil1").Cells(2, b), Worksheets("Feuil1").Cells(a + 2999, b)) = .Range(.Cells(a, 1), .Cells(a + 2999, 1))
End With
a = a + 3000
b = b + 1
Next i
End Sub
答案 1 :(得分:0)
您只是指定一个对定义Range的单元格的父工作表引用。我建议使用With .... End With块,你只需要将目的地的左上角单元格复制一份。
with Worksheets("Worksheet1")
For i = 1 To val4
.Range(.Cells(a, 1), .Cells(a + 2999, 1)).Copy _
Destination:=Worksheets("Feuil1").Cells(2, b)
a = a + 3000
b = b + 1
Next i
end with
答案 2 :(得分:0)
试试这个:
Dim a As Integer
Dim b As Integer
Dim val4 As Integer
val4 = 4
a = 2
b = 1
For i = 1 To val4
Worksheets("Worksheet1").Range(Cells(a, 1), Cells(a + 2999, 1)).Copy Worksheets("Feuil1").Cells(2, b)
a = a + 3000
b = b + 1
Next i
答案 3 :(得分:0)
Option Explicit
Sub test()
Dim a As Integer
Dim b As Integer
Dim i As Integer
Dim val4 As Integer
val4 = 4
a = 2
b = 1
For i = 1 To val4
WorkSheet1.Range(WorkSheet1.Cells(a, 1), WorkSheet1.Cells(a + 2999, 1)).Copy Feuil1.Range(Feuil1.Cells(2, b), Feuil1.Cells(a + 2999, b))
a = a + 3000
b = b + 1
Next i
End Sub
你在正确的架子上,你所说的关于细胞的东西搞砸了。 范围(单元格.....)必须正确引用内部单元格位。因此,单词单元格的每次使用都应该更改为工作表(在此处输入工作表名称).cells然后它将起作用。 我上面发布的解决方案略显整洁,我认为由于它没有使用用户可以更改的标签标签。因此,在属性窗口的VBA编辑器中,您可以为工作表对象指定名称。我已经调用了第一张工作表1和第二张Feuil1(注意..这不是选项卡名称),现在您可以直接在代码中引用这些对象,如上所示。 它应该都有用......
答案 4 :(得分:0)
您可能希望仅通过粘贴值而不是范围
来加快速度Sub test()
Const chunksLength = 3000 ' define here your "chunks" length
Dim i As Long
With Worksheets("Feuil1").UsedRange.Columns(1)
For i = 1 To .Rows.Count \ chunksLength + IIf(.Rows.Count Mod chunksLength > 0, 1, 0)
.Offset(, i).Resize(chunksLength).Value = .Resize(chunksLength).Offset((i - 1) * chunksLength).Value
Next
End With
End Sub