Excel VBA调用模块

时间:2018-05-01 18:29:07

标签: excel vba excel-vba

所以我把这段代码放在一起,但是我在运行它时遇到了麻烦。我试着调用子程序,但什么都没发生。我被困在如何调用我创建的模块上。我还创建了一个MainMenu()子,我想知道这可能是一个错误,我应该从sheet1运行我的MainMenu。也许有人有更好的主意。

我最初的计划是创建一个命令按钮,如果点击了包含MainMenu()的module1,它将会运行。

Sub CommandButton1()

End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

在module1中,有一个循环运行并调用其他三个模块

Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim row_sum As Integer

Sub Main()
'Finding the last row
row_sum = 0

'row check upto 5,000
For k = 1 To 5000
    ' if cells in k are blank then the row_check = 0, else row_check = 1
    If CStr(Cells(k, 1)) = "" Then row_check = 0 Else row_check = 1
    'adding the total of row_check to row_sum
    row_sum = row_sum + row_check
Next k
For j = 2 To row_sum
    Call Module2
    Call Module3
    Call Module4

Next j

End Sub

我无法弄明白我到底错在哪里。如果有人看到我遗失的东西,请告诉我。我感谢任何帮助

1 个答案:

答案 0 :(得分:5)

这是我们需要查看的所有代码:

Call Module2
Call Module3
Call Module4

=)

你不打电话"模块,模块是程序和功能的容器。你打电话给",是程序和功能。因此,如果您在Sub DoSomething()中有Module5,则可以像这样调用它:

Module5.DoSomething

或者,如果其他地方没有DoSomething

DoSomething

就像你会像VBA.Interaction.MsgBox一样调用MsgBox "Hello!"。请注意,您无需在任何地方设置Call关键字即可使用。

您的Module2.SourceApprove程序有参数。因此,您不能SourceApproveModule2.SourceApprove,VBA会抱怨参数不是可选的

因此,您以逗号分隔的值列表提供参数:

Module2.SourceApprove "first", "second", "third", 42

这些也可能是变数。

Dim foo As Long
foo = 42

Module2.SourceApprove "first", "second", "third", foo

考虑为参数使用有意义的名称 - 这样 IntelliSense 将帮助您了解要提供的值。您也可以(应该)指定参数的类型,以便"首先"不能作为需要数字的参数的值提供。

Sub SourceApprove(ByVal i As Long, ByVal j As Long, ByVal k As Long, ByVal row_sum As Double)