If you are getting the messages regularly, then you will want to automate this.
Run the first macro as a script associated with a rule that either selects messages from a specific address, or all messages as it looks for the particular attachment, which I assume will only apply to specific messages.
You can test the script by selecting a suitable message in the inbox and run the test macro.
Provided the folder and path exist the macro will save the attachment and move the message when the message arrives.
Note I have named the message to include the current month and year from the message so you don't have to edit the macro each month.
Sub SaveReport(olItem As MailItem)
'Graham Mayor - https://www.gmayor.com - Last updated - 09 Mar 2023
Dim olAttach As Attachment
Dim olFolder As Folder
Dim strFname As String
Dim sMonth As String
Dim j As Long
Const strSaveName As String = '"C:\Users\ME\Documents\2023\Source Reports\Margin_"
On Error Resume Next
If olItem.Attachments.Count > 0 Then
For j = 1 To olItem.Attachments.Count
Set olAttach = olItem.Attachments(j)
If LCase(olAttach.FileName) Like "*margin integrity file*" Then
sMonth = Format(olItem.SentOn, "MMM_yyyy") & ".xlsb"
olAttach.SaveAsFile strSaveName & sMonth
Exit For
End If
Next j
Set olFolder = Session.GetDefaultFolder(olFolderInbox).Folders("A Reports")
olItem.Move olFolder
End If
lbl_Exit:
Set olAttach = Nothing
Set olItem = Nothing
Set olFolder = Nothing
Exit Sub
End Sub
Sub TestMacro()
Dim olMsg As MailItem
On Error Resume Next
Select Case Outlook.Application.ActiveWindow.Class
Case olInspector
Set olMsg = ActiveInspector.currentItem
Case olExplorer
Set olMsg = Application.ActiveExplorer.Selection.item(1)
End Select
SaveReport olMsg
lbl_Exit:
Exit Sub
End Sub