Как определить в подпроцедуре, из какого случая она была вызвана? - PullRequest
0 голосов
/ 21 июня 2019

Как я могу поместить оператор if-else в подпроцедуру (скажем, Sub C), чтобы я знал, какой случай (из родительского sub) вызвал sub C?

Я не знаю оэто возможно или нет, так как я все еще изучаю VBA!

Фактический код:

Sub UserInput()
userResponse = InputBox(Prompt:="Please select the action you want to perform?" & vbNewLine & vbNewLine & "Enter 1 to sort test cases as per test-data-input" & vbNewLine & "Enter 2 to Rectify steps")

Select Case userResponse
    Case 1
        Call MainAppenderSub         
    Case 2
        Call MainAppenderSub                
End Select
End Sub

Sub MainAppenderSub()
    Some code
    appendCellContent (lreturn)    
End Sub

Sub appendCellContent(lreturn As Long)  

   'Some code
   'Here I want to call appender1 only if it has been called by Case 1 else call appeder2 if it has been called by Case 2

End Sub

Sub appender1(lreturn As Long)

Dim i As Long
For i = 1 To lreturn
    If  ActiveCell.Offset(0, 1) <> Empty Then
        ActiveCell.Formula = "=RC[2]"
    End If
        ActiveCell.Offset(1, 0).Activate
Next i

End Sub

Sub appender2(lreturn As Long)

Dim i As Long
For i = 1 To lreturn
    If  ActiveCell.Offset(0, 1) <> Empty Then
        ActiveCell.Value = "=RC[-1]&""-""&RC[2]"
    End If
        ActiveCell.Offset(1, 0).Activate
Next i

End Sub

1 Ответ

1 голос
/ 21 июня 2019

ОК, я думаю, это то, что вы спрашиваете

Sub a()
    b 1
    Dim c As Integer
    c = 5
    b c
End Sub

Sub b(arg As Integer)
    MsgBox arg '1 first time, then 5 second time
End Sub

Вам нужно передать аргумент, который может быть фиксированным или переменным, в Sub.Поэтому b 1 говорит, что запускает подпрограмму или функцию с именем b и отправляет аргумент 1.

Подпрограмма b ожидает этот аргумент и выводит его в виде окна сообщения.

В вашем случае вы можете использовать

MainAppenderSub userResponse

или

Call MainAppenderSub(userResponse)

(которые в точности совпадают друг с другом)

Как это будетработать с вашим кодом

Sub UserInput()
    userResponse = InputBox(Prompt:="Please select the action you want to perform?" & vbNewLine & vbNewLine & "Enter 1 to sort test cases as per test-data-input" & vbNewLine & "Enter 2 to Rectify steps")

    MainAppenderSub userResponse
End Sub

Sub MainAppenderSub(arg As Long)
    'Some code
    appendCellContent arg, lreturn 'where does lreturn come from
End Sub

Sub appendCellContent(arg As Long, anotherArg as Long)
   'Some code
   'Here I want to call appender1 only if it has been called by Case 1 else call appeder2 if it has been called by Case 2
    appender arg, anotherArg
End Sub

Sub appender(arg As Long, lreturn as Long)

    Dim i As Long
    For i = 1 To lreturn
        If ActiveCell.Offset(0, 1) <> Empty Then
            Select Case arg
                Case 1
                    ActiveCell.Formula = "=RC[2]"
                Case 2
                    ActiveCell.Value = "=RC[-1]&""-""&RC[2]"
            End Select
        End If
            ActiveCell.Offset(1, 0).Activate
    Next i

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...