gpt4 book ai didi

excel - VBA,找不到对象424错误-如何调试?

转载 作者:行者123 更新时间:2023-12-03 08:06:40 24 4
gpt4 key购买 nike

我在Excel 2010上使用VBA,而我却收到了可怕的424错误。但是调试器没有指向任何有助于解决问题的内容。是否有一个好的实践可以缩小问题的范围?我已经检查了拼写,所有表都在正确的工作表上,并且有命名的列。

预先感谢您可能提供的任何建议。

Sub Finding_Zone()

Dim Data_Table As ListObject
Dim Freq_Table As ListObject
Dim i As Long
Dim x As Long
Dim Zone_Value As Long

Set Data_Table = Sheets("Sheet2").ListObjects("Table2")
Set Freq_Table = Sheets("Sheet2").ListObjects("Table3")

For i = 1 To Range(Data_Table).Rows.Count
Zone_Value = data.Table.DataBodyRange.Cells(i, Data_Table.ListColumns("Zone").Index)


For x = 1 To Len(Zone_Value)

Set Result = Freq_Table.ListColumns("Summary Code").DataBodyRange.Find(Zone_Value)

If Result Is Nothing Then

Zone_Value = Left(Zone_Value, Len(Zone_Value) - 1)

Else
Data_Table.DataBodyRange.Cells(i, Data_Table.ListColumns("Modified Zone").Index) = Zone_Value
End If

Next x

Next i


End Sub

最佳答案

如所指出的,Option Explicit会捕获data.Table错字,这会导致Object Not Found错误。但是,这些附加点应有助于您完善代码。

  • Len(Zone_Value)不会返回您的区域编号中的位数,而是始终会返回 4 -使用的字节数(Long的存储大小)。有关更多详细信息,请参见MSDN - Data Type Summary。无论For x = 1 To Len(Zone_Value)有多少位数,Len(Zone_Value) - 1都会循环4次,Zone_Value等于3。因此,也许可以使用CstrZone_Value转换为String,然后检查其长度。

  • 考虑以下示例代码,该示例代码显示了分配给 1DoubleLongInteger变量时 String的长度。
    Sub TestLength()
    Dim a As Double, b As Long, c As Integer, d As String

    a = 1
    b = 1
    c = 1
    d = "1"

    Debug.Print "Length of a: " & Len(a)
    Debug.Print "Length of b: " & Len(b)
    Debug.Print "Length of c: " & Len(c)
    Debug.Print "Length of d: " & Len(d)
    End Sub

    输出为:

    Length of a: 8
    Length of b: 4
    Length of c: 2
    Length of d: 1


    另一个想法:
  • Zone_Value = data.Table.DataBodyRange.Cells(i, Data_Table.ListColumns("Zone").Index)。添加ListColumn变量而不是多次引用Index可能更简单易懂。
  • Dim Zone_Column As ListColumn: Set Zone_Column = Data_Table.ListColumns("Zone")
    您修改后的代码,同时实现了两个建议,可能看起来像这样:
    Option Explicit

    Sub Finding_Zone()
    Dim Data_Table As ListObject: Set Data_Table = Sheets("Sheet2").ListObjects("Table2")
    Dim Freq_Table As ListObject: Set Freq_Table = Sheets("Sheet2").ListObjects("Table3")

    Dim Zone_Column As ListColumn: Set Zone_Column = Data_Table.ListColumns("Zone")
    Dim Summary_Column As ListColumn: Set Summary_Column = Freq_Table.ListColumns("Summary Code")
    Dim Mod_Zone_Column As ListColumn: Set Mod_Zone_Column = Data_Table.ListColumns("Modified Zone")

    Dim i As Long, x As Long
    Dim Zone_Value As Long
    Dim Result As Range
    Dim tmpStr As String

    With Zone_Column.DataBodyRange
    For i = 1 To .Rows.Count
    Zone_Value = .Cells(i, 1).Value
    tmpStr = CStr(Zone_Value)

    For x = 1 To Len(tmpStr)
    Set Result = Summary_Column.DataBodyRange.Find(Zone_Value)

    If Result Is Nothing Then
    If Len(CStr(Zone_Value)) > 1 Then
    Zone_Value = CLng(Left(CStr(Zone_Value), Len(CStr(Zone_Value)) - 1))
    End If
    Else
    Mod_Zone_Column.DataBodyRange.Cells(i, 1) = Zone_Value
    Exit For
    End If

    Next x
    Next i
    End With

    End Sub

    关于excel - VBA,找不到对象424错误-如何调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51879583/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com