从另一个函数\ sub添加Function \ Sub

时间:2016-03-30 05:23:05

标签: vba excel-vba excel

我的问题可能非常愚蠢。但我想知道这是可能的,怎么样? 从其中一个函数\ 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

我真正的问题是我正在尝试根据某些条件在循环中添加新工作表。如果我能够添加工作表,那么我需要在另一个工作表中创建一些按钮,以及这些按钮的功能。 请帮忙。

2 个答案:

答案 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%的信心,可能会让你的机器容易受到攻击。