excel - 如何合并重复的 VBA 代码?
问题描述
我是编写 VBA 的新手,并且一直在通过堆栈溢出来完成我迄今为止所需要的。我编写的代码对我来说很好,但其他人似乎遇到了编译问题。我把代码缩小了(实际字符串中有 1204 个过程,不用说,很多)。
我正在寻求帮助以巩固我所写的内容。请您看一下并推荐一种缩小此代码以减轻冗余的好方法吗?
感谢您的帮助!
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c&, i&, k, v, col
DoEvents
ReDim v(1 To 1224, 1 To 2)
For i = 1 To 102
v(i, 1) = "O" & 6 + i
Select Case i
Case Is <= 70
v(i, 2) = "=A"
Case Is <= 100
v(i, 2) = "=B"
Case Else
v(i, 2) = "=D"
End Select
Next i
For i = 103 To 204
v(i, 1) = "T" & 6 + i
Select Case i
Case Is <= 172
v(i, 2) = "=A"
Case Is <= 202
v(i, 2) = "=B"
Case Else
v(i, 2) = "=D"
End Select
Next i
For i = 205 To 306
v(i, 1) = "Y" & 6 + i
Select Case i
Case Is <= 274
v(i, 2) = "=A"
Case Is <= 304
v(i, 2) = "=B"
Case Else
v(i, 2) = "=D"
End Select
Next i
With Application
.Calculation = xlCalculationManual
.EnableEvents = False
For i = 1 To UBound(v)
With Range(v(i, 1))
If Not Intersect(Target, .Cells) Is Nothing Then
If Len(.Value2) = 0 Then
.Formula = v(i, 2)
End If
End If
End With
Next
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
解决方案
像这样的东西应该工作
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long, c As Range, f
On Error GoTo haveError
Application.EnableEvents = False
For Each c In Target.Cells 'loop over Target cells
For i = 15 To 70 Step 5 'check each column from O to BR
If Not Application.Intersect(c, Me.Range(Me.Cells(7, i), Me.Cells(109, i))) Is Nothing Then
'Target cell is in the column range...
If Len(c.Value) = 0 and c.Row <> 35 Then
Select Case c.Row
Case 7 To 77: f = "=A"
Case 78 To 107: f = "=B"
Case Else: f = "=D"
End Select
c.Formula2 = f 'this formula seems incomplete though?
End If
End If
Exit For 'stop checking for this cell
Next i
Next c
'ensure events not left off in the event of an error
haveError:
Application.EnableEvents = True
End Sub
推荐阅读
- c# - 查找动态生成的组件 Unity
- java - 如何连接数据库以插入、更新、删除 android studio
- duplicates - 自动复制网页其他页面中的部分
- laravel - 在laravel中按字母顺序排序集合
- sql - 如何在 HIVE hql 中添加两个计数?
- java - Performant selection of correct getter based on a string
- javascript - 反应更多 折叠和展开
- c# - 这些 HttpClient 调用是否被并行调用?
- javascript - 如何修复我不断得到的未定义结果?
- python - Python将列表列表组织成特定格式