【问题标题】:Run-time error '91': Object variable or With block variable not set after code runs运行时错误“91”:代码运行后未设置对象变量或块变量
【发布时间】:2020-07-02 06:43:30
【问题描述】:

我正在编写我的第一个 VBA 代码,并且有一组复杂的步骤来处理 Excel 中的数据。一切正常,除了这个运行良好,但最后给出错误,我很确定这是因为在数据用尽后的某个时刻,它返回“无”并导致“运行时错误'91':对象变量或未设置块变量”崩溃。我不知道如何解决这个问题。有什么建议么?我确信这很简单——是的,这段代码很慢,但它确实有效。谢谢!

Sub D_GSB_Sort_Data()
Dim MyCell As Range
    For Each MyCell In Range("A2:A5000")
        ActiveWorkbook.ActiveSheet.Columns(1).Find("*Submitted*").Select
        ActiveCell.Offset(0, 3).Cut ActiveCell.Offset(0, 0)
        ActiveCell.Offset(1, 1).Cut ActiveCell.Offset(0, 1)
        ActiveCell.Offset(2, 1).Cut ActiveCell.Offset(0, 2)
        ActiveCell.Offset(3, 1).Cut ActiveCell.Offset(0, 3)
        ActiveCell.Offset(4, 0).Cut ActiveCell.Offset(0, 4)       
Next MyCell
End Sub

【问题讨论】:

  • 您需要先测试Find 是否成功,然后再尝试执行任何其他操作,包括Select
  • 这里使用Range.AutoFilter 可能比Find 更容易。
  • 如果您已经在范围内循环,则不需要Find() - 只需使用If MyCell.Value Like "*Submitted *" Then 并使用MyCell 代替ActiveCell
  • 我将代码更改为Sub GSB_Sort_Data() Dim MyCell As Range For Each MyCell In Range("A2:A5000") If MyCell.Value Like "*Submitted*" Then MyCell.Offset(0, 3).Cut MyCell.Offset(0, 0) MyCell.Offset(1, 1).Cut MyCell.Offset(0, 1) MyCell.Offset(2, 1).Cut MyCell.Offset(0, 2) MyCell.Offset(3, 1).Cut MyCell.Offset(0, 3) MyCell.Offset(4, 0).Cut MyCell.Offset(0, 4) Next MyCell End Sub,但现在出现“Next without For”错误
  • 您缺少End If...在Next MyCell 之前添加它。

标签: excel vba


【解决方案1】:

编辑:将另一个单元格剪切到 MyCell 会破坏该引用,所以最后...

Sub D_GSB_Sort_Data()
    Dim MyCell As Range, ws As Worksheet

    Set ws = ActiveSheet

    For Each MyCell In ws.Range("A2:A" & _
                          ws.cells(ws.Rows.Count, 1).End(xlUp).Row).Cells

        If MyCell.Value Like "*Submitted*" Then
            With MyCell
                .Offset(1, 1).Cut .Offset(0, 1)
                .Offset(2, 1).Cut .Offset(0, 2)
                .Offset(3, 1).Cut .Offset(0, 3)
                .Offset(4, 0).Cut .Offset(0, 4)
                .Offset(0, 3).Cut .Offset(0, 0) '<< this one last!
            End with
        End If
   
    Next MyCell
End Sub

【讨论】:

  • 谢谢蒂姆!但这给了我与上面提到的相同的结果。第 2 个偏移线出现“需要对象”错误Offset(1, 1).Cut .Offset(0, 1)
  • 好的,我刚刚注意到您实际上是在用第一个剪辑替换 MyCell。 - 我可以稍后修复,或者只是将第一个剪辑移到最后一个操作
  • 做到了 - 非常感谢 - 这是我的怀疑。非常感谢!!!
猜你喜欢
  • 2016-10-07
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多