首页 > 解决方案 > 需要运行时错误“424”对象:Excel VBA

问题描述

我对编码非常陌生,我正在尝试将数据从一个工作表复制到特定行的另一个工作表。

Sub copycolumns()
    Dim lastrow As Long, erow As Long
    lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row '*/error shows here/*
    For i = 2 To lastrow
        Sheet1.Cells(i, 1).Copy
        erow = Sheet2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
        Sheet1.Paste Destination:=Worksheets("Sheet2").Cells(erow, 1)
        Sheet1.Cells(i, 3).Copy
        Sheet1.Paste Destination:=Worksheets("Sheet2").Cells(erow, 2)
        Sheet1.Cells(i, 6).Copy
        Sheet1.Paste Destination:=Worksheets("Sheet2").Cells(erow, 3)
    Next i
    Application.CutCopyMode = False
    Sheet2.Columns().AutoFit
    Range("A1").Select
End Sub

我在这里缺少什么?

标签: vbaexcel

解决方案


错误 424“需要对象”只有一个原因会在该代码行中弹出。

Option Explicit没有指定,Sheet1也没有在任何地方声明。

查看“Sheet1”模块 (F4) 的属性,然后记下该(Name)属性的值:

模块“Sheet1”的属性

Name属性就是您在 Excel 中看到的。该(Name)属性在 Excel 中的任何位置都不可见,并且该值决定了 VBA 自动为您声明的全局范围标识符的名称。

Sheet1.Cells(...)如果没有工作表的属性(Name)值为Sheet1.

Option Explicit无论如何都要指定。错误 424 的原因Sheet1是未声明,在运行时它是隐含Variant的,默认值为Empty,它不是对象,因此成员调用是非法的 - 只有一个对象可能有一个Cells成员。

提示:给(Name)属性一个有意义的名字,例如SummarySheet. 然后你可以做SummarySheet.Cells(...)


推荐阅读