Link to home
Start Free TrialLog in
Avatar of mikes6058
mikes6058

asked on

Run one macro straight after another

Sub SendEmail()
'///Set up the Excel variables.
    Const MsgSignature As String = "Supplier Relationship Team"
    Const sSubj As String = "Supplier Meeting Action Points"
    Dim rCl As Range, rRng As Range
    Dim OLApp As Object, olMailItm As Object
    Dim iCnt As Integer
    Dim sTo As String, sMsg As String

    '///Create the Outlook application and the empty email.
    Set OLApp = CreateObject("Outlook.Application")
    Set olMailItm = OLApp.CreateItem(0)


    sMsg = "Hi,<br><br>" & _
           "Please could you complete the action points found on the supplier meeting report (link below) <br><br>" & _
           "Once you have completed your action points please change the status from the drop down list found in column C/D and leave any relevant comments in the STAKEHOLDER COMMENTS column.<br><br>" & _
           "Once completed please click the 'close' button found under the SUPPLIER MEETINGS tab at the top of the page.:<br><br>" & _
           "If you have any questions regarding your action points please contact the appropriate category manager found in cell E6 of the sheet.:<br><br>" & _
           "Please open the meeting report using the link below and select the meeting report link called " & Range("B2") & " found in column E<br><br>" & _
           "Click on the link below to open the file (Click 'Ok' and 'Continue' to all prompts when opening the file) :<br><br> " & _
           "<A HREF=""file://" & ActiveWorkbook.FullName & _
           """>Link to the file</A>" & _
           "<br><br>Regards," & _
           "<br><br>" & MsgSignature

    '/// create list of recipients

    Set rRng = Range("B86:B93")

    With olMailItm

        For Each rCl In rRng.Cells
            If rCl.Value > 0 Then
                If sTo = "" Then
                    sTo = rCl.Value
                Else
                    sTo = sTo & ";" & rCl.Value
                End If
                iCnt = iCnt + 1
            End If
        Next rCl

        If iCnt < 2 Then
            MsgBox "You nave not entered any recipients.", vbCritical, MsgSignature
            Exit Sub
        End If

        .To = sTo
        .Subject = sSubj
        .HTMLBody = sMsg
        .Display
        .Send
    End With

    '///Clean up the Outlook application.
    Set olMailItm = Nothing
    Set OLApp = Nothing

    Exit Sub

Errhandler:
    MsgBox Error(Err)
    Resume Next

End Sub

Open in new window

Option Explicit

Sub NewCode()
''/// the sheet name will need to be changed to actual name used in the final workbook

    If ActiveSheet.Name = "Stakeholder_Actionpoints" Then
        MsgBox "You have the rsults sheet active.", vbCritical, "Error"
        Exit Sub
    End If
    Dim ws As Worksheet
    Dim rToCopy As Range
    Dim lRw As Long
    Dim iX As Integer
    '1. Copy all values (including blank cell values) from the range A14:E18 and paste under the relevant column headings found in sheet Stakeholder_Actionpoints
    Set ws = ActiveSheet
    Set rToCopy = ws.Range(Cells(14, 1), Cells(18, 5))


    With Sheet55
        lRw = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        rToCopy.Columns(1).Copy
        Application.Goto .Cells(lRw, 2)
        ActiveSheet.Paste Link:=True
        rToCopy.Columns(2).Copy
        Application.Goto .Cells(lRw, 1)
        ActiveSheet.Paste Link:=True
        rToCopy.Columns(3).Copy
        Application.Goto .Cells(lRw, 5)
        ActiveSheet.Paste Link:=True
        rToCopy.Columns(5).Copy
        Application.Goto .Cells(lRw, 3)
        ActiveSheet.Paste Link:=True
        rToCopy.Columns(6).Copy
        Application.Goto .Cells(lRw, 4)
        ActiveSheet.Paste Link:=True

        For iX = 1 To rToCopy.Rows.Count

            .Hyperlinks.Add Anchor:=.Cells(lRw, 6), Address:="", SubAddress:= _
                            "'" & ws.Name & "'!A" & iX + 13, TextToDisplay:=ws.Name

            lRw = lRw + 1

        Next iX
    End With
End Sub

Open in new window


Can somebody edit the first code snippet above so that when this code is run it will run the second code straight after the processes from the first code are complete.

Please re-post the amended code so I can copy over the orginal code for the SendEmail macro

Thanks
Mike
ASKER CERTIFIED SOLUTION
Avatar of Scott McDaniel (EE MVE )
Scott McDaniel (EE MVE )
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of mikes6058
mikes6058

ASKER

Excellent
What if I want to run three subs after the first SendEmail sub?

I've just tried this...

unfliter
NewCode
filter

Exit Sub

Only the SendEmail and NewCode subs ran but not the unfilter or filter subs?

Mike
That's sort of hard to say. If you "call" those subs, they should run.

You can follow the code in a Debug session to see what's happening. To do that, set a Breakpoint on the line of code where you fire off the SendEmail sub, and then run whatever process is needed to trigger than code block. You'll be taken to that breakpoint, and you can use the Debug options to step through the code (the Debug menu is on the toolbar). When you step through, you can determine if your code is executing correctly, and in what order.

To set a Breakpoint, put your cursor on the line where you want the break to occur, and press the F9 key.