Excel VBA调用模块

0 excel vba excel-vba

所以我把这段代码放在一起,但我在运行它时遇到了麻烦.我试着调用子程序,但什么都没发生.我被困在如何调用我创建的模块上.我还创建了一个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)

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

Mat*_*don 5

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

Call Module2
Call Module3
Call Module4
Run Code Online (Sandbox Code Playgroud)

=)

您没有"调用"模块,模块是程序和功能的容器.你"称之为"的是程序和功能.所以,如果你有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)