【发布时间】:2019-01-14 09:32:14
【问题描述】:
我从 3 个月开始就开始使用 excel vba,这是(在大学学习了一门编程课程之后)我第一次真正接触到编程。请考虑到这一点。
我建立了一个包含许多文本框的用户表单。因此,我编写了一个 makro,它首先检查用户是否在每个文本框中输入了一个值,以便之后程序开始。如果每个文本框中都没有值,我希望在 msgbox 之后退出子用户再次填充每个文本框。很简单,对吧?
我认为最好的管理方法是使用Go to-statement。在向我的老板展示代码后,他告诉我我不应该使用这个语句来避免某种意大利面条代码。他告诉我真正的程序员永远不会使用这种说法,而是会尝试以他的方式解决问题。这是我的代码的样子:
Private Sub SaveButton_Click()
Dim i As Integer
'mandatory textboxes:
For i = 1 To 13
If UserForm1.Controls("Textbox" & i) = "" Then: GoTo again
Next
'procedure...
Exit Sub
again:
MsgBox "Please fill in every mandatory textbox"
End Sub
我的问题:在每种情况下都避免这种说法是否正确?永远不要使用这种说法真的是某种潜规则吗?这有什么优点和缺点,我有哪些选择(尤其是在这种情况下)?
感谢每一个有用的答案。谢谢!
【问题讨论】:
-
简单的回答:永远不要使用
GoTo,除非它在On Error …后面。如果有任何机会避免GoTo,请避免它。它使您的代码难以维护,被认为是一种不好的做法。 -
He told me a real programmer would never use this statement- 这不是真的,如果是真的,它就不会包含在语言中。然而,使用 goto 很容易编写杂乱的代码。一个好的经验法则是只使用 goto 来模拟缺少的语言结构(例如 VBA 缺少Continuekeyword)并过早退出深度嵌套的循环。