【发布时间】:2020-08-28 07:13:57
【问题描述】:
我正在尝试在我的项目中添加一个 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,对象变量或未设置块变量。
除了我无法纠正的错误之外,我知道代码本身也不是那么聪明,并且可能有更有效的代码来实现目标。
有人可以提出解决方案甚至更好的代码吗? 非常感谢
【问题讨论】: