寻找关于编写宏的最佳实践的一些建议。我目前正在撰写一篇文章,一旦完成,将有大约200个IF / ELSE条款。每个条款都有大约10个IF / ELSE子条款。
从排列的角度来看,它会非常混乱。
但是,从最佳实践的角度来看,最好是:
此外,这些选项中的每一个如何影响宏的速度(如选项1中的选项2将比选项2更慢或更快)?它正在处理的电子表格将有大约50k行,大约13列。
编辑1:
这是代码开头的一个例子(很长很乱):
cm
编辑2:
数据格式为ADD1(Cells(j,5),ADD2(..6),ADD3(... 7),ADD4(.. 8),ADD5(... 9,通常是帖子需要格式化的代码)和ADD6(..10,ISO国家代码)。
代码的要点是检查每一行,如果邮政编码的国家格式正确(例如美国,爱尔兰,奥地利等),那么它什么都不做。但是,如果缺少部件或顺序不正确,它将继续修复故障(添加详细信息,删除重复数据,移动数据或将数据连接到字段中),或突出显示数据有故障
由于每个国家都有不同的规则,而且有些国家有超过1条规则,因此会非常混乱。
答案 0 :(得分:3)
在代码中摆脱许多重复因素会对可读性有很大帮助。例如,使用一些范围变量来删除所有重复的Cells(j, xx)
- 这将大大整理你的代码,并且更容易维护/重构整洁的代码。
Dim rw As Range, c8, c9, c10
Set rw = Rows(j)
'use better variable names here...
Set c8 = rw.Cells(8)
Set c9 = rw.Cells(9)
Set c10 = rw.Cells(10)
If c10 = "AT" Then
ElseIf c10 = "BE" Then
If c9 <> "" Then
If Left(c9, 2) = "B-" And IsNumeric(Right(c9, 1)) And Len(c9) = 6 Then
c8 = c9 & " " & c8
c9.ClearContents
c8.Style = "input"
ElseIf IsNumeric(Left(c9, 2)) And IsNumeric(Right(c9, 1)) = True Then
c9 = "B-" & c9
c8 = c9 & " " & c8
c9.ClearContents
c8.Style = "input"
ElseIf IsNumeric(Right(c9, 2)) And Left(c9, 2) <> "B-" Then
c9 = Trim(Right(c9, 6) & " " & Left(c9, Len(c9) - 6))
c9.Style = "Input"
End If
End If