首页 > 解决方案 > 出现错误说明“无法获取 Range 类的 FindNext 属性”

问题描述

我正在处理的程序必须处理具有多个重复列名的数据,所以我想寻找一个字段名称“端口类型”并执行一些检查,如果不满意则移动到下一个重复列。为了完成它,我尝试使用 FindNext 功能。

'Application.ScreenUpdating = False
duplicateBook.Sheets(1).Activate
duplicateBook.Sheets(1).Select

Dim lr As Integer
Application.ScreenUpdating = False
ActiveSheet.AutoFilterMode = False

Rows("9:9").Select
Rows("9:9").Find("Charge Type", LookIn:=xlValues, lookat:=xlWhole).Select
chargetypefield = Selection.Column
Rows("9:9").Find("Product", LookIn:=xlValues, lookat:=xlWhole).Select
ProductField = Selection.Column
Rows("9:9").Find("Feature", LookIn:=xlValues, lookat:=xlWhole).Select
Featurefield = Selection.Column
Rows("9:9").Find("Service Id(CP Only)", LookIn:=xlValues, lookat:=xlWhole).Select
serviceidField = Selection.Column
Rows("9:9").Find("CIRCUIT ID", LookIn:=xlValues, lookat:=xlWhole).Select
CircuitIDField = Selection.Column
Rows("9:9").Find("Ignored", LookIn:=xlValues, lookat:=xlWhole).Select
ignoredField = Selection.Column
Rows("9:9").Find("Country", LookIn:=xlValues, lookat:=xlWhole).Select
countryField = Selection.Column

'################
'On Error Resume Next
With duplicateBook.Sheets(1).Rows("9:9")
   Set selectCell = .Find("Port Type", LookIn:=xlValues, lookat:=xlWhole)
    firstVal = selectCell
    

    Do
        If selectCell.End(xlDown).Value = "Ethernet" Or selectCell.End(xlDown).Value = "TDM" Or selectCell.End(xlDown).Value = "MVIC" Then
            portypeField = Selection.Column
            Exit Do
        Else
            **Set selectCell = .FindNext("Port Type")**
        End If
    Loop While selectCell.Column <> firstVal
End With
    

   

标签: excelvba

解决方案


正如 PEH 所说,避免使用 SELECT。您在录制宏时会遇到这种情况,但这可能会导致许多问题。

然后,除非工作表的所有列都有数据,否则我建议定义第 9 行和工作表的 UsedRange 的交集(例如,Intersect({sheet}.Rows(9),{sheet}.UsedRange){sheet}.UsedRange.Resize(1).Offset(8)(当然,{sheet}是您更喜欢指定适用的工作表对象)。

接下来,您可以使用 For Each 或使用 Find 方法迭代该有限行,但无论哪种方式,您都需要在对其进行操作之前测试您的结果范围“Is Nothing”(最好再次,而不是通过选择它)以获得列号和/或找到该列中的最后一个值(例如,仅在列上使用 Find 方法来查找您的密钥,“以太网”或“TDM”)


推荐阅读