excel - 将序列号分配给第一列中的特定范围
问题描述
我正在尝试在我的项目中添加一个 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、对象变量或未设置块变量。
除了我无法纠正的错误之外,我知道代码本身也不是那么聪明,并且可能有更有效的代码来实现目标。
有人可以提出解决方案甚至更好的代码吗?非常感谢
解决方案
- 请更换
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 这是代码需要的单元格。:)
- 你有一个错字:
And iRow = 2 Then
它,显然应该是:
And i = 2 Then
这是使用
EndRow
变量的目的。如果它不是为了做某事而使用的。它只在最后收到一个值......On Error GoTo ErrorHandler
On Error Resume Next
仅当您输入第一行代码时才能使用/有意义。否则,将不会捕获任何错误。
那么,不推荐使用像row
,之类的变量名cell
。他们可能会在调试复杂代码时产生问题......
推荐阅读
- php - 我想除以整数类型并四舍五入现有的小数点
- javascript - 使用 javascript 和 CSS 绘制曲线上的 sin 和 cos 动画
- typescript - 如何使用 cdk 获取帐户 ID
- omnet++ - 为什么 INET Aodv 路由在 OMNeT++ 中不起作用?
- sharepoint - 为什么我不能将 SharepointForm1 重命名为其他名称?
- keystore - 我应该为每个要加密的字符串创建一个新的 SecretKey 吗?
- python - 从 html 列表返回 json 字符串
- python - 类数,4,与 target_names 的大小,6 不匹配。尝试指定标签参数
- sql - 在 SQL Plus 中更新查询而不是提交并指导我在另一个会话中提交
- ios - 如何按字母顺序对 API 中的 JSON 数组进行排序?