所以我把这段代码放在一起,但我在运行它时遇到了麻烦.我试着调用子程序,但什么都没发生.我被困在如何调用我创建的模块上.我还创建了一个MainMenu()子,我想知道这可能是一个错误,我应该从sheet1运行我的MainMenu.也许有人有更好的主意.
我最初的计划是创建一个命令按钮,如果点击了包含MainMenu()的module1将运行.
Sub CommandButton1()
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
我无法弄明白我到底错在哪里.如果有人看到我遗失的东西,请告诉我.我感谢任何帮助
这是我们需要看到的所有代码:
Run Code Online (Sandbox Code Playgroud)Call Module2 Call Module3 Call Module4
=)
您没有"调用"模块,模块是程序和功能的容器.你"称之为"的是程序和功能.所以,如果你有Sub DoSomething()在Module5,你可以调用它像这样:
Module5.DoSomething
Run Code Online (Sandbox Code Playgroud)
或者,如果没有DoSomething其他地方:
DoSomething
Run Code Online (Sandbox Code Playgroud)
就像你会调用VBA.Interaction.MsgBox一样MsgBox "Hello!".请注意,您无需在Call任何地方使用关键字即可.
您的Module2.SourceApprove程序有参数.所以你不能只做SourceApprove或者Module2.SourceApprove,VBA会抱怨参数不是可选的.
因此,您以逗号分隔的值列表提供参数:
Module2.SourceApprove "first", "second", "third", 42
Run Code Online (Sandbox Code Playgroud)
这些也可能是变数.
Dim foo As Long
foo = 42
Module2.SourceApprove "first", "second", "third", foo
Run Code Online (Sandbox Code Playgroud)
考虑为参数使用有意义的名称 - 这样IntelliSense将帮助您了解要提供的值.您也可以(应该)指定参数的类型,以便"first"不能作为需要数字的参数的值提供.
Sub SourceApprove(ByVal i As Long, ByVal j As Long, ByVal k As Long, ByVal row_sum As Double)
Run Code Online (Sandbox Code Playgroud)