1
Sub Process_A()
\<some code here\>
MsgBox "Process completed."
End Sub

Sub Process_B()
\<some code here\>
MsgBox "Process completed."
End Sub

Sub Process_C()
\<some code here\>
MsgBox "Process completed."
End Sub

Sub All_Processes()
Call Process_A
Call Process_B
Call Process_C
End Sub

This is some code I have using Excel VBA.

I want MsgBox to appear when I run Process_A, Process_B or Process_C individually, but this also meant that when I run All_Processes, MsgBox appears 3 times.

Is there a way for me to run All_Processes and have Msgbox appear only once after Process_C is completed? Thank you.

Ken White
  • 123,280
  • 14
  • 225
  • 444
Scotty
  • 11
  • 1

2 Answers2

3

You could create an optional Boolean parameter for each process that controls whether or not it reports its completion.

Something like:

Sub ProcessA(Optional notify As Boolean = False)
    'some code
    If notify Then MsgBox "Process A completed."
End Sub

Sub ProcessB(Optional notify As Boolean = False)
    'some code
    If notify Then MsgBox "Process B completed."
End Sub

Sub ProcessC(Optional notify As Boolean = False)
    'some code
    If notify Then MsgBox "Process C completed."
End Sub

Sub AllProcesses()
    ProcessA
    ProcessB
    ProcessC True
End Sub
John Coleman
  • 51,337
  • 7
  • 54
  • 119
0

Maybe change your procedures to functions that can return whether the code was successful or not.

Public Function Process_A() As String
    'Replace "Incomplete" with some code that
    'calculates whether procedure completed or not.
    Process_A = "Incomplete"
End Function

Public Function Process_B() As String
    Process_B = "Complete"
End Function

Public Function Process_C() As String
    Process_C = "Complete"
End Function

Public Sub All_Processes()

    Dim resp As String
    
    resp = "A: " & Process_A & vbCr & _
           "B: " & Process_B & vbCr & _
           "C: " & Process_C & vbCr
           
    MsgBox "Process results: " & vbCr & vbCr & resp

End Sub
Darren Bartrup-Cook
  • 18,362
  • 1
  • 23
  • 45