Excel VBA最佳实践:一个长宏或多个小宏?

时间:2015-12-23 11:02:23

标签: excel vba excel-vba

寻找关于编写宏的最佳实践的一些建议。我目前正在撰写一篇文章,一旦完成,将有大约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条规则,因此会非常混乱。

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