【问题标题】:VBA: Using the same variable name in different subsVBA:在不同的潜艇中使用相同的变量名
【发布时间】:2020-10-20 10:32:30
【问题描述】:

我有一个关于命名约定和在不同子项中使用相同变量名的问题。自从我开始使用 VBA 以来,它就一直困扰着我。

  1. 在不同的模块中使用相同的变量名是个好习惯吗?潜艇不相互交互。例如,我在工作簿中的两个不同模块中循环浏览工作表,到目前为止,计数器变量使用相同的名称 (count_ws):

模块 1:

Sub Test()
    Dim count_ws As Long
    
    For count_ws = 2 To ThisWorkbook.Worksheets.Count
        Debug.Print "Module1"
    Next count_ws
End Sub

模块 2:

Sub Test2()
    Dim count_ws As Long
    
    For count_ws = 2 To ThisWorkbook.Worksheets.Count
        Debug.Print "Module2"
    Next count_ws
End Sub

如果这样不行,最好的选择是什么?我重复名字的原因是我不想让变量名太长,比如count_ws_module1count_ws_module2

  1. 将变量传递给另一个子:同样的问题,是否建议保持相同的名称?我觉得如果我在第一个 sub 中调用变量一个名称,然后在另一个 sub 中调用其他名称,这可能会造成混淆。

    子测试3() 将 wsLoans 调暗为工作表 将 wsBS 调暗为工作表

         Set wsLoans = ThisWorkbook.Sheets(2)
         Set wsBS = ThisWorkbook.Sheets(3)
    
         Call Test4(wsLoans)
     End Sub
    
     Sub Test4(ByVal wsLoans As Worksheet)
         wsLoans.Range("A1").Value = "Module 4"
     End Sub
    

所以,对我来说,这种方法似乎是最易读的并且可以避免混淆,但我很高兴听到其他意见。在Sub Test4 中,我可以简单地将工作表命名为ws。或者wsLoans_Test4,但这真的有帮助吗?

我只是想确保我做对了并养成了良好的习惯。

【问题讨论】:

  • 在不同的子程序中重用变量名是完全没问题的。只是不要在更高的范围内重用变量的名称。
  • 在我看来,最好将count_ws 命名为worksheets_count 或直接命名为count。我觉得变量的名字应该读起来简单明了。
  • 这与变量的范围有关。 support.microsoft.com/en-gb/help/141693/… 在多个不交互的宏函数中使用相同的名称非常好,并且获得良好的名称约定可以帮助您在 6 个月后返回代码时破译代码。它还有助于代码的可重用性,因为您可以在模块之间复制和粘贴,并且需要较少的编辑(假设您可以以这种方式重用变量)
  • @Enigmativity 是的,worksheets_count使它更清晰。我有时会为命名而挣扎,不确定我是否选择了最佳选择。如果它们使代码更具可读性,我不应该回避更长的变量名,对吧?我查看了命名约定和不同的处理方法,但是在编写代码时,总是会得到一个不可靠的名称。

标签: excel vba naming


【解决方案1】:

这个问题可能会引发无休止的讨论,您对命名约定的整个主题思考得越多,它就会越深入。由于这是强烈的意见基础,这类问题通常在 Stack Overflow 上关闭。

我将快速列出 3 个方面:

(1) 子程序(或函数)可以看作是一个封闭的对象,通常被看作是一个黑盒子。它应该完成一项已定义的任务,但是,如何完成并不重要。它可以存储在不同的模块中,并且可以由不同的人编写。您不必问某人“您是否已经使用过变量名称count_ws - 如果没有,我想为我保留它。每个例程都应该使用它喜欢的任何名称。

(2) 作为程序员,你应该有一些命名约定。它们不需要写下来,但你应该有一个特定的一致性。您是否将工作表变量命名为wsDatadataWs,您使用camelCase、PascalCase 还是snake_case,是否使用Hungarion Notation...因此,当它们服务于相同的例程时,您可能会在不同的例程中以相同的方式命名变量或类似的目的——为什么不呢。同样,如果您已经使用相同的名称,则不必查看代码。例外情况是,如果您在同一个例程中处理,不要将同一个变量用于不同的目的,并且在嵌套循环中命名迭代变量时要小心。

(3) 函数参数名称用作文档。参数是两个例程之间的接口,如果你给它们起个好名字,就更容易弄清楚它的目的是什么。如果你想调用一个例程Copy,它接收两个名为p1p2的参数,你首先必须弄清楚什么是源和目标,而pFrompTo很明显.也就是说,如果您对自己的命名感到满意,那么没有理由不将调用例程的变量命名为子例程的参数名称。

【讨论】:

    猜你喜欢
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多