2013-08-05 76 views
0

因此,首先,我對VBA非常陌生,並且由於我收到的電子郵件數量跟隨某個模板,我試圖自動執行數據整理以保存自己來自當前所需的所有剪切和粘貼。我已經看過以前的一些問題,但由於我的知識很少,所以答案還不夠詳盡。使用VBA將Outlook 2003中的特定信息提取到Excel

這些電子郵件中的每一個是從一個特定的電子郵件地址,並有一個標準的格式如下所示:

「 日/月/年hr.min.sec

XXX XXXXXXX xxxxxxxxxxxxxxxxx XXXX XXXXX」

我想將這些信息導出或複製到excel 2003工作表中,以便每條單獨的信息位於單個行的新列中,其中每個電子郵件都是新行。 我希望宏能夠在特定文件夾中搜索我收到的電子郵件(因爲我已經在與此電子郵件地址相關的Outlook中設置了一些規則),從每個匹配模板的電子郵件複製信息並粘貼它到一個單獨的Excel工作表中。然後每次我收到一封新郵件時,信息都會添加到創建的表格的底部。

希望大家都有道理,請讓我知道你是否需要任何信息。

在此先感謝。

回答

0

我最近做了一些與此類似的事情,除了我把它輸入到訪問數據庫而不是Excel表格之外,但其想法是相同的。出於某種原因,我在使用規則運行時遇到了問題,但無論如何我發現我可以從手動運行的宏中更好地控制它。因此,使用規則將所有內容放到一個文件夾中,並在其下創建一個AlreadyProcessed子文件夾。下面是一些代碼,從開始:

Sub process() 
    Dim i As Integer, folder As Object, item As Object 
    With Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Folders("YourFolderName") 
    For Each item In .Items 
     processMail item 
     item.Move .Folders("AlreadyProcessed") 
    Next 
    End With 
End Sub 

Sub processMail(item As Outlook.MailItem) 
    Dim bitsOfInformation() As String 
    bitsOfInformation = Split(item.Body, " ") 
    'Use this information to make an Excel file 
End Sub 

從VBA製作的Excel文件非常容易 - 只需閱讀了關於打開Excel,使其他Office程序VBAS新的文件 - 你正在尋找Excel.Application。您甚至可以在Excel中記錄宏,手動填寫信息,並基本上將代碼複製到Outlook中,並用變量替換硬編碼信息。但是,如果你要在成千上萬的電子郵件上運行這些,請注意錄製的宏(使用選擇對象)效率不高。

0

開始用下面的代碼:

Private WithEvents Items As Outlook.Items 

Private Sub Application_Startup() 
    Set Items = GetItems(GetNS(GetOutlookApp), olFolderInbox) 
End Sub 

Private Sub Items_ItemAdd(ByVal item As Object) 
    On Error GoTo ErrorHandler 

    Dim msg As Outlook.MailItem 

    If TypeName(item) = "MailItem" Then 
    Set msg = item 



    End If 
ProgramExit: 
    Exit Sub 
ErrorHandler: 
    MsgBox Err.Number & " - " & Err.Description 
    Resume ProgramExit 
End Sub 
Function GetItems(olNS As Outlook.NameSpace, folder As OlDefaultFolders) As Outlook.Items 
    Set GetItems = olNS.GetDefaultFolder(folder).Items 
End Function 
Function GetNS(ByRef app As Outlook.Application) As Outlook.NameSpace 
    Set GetNS = app.GetNamespace("MAPI") 
End Function 
Function GetOutlookApp() As Outlook.Application 
    Set GetOutlookApp = Outlook.Application 
End Function 

這就對您的默認收件箱事件偵聽器。無論何時收到電子郵件,If TypeName語句中的代碼都將被執行。現在,這只是您想要運行的代碼的問題。

您可以使用.SenderName.SenderEmailAddress屬性檢查發件人以確保它是正確的發件人。

如果您提供更具體的信息,我可以修改代碼。

相關問題