首页 > 解决方案 > 将序列号分配给第一列中的特定范围

问题描述

我正在尝试在我的项目中添加一个 vba 部分,它将序列号分配给第一列的彩色范围,但是没有成功。我想出了以下代码:

Private Sub CommandButton1_Click()

    On Error GoTo ErrorHandler
    
    Dim serial, i, EndRow, StartRow As Integer
    Dim row As Range, cell As Range
    
    'Discover the data starting and end rows
    i = 1
    serial = 1
    StartRow = 1
    EndRow = 1

    'Check the first cell of each row for the data-start background colour
    For Each row In ActiveSheet.UsedRange.Rows
        Cells(row.row, 1).Select
        If i < 3 Then
            If Hex(cell.Interior.Color) = "47AD70" And i = 1 Then
                Cells(row.row, 1).Value = Abs(serial)
                StartRow = serial
                serial = serial + 1
                i = 2
            ElseIf Hex(cell.Interior.Color) = "47AD70" And iRow = 2 Then
                Cells(row.row, 1).Value = Abs(serial)
                serial = serial + 1
            ElseIf Hex(cell.Interior.Color) <> "47AD70" And iRow = 2 Then
                EndRow = serial - 1
                i = 3
            End If
        End If
    Next row
    
ErrorHandler:
    If Err.Number <> 0 Then
        Msg = "Error # " & Str(Err.Number) & " was generated by " _
         & Err.Source & Chr(13) & "Error Line: " & Erl & Chr(13) & Err.Description
        MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
    End If
End Sub

变量 i 用作检测颜色范围的标志。

在此处输入图像描述

最后,绿色单元格 A5 到 A22 应该填充数字 1 到 18。变量 StartRow 最终应该被分配值 = 5(彩色范围的起始行),并且 EndRow 最终应该被分配值 = 22(彩色范围的结束行。

我的代码生成错误#91、对象变量或未设置块变量。

除了我无法纠正的错误之外,我知道代码本身也不是那么聪明,并且可能有更有效的代码来实现目标。

有人可以提出解决方案甚至更好的代码吗?非常感谢

标签: excelvbafor-loop

解决方案


  1. 请更换
Cells(row.row, 1).Select

Set cell = cells(row.row, 1)
cell.Select 'not necessary, but you maybe want seeing what happens during testing...

只选择一个单元格,不会告诉 VBA 这是代码需要的单元格。:)

  1. 你有一个错字:
And iRow = 2 Then

它,显然应该是:

And i = 2 Then
  1. 这是使用EndRow变量的目的。如果它不是为了做某事而使用的。它只在最后收到一个值......

  2. On Error GoTo ErrorHandlerOn Error Resume Next仅当您输入第一行代码时才能使用/有意义。否则,将不会捕获任何错误。

那么,不推荐使用像row,之类的变量名cell。他们可能会在调试复杂代码时产生问题......


推荐阅读