所以我把这段代码放在一起,但是我在运行它时遇到了麻烦。我试着调用子程序,但什么都没发生。我被困在如何调用我创建的模块上。我还创建了一个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
我无法弄明白我到底错在哪里。如果有人看到我遗失的东西,请告诉我。我感谢任何帮助
答案 0 :(得分:5)
这是我们需要查看的所有代码:
Call Module2 Call Module3 Call Module4
=)
你不打电话"模块,模块是程序和功能的容器。你打电话给",是程序和功能。因此,如果您在Sub DoSomething()
中有Module5
,则可以像这样调用它:
Module5.DoSomething
或者,如果其他地方没有DoSomething
:
DoSomething
就像你会像VBA.Interaction.MsgBox
一样调用MsgBox "Hello!"
。请注意,您无需在任何地方设置Call
关键字即可使用。
您的Module2.SourceApprove
程序有参数。因此,您不能SourceApprove
或Module2.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)