Witajcie.
Chciałbym uaktualniać dane automatycznie. W Excelu w pliku Master.xlsx jedna z zakładek wymaga uaktualnień ze źródła, którym jest regularnie przychodzący mail o temacie Raport_xxx_by_yyy z załącznikiem xxx_by_yyy.xlsx.
Chciałbym zrobić to tak, by makro uruchamiane w Excelu przyciskiem uaktualniało dane w zakładce xxx_by_yyy o dane z najnowszego maila z owym załącznikiem. Dane z załącznika nie muszą być nigdzie zapisane, wystarczyłoby je otworzyć (ActiveSheet.UsedRange.Copy???) i wkleić do pliku master.
Przeszukałem już Internet i znalazłem (tak mi się wydaje) rozwiązanie, które działa z Outlooka. Chciałbym jednak, by makro było uruchamiane z pliku Excela, z modułu w pliku Master.xlsm (plik będzie używany na innych komputerach, przez inne osoby, otrzymujące inne raporty xxx by yyy). To makro wydaje mi się najbardziej zrozumiałe i przejrzyste, jednak i tak na tę chwilę nieco chyba przerasta moje umiejętności.
Co należałoby zmienić, by działało nie z Outlooka tylko z Excela i dla źródła najnowszego w Inboxie załącznika xxx_by_yyy.xlsx? Rozumiem, że to makro musiałoby być uzupełnione o pętlę, która sprawdza kolekcję najnowszych maili w Inbox i wybiera najnowszy list z tematem Raport xxx by yyy.
Plik nie musi być zapisywany, wystarczy, że dane zostaną przekopiowane do Master.
Kandydata na rozwiązanie, przejrzysty przykład znalazłem tutaj:
Public Sub ExportFile(MyMail As MailItem) Dim outNS As Outlook.NameSpace Dim outFolder As oulook.MAPIFolder Dim outNewMail As Outlook.MailItem Dim strDir As String Set outNS = GetNamespace( "MAPI") Set outFolder = outNS.GetDefaultFolder(olFolderInbox) Set outNewMail = outFolder.Items.GetLast strDir = "C:\" 'insert directory eg. "C:\Project\OutlookData\" If outNewMail.Attachments.Count = 0 Then GoTo Err outNewMail.Attachments( 1).SaveAsFile strDir & "Data.csv" Dim xlApp As Excel.Application Dim xlWbk1 As Excel.Workbook Dim xlWbk2 As Excel.Workbook Set xlApp = New Excel.Application xlApp.DisplayAlerts = False xlApp.Workbooks.Open strDir & "Data.csv" xlApp.Workbooks.Open strDir & "Master.xlsb" Set xlWbk1 = xlApp.Workbooks( "Data.csv") Set xlWbk2 = xlApp.Workbooks( "Master.xlsb") xlWbk1.Sheets( 1).UsedRange.Copy Destination: =xlWbk2.Sheets( 1).Cells(Cells.SpecialCells(xlCellTypeLastCell).Row + 1, 1) xlWbk2.Save xlApp.DisplayAlerts = True xlApp.Quit Set xlWbk2 = Nothing Set xlWbk1 = Nothing Set xlApp = Nothing Set outNewMail = Nothing Set outFolder = Nothing Set outNS = Nothing Err: Set outFolder = Nothing Set OuNewMail = Nothing Set outNS = Nothing End Sub
Z góry dziękuję za wszelkie propozycje i uwagi.