【发布时间】:2020-10-20 10:32:30
【问题描述】:
我有一个关于命名约定和在不同子项中使用相同变量名的问题。自从我开始使用 VBA 以来,它就一直困扰着我。
- 在不同的模块中使用相同的变量名是个好习惯吗?潜艇不相互交互。例如,我在工作簿中的两个不同模块中循环浏览工作表,到目前为止,计数器变量使用相同的名称 (
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_module1和count_ws_module2
-
将变量传递给另一个子:同样的问题,是否建议保持相同的名称?我觉得如果我在第一个 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使它更清晰。我有时会为命名而挣扎,不确定我是否选择了最佳选择。如果它们使代码更具可读性,我不应该回避更长的变量名,对吧?我查看了命名约定和不同的处理方法,但是在编写代码时,总是会得到一个不可靠的名称。