【问题标题】:Object Variable or With Block Variable Not set in loop using find function对象变量或带有块变量 未使用 find 函数在循环中设置
【发布时间】:2015-09-03 05:03:21
【问题描述】:
Sub Main()
Dim FName As Variant, R As Long, DirLoc As String, i As Integer
R = 1
i = 1
DirLoc = ThisWorkbook.Path & "\" 'location of files
FName = Dir(DirLoc & "*.csv")
Do While FName <> ""
    ImportCsvFile DirLoc & FName, ActiveSheet.Cells(R, 1)
    R = ActiveSheet.UsedRange.Rows.Count + 1
    FName = Dir
    For i = 1 To 100
        Worksheets("RAW").Range("B1:B6").Copy
        Worksheets("filtered").Range("A" & Rows.Count).End(xlUp).Offset(1).PasteSpecial , Transpose:=True
        Cells.Find(What:="Run:", After:=Cells(1, 1), _
            LookIn:=xlValues, LookAt:=xlPart, _
            SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Select
        Worksheets("filtered").Cells(10, 10).Value = i
        If ActiveCell <> "Run:" & i Then
            Exit For
        End If
    Next i
    DeleteFiltered
Loop
End Sub

我遇到了问题,因为我收到了一个错误:

           `Cells.Find(What:="Run:" & i, After:=Cells(1, 1), _
            LookIn:=xlValues, LookAt:=xlPart, _
            SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Select`

当我删除“& i”时错误不会发生。我用它来导入一个数据文件,然后找到一个特定的“Run:1”。然后它应该复制数据并找到下一个 Run,以及之后的一个。这就是为什么我需要 & i。我怎样才能做到这一点?

还有一些代码部分肯定没问题,所以我把它们省略了。

【问题讨论】:

  • 我召唤@hansup ..!
  • 辛辛苦苦地吟唱来辅助召唤仪式
  • 这可能无济于事,但是如果您在适当的位置添加Dim String1 As StringString1 = "Run:" &amp; i 并将Cells.Find(What:="Run:" &amp; i 更改为Cells.Find(What:=String1 会发生什么?

标签: vba excel loops object find


【解决方案1】:

如果Cells.Find(What:="Run:" &amp; i,... 找不到匹配项,则语句的Select 部分将导致错误。您应该始终将Find 的结果存储在范围变量中,然后针对Nothing 进行测试。

将此声明添加到您的代码中:

Dim cellsFound As Range

然后替换这个:

    Cells.Find(What:="Run:", After:=Cells(1, 1), _
        LookIn:=xlValues, LookAt:=xlPart, _
        SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Select
    Worksheets("filtered").Cells(10, 10).Value = i
    If ActiveCell <> "Run:" & i Then
        Exit For
    End If

与:

Set cellsFound = Worksheet("sheet_name").Cells.Find(What:="Run:" & i, After:=Worksheet("sheet_name").Cells(1, 1), _
        LookIn:=xlValues, LookAt:=xlPart, _
        SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
If Not(cellsFound Is Nothing) Then
    Worksheets("filtered").Cells(10, 10).Value = i
Else
    ' not found
    Exit For
End If

【讨论】:

  • 非常感谢您的回答。这段代码无疑是一个巨大的挑战,而且它只会继续增长!
猜你喜欢
  • 2021-03-06
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
相关资源
最近更新 更多