Модули вызова Excel VBA - PullRequest
0 голосов
/ 01 мая 2018

Итак, я собрал этот код, но у меня проблемы с его запуском. Я попытался вызвать подпрограммы, но ничего не происходило. Я застрял на том, как вызвать модули, которые я создал. Я также создал подпрограмму MainMenu (), и мне интересно, не было ли это ошибкой, и я должен был запустить MainMenu из sheet1. Может быть, у кого-то есть идея получше.

Мой первоначальный план состоял в том, чтобы создать командную кнопку, в которой при щелчке по модулю 1, который содержит MainMenu (), будет выполняться.

Sub CommandButton1()

End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

В модуле 1 есть цикл, который запускает и вызывает другие три модуля

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 голосов
/ 01 мая 2018

Это весь код, который нам нужен, чтобы увидеть:

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 поможет вам узнать, какие значения предоставить. Вы также можете (должны) указать тип параметров, чтобы «first» не мог быть указан в качестве значения параметра, для которого требуется число.

Sub SourceApprove(ByVal i As Long, ByVal j As Long, ByVal k As Long, ByVal row_sum As Double)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...