运行时错误:424:当我尝试达到范围并使用范围数据时所需的对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行时错误:424:当我尝试达到范围并使用范围数据时所需的对象相关的知识,希望对你有一定的参考价值。

我试图以与旧excel相同的方式突出显示新的excel并且数据很大。所以我保存了范围内的数据并尝试查找,计算范围内的函数。但是它一直显示“对象找不到错误”。我真的因为我很好地定义了范围对象,所以没有得到它。这是我的代码的一部分。我在定义RangSe1对象之后尝试通过“RangSe1(1,1).Activate”进行调试,它甚至从这里给出了424错误。我真的很困惑。

 Sub Morningsmall()

 Dim strfile As String
 Dim iLastrow, iColor, iFind, iLastrow1, iLastrow2, iLastrow3, iLastrow4,   iRow As Long
 Dim RangSe1, RangSo1, RangSe2, RangSo2, RangS As Range


 Dim wbLastday, wbToday As Workbook
 Dim wsSettle1, wsSettle2, wsSophis1, wsSophis2 As Worksheet

    With Application

        .ScreenUpdating = False
        .EnableEvents = False
        .Calculate
        .Calculation = xlCalculationManual
        .DisplayStatusBar = False
    End With


  'Open yesterday's file
   MsgBox "Open Yesterday's Settlement Report"
   strfile = Application.GetOpenFilename
   If strfile <> "False" Then Workbooks.Open strfile

Set wbLastday = ActiveWorkbook
Set wsSettle1 = wbLastday.Sheets("SettlementReport")
Set wsSophis1 = wbLastday.Sheets("Sophis")

iLastrow1 = wsSettle1.Cells(wsSettle1.Rows.Count, 1).End(xlUp).Row
iLastrow2 = wsSophis1.Cells(wsSophis1.Rows.Count, 1).End(xlUp).Row

RangSe1 = wsSettle1.Range("A1:AQ" & iLastrow1)
RangSo1 = wsSophis1.Range("A1:AJ" & iLastrow2)


RangSe1(1, 1).Activate

...
...
...


For i = 2 To iLastrow3
    iFind = RangSe2(i, 1)
    'a = Application.WorksheetFunction.CountIf(Rang, iFind)
    If Application.WorksheetFunction.CountIf(wsSettle1, iFind) > 0 Then

   'range1.Find("test id", LookIn:=xlValues)
        If RangSe1(wsSettle1.Cells.Find(what:=iFind).Row, 6) = RangSe2(i,           6)     Then
       iColor = RangSe1.Find(what:=iFind).Interior.Color
           If iColor <> 16777215 Then
                 wsSettle2.Rows(i).Interior.Color = iColor
           End If
       End If
 End If

...
...
...
答案

你的台词说

Dim RangSe1
'...
RangSe1 = wsSettle1.Range("A1:AQ" & iLastrow1)

相当于

Dim RangSe1 As Variant
'...
RangSe1 = wsSettle1.Range("A1:AQ" & iLastrow1).Value

这将创建一个Variant数组,其大小为1 To iLastrow1, 1 To 43。您不能在数组的Activateth位置使用(1, 1)方法,因为数组不是对象,因此没有方法或属性。


您有两个主要错误导致您的代码无法达到您的预期:

1)您没有正确定义变量,因为:

Dim RangSe1, RangSo1, RangSe2, RangSo2, RangS As Range

相当于:

Dim RangSe1 As Variant, RangSo1 As Variant, RangSe2 As Variant, RangSo2 As Variant, RangS As Range

你应该使用:

Dim RangSe1 As Range, RangSo1 As Range, RangSe2 As Range, RangSo2 As Range, RangS As Range

2)在为Set对象分配引用时,您没有使用Range关键字,例如,

RangSe1 = wsSettle1.Range("A1:AQ" & iLastrow1)

应该

Set RangSe1 = wsSettle1.Range("A1:AQ" & iLastrow1)

以上是关于运行时错误:424:当我尝试达到范围并使用范围数据时所需的对象的主要内容,如果未能解决你的问题,请参考以下文章

在Excel VBA中,如何测试Excel.Range对象变量是否丢失其引用而不会引发运行时错误424 ..?

VBA 在命名范围上尝试求和函数时出现运行时错误

删除行时需要 Excel VBA 运行时错误“424”对象

致命错误:数组索引超出范围。刷新时迅速

c++和opencv中的向量下标超出范围错误

当我使用单元格时索引超出范围(Swift)