自3个月以来,我一直在使用excel vba,这是(大学的一门编程课程之后)我第一次真正接触编程。请考虑到这一点。
我建立了一个带有许多文本框的用户窗体。因此,我编写了一个Makro,它首先检查用户是否在每个文本框中都输入了一个值,以便随后开始该过程。如果每个文本框中都没有值,我希望msgbox之后的exit子用户再次填充每个文本框。安静很简单,对吧?
我认为管理此问题的最佳方法是使用Go to
语句。向老板展示了代码之后,他告诉我,我绝对不要使用此语句来避免使用意大利面条式的代码。他告诉我真正的程序员永远不会使用此语句,而是会努力解决。这是我的代码:
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
我的问题:在每种情况下都避免使用此声明是否正确?永远不使用该语句真的是某种潜规则吗?优点和缺点是什么,我有哪些选择(尤其是在这种情况下)?
我感谢所有有用的答案。谢谢!
答案 0 :(得分:3)
因此可以重写。因此,在goto下方将替换为Exit For
,然后进行后续测试。除非在On Error Goto <lable>
语句中,否则避免使用goto。
Private Sub SaveButton_Click()
Dim i As Integer
Dim bGut As Boolean: bGut = True
'mandatory textboxes:
For i = 1 To 13
If UserForm1.Controls("Textbox" & i) = "" Then
bGut = False
Exit For '* skip out
End If
Next
If Not bGut Then
MsgBox "Please fill in every mandatory textbox"
Else
'* start processing
End If
End Sub
答案 1 :(得分:3)
您的代码可以很容易地如下重写:
Private Sub SaveButton_Click()
Dim i As Integer
'mandatory textboxes:
For i = 1 To 13
If UserForm1.Controls("Textbox" & i) = "" Then
MsgBox "Please fill in every mandatory textbox"
Exit Sub
End If
Next
End Sub
永远不要使用GoTo
,除非它落后于On Error …
或不可避免。如果有机会避免使用GoTo
,请避免使用。它使您的代码难以维护,并且被认为是不好的做法。
正如GSerg所指出的,在极少数情况下,无法避免GoTo
。例如。使用GoTo
模拟缺少的语言结构(例如VBA缺少Continue keyword)并过早退出深层嵌套的循环。