我的问题可能非常愚蠢。但我想知道这是可能的,怎么样? 从其中一个函数\ sub我可以创建另一个子\函数。
示例:
Sub first()
x = 10
if x = 10 Then
'Add Another Sub based on the Condition in another module.
Sub Second()
End Sub
End If
End Sub
我真正的问题是我正在尝试根据某些条件在循环中添加新工作表。如果我能够添加工作表,那么我需要在另一个工作表中创建一些按钮,以及这些按钮的功能。 请帮忙。
答案 0 :(得分:2)
默认情况下,我的方法是:
Sub first()
x = 10
if x = 10 Then
'Call Another Sub based on the Condition.
Call Second()
End If
End Sub
Sub Second()
' do stuff
End Sub
如果您要创建新工作表并添加带有代码的按钮,则应完成所有代码,按钮设计等。任何自定义都将通过参数。
答案 1 :(得分:0)
这更多是关于代码的设计。首先,你不能把一个sub放在另一个sub中,不幸的是它不是如何工作的。
可以做的是使用范围和条件来控制代码流,并确保某些部分仅在执行时执行你希望他们成为。
最简单且推荐的方法是只编写其他子文件,但只有在满足特定条件时才调用。
Public Sub Main_Sub()
Dim x As Integer
x = 11 '// Change x to 5 and the other sub won't run
If x > 10 Then
Other_Sub
'// Code execution will resume here once 'Other_Sub' has finished
MsgBox "Other Sub complete!"
End If
End Sub
Private Sub Other_Sub()
MsgBox "You're in the other sub now!"
End Sub
另一种方法是,如果你的条件不满足,只需退出sub,尽管这比错误处理更多地用于错误处理:
Public Sub Main_Sub()
Dim x As Integer
x = 11 '// Change x to 5 and the other sub won't run
If x > 10 Then
Other_Sub
'// Code execution will resume here once 'Other_Sub' has finished
MsgBox "Other Sub complete!"
Else
Exit Sub
End If
MsgBox "You will only see this message if x was greater than 10!"
End Sub
Private Sub Other_Sub()
MsgBox "You're in the other sub now!"
End Sub
最后一种方法可能是使用标签,虽然它是一个可行的解决方案但我建议反对它,因为它严重影响代码的可读性和逻辑性:
Public Sub Main_Sub()
Dim x As Integer
x = 11 '// Change x to 5 and the other sub won't run
If x < 11 Then GoTo Skip_Other_Sub:
Other_Sub
Skip_Other_Sub:
MsgBox "You will see this regardless of the other sub being run!"
End Sub
Private Sub Other_Sub()
MsgBox "You're in the other sub now!"
End Sub
这里的要点是,编写可能需要或可能不需要的代码的所有更好,并且有条件地调用它而不是尝试创建代码&#34; on苍蝇&#34;最好是杂乱无章,需要以编程方式访问VBE,如果你对自己的行为没有100%的信心,可能会让你的机器容易受到攻击。