繁体   English   中英

excel vba 范围从一张纸复制到另一张纸(错误 1004)

[英]excel vba range copy from one sheet to another (error 1004)

我知道当您尝试将粘贴范围从一张纸复制到另一张纸时,有很多与错误 1004(对象或应用程序错误)相关的主题,但我不明白(我仍然是 VBA 的初学者)。

我有一个包含 2 张纸的 Excel 文件:

  • “Worksheet1”包含我要复制的数据
  • “Feuil1”,我想在其中粘贴具有特定布局的数据

要了解我的问题,请查看我的代码

    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(对象或应用程序错误)。 从我读过的内容来看,我相信问题来自必须指定工作表的“单元格”属性(与范围不同),但我不明白为什么我的代码无法复制。

有人可以向我解释一下吗?

您能否按以下方式进行交换并完全限定工作表引用,因为这会导致问题

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

您仅指定对定义范围的单元格的父工作表引用之一。 我建议使用 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

试试这个:

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
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

你在正确的机架上,你所说的关于细胞有点搞砸了。 范围(单元格.....)必须正确引用内部单元格位。 因此,每次使用单元格一词都应更改为工作表(在此处输入工作表名称)。单元格然后它将起作用。 我在上面发布的解决方案稍微简洁一些,因为它没有使用用户可以更改的选项卡标签。 因此,在属性窗口的 VBA 编辑器中,您可以为工作表对象命名。 我已经调用了第一个工作表 worksheet1 和第二个 Feuil1(注意..这不是选项卡名称),现在您可以直接在代码中引用这些对象,如上所示。 它应该都有效...

您可能希望通过仅粘贴值而不是范围来加快速度

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM