VBA 复制/粘贴运行时错误

VBA 复制/粘贴运行时错误

这段代码一直收到运行时错误 1004。如果起始列名匹配,我会尝试将小块信息从一张表复制到另一张表。

For a = 8 To 17
    For b = 7 To 21
        If Sheets("Sheet1").Cells(a, 2).Value = Sheets("Sheet2").Cells(b, 1).Value Then
            Sheets("Sheet2").Range(Cells(b, 1), Cells(b, 7)).Copy Sheets("Sheet1").Cells(a, 6)
        End If
    Next b
Next a

我如何调试我的代码?

答案1

简而言之,这条线有问题

Sheets("Sheet2").Range(Cells(b, 1), Cells(b, 7)).Copy Sheets("Sheet1").Cells(a, 6)

将其更改为以下内容应该可以解决您的问题。

Sheets("Sheet2").Range(Sheets("Sheet2").Cells(b, 1), Sheets("Sheet2").Cells(b, 7)).Copy Sheets("Sheet1").Cells(a, 6)

我如何调试:

运行代码时,弹出运行时错误 1004 时单击“调试”。第 4 行以黄色突出显示(即 VBA 在运行该行时遇到错误)。这就是我们的起点。

为了消除问题,我们可以将光标移到各个变量上来查看其值。 b= 7,a= 8,看起来不错。

删除函数的参数Copy,只保留 ... 之前的所有内容.Copy,问题仍然存在。所以应该有问题

Sheets("Sheet2").Range(Cells(b, 1), Cells(b, 7)).Copy

查看帮助.Range并注意您还需要指定Sheet。问题已解决。

答案2

确保两个工作表均未受到保护(不仅是您要复制的范围,而且整个工作表)。

另外,这个函数怎么调用?完整函数是什么?是在 Sheet1、ThisWorkbook 中,还是在单独的模块中?哪一行引发了错误?

尝试分别声明每个对象并查看是否可以隔离哪个步骤失败。

Dim src as Excel.Range
Set src = Sheets("Sheet1").Cells(a, 2)
Dim dst as Excel.Range
Set dst = Sheets("Sheet2").Cells(b, 1)
If src.Value = dst.Value Then
  Dim src2 as Excel.Range
  Set src2 = Sheets("Sheet2").Range(Cells(b, 1), Cells(b, 7))
  Dim dst2 as Excel.Range
  Set dst2 = Sheets("Sheet1").Cells(a, 6)
src2.Copy dst2
End If

答案3

我测试了不同的解决方案。阅读文档并在计算机上测试后,我记得:

  • 默认情况下,Excel VBA 通过引用传递参数。
  • 单元格初始化一次>仅一个实例

或者,您的解决方案Cells在同一个过程中被调用了多次!您通过引用在具有相同实例的范围内传递了两次值。该范围两次获得相同的对象实例 > 结果无效。

您可以强制通过拜瓦尔带有封闭参数()。这与使用密钥时相同 WITH

Mime 代码为:

    Dim shSrc as Excel.Worksheet, shDst as Excel.Worksheet

    Set shSrc = Sheets("Sheet1")
    Set shDst = Sheets("Sheet2")

    'copy
    With shSrc
        .Range((.Cells(1, 1)), (.Cells(1, 7))).Copy
    End With

    'special paste need same range (number of rows and colums)
    With shDst
        .Range((.Cells(1, 1)), (.Cells(1, 7))).PasteSpecial xlPasteValues
    End With

相关内容