将outlook主题分为几列

时间:2015-06-25 16:40:47

标签: outlook-vba

我有以下代码,我尝试修改以将主题行拆分为六列,以便在Excel中查看。

Sub subject2excel()
On Error Resume Next
Set myOlApp = Outlook.Application
Set mynamespace = myOlApp.GetNamespace("mapi")
Set myfolder = myOlApp.ActiveExplorer.CurrentFolder
Set xlobj = CreateObject("excel.application.14")
xlobj.Visible = True
xlobj.Workbooks.Add
'Set Heading
xlobj.Range("a" & 1).Value = "From"
xlobj.Range("b" & 1).Value = "Subject"

For i = 1 To myfolder.Items.Count
Set myitem = myfolder.Items(i)
msgtext = myitem.Body

xlobj.Range("a" & i + 1).Value = myitem.Sender
xlobj.Range("b" & i + 1).Value = myitem.Subject


Next
End Sub

我的数据采用以下格式

SLWP Moncton | Cable Service Eng. | 21-Jul-15 | Shift End: 0:00 | Leave Time: entire day | SLWP (Unpaid)

因此我计划离开的总共7列在下面。

发件人 地点 高球 日期 转换结束时间 轮班时间 保留类型

在它的当前状态中,你可以看到它只产生两列,我不知道如何分开主题行。

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:1)

使用拆分。

Sub subject2excel()

Dim myOlApp As Outlook.Application
Dim myFolder As folder
Dim xlobj As Object
Dim i As Long
Dim j As Long
Dim myitem As Object

Dim Words() As String

'On Error Resume Next
Set myOlApp = Outlook.Application
'Set myNameSpace = myOlApp.GetNamespace("mapi")
Set myFolder = myOlApp.ActiveExplorer.currentFolder
Set xlobj = CreateObject("excel.application.14")

xlobj.Visible = True
xlobj.Workbooks.Add

'Set Heading
xlobj.Range("a" & 1).Value = "From"
xlobj.Range("b" & 1).Value = "Subject"

For i = 1 To myFolder.Items.count

    Set myitem = myFolder.Items(i)

    If TypeOf myitem Is MailItem Then
        'msgText = myitem.body

        xlobj.Range("a" & i + 1).Value = myitem.Sender
        'xlobj.Range("b" & i + 1).Value = myitem.Subject

        Words = Split(myitem.Subject, " | ")

        For j = 0 To UBound(Words)
            Debug.Print Words(j)
        Next j

    End If

Next i

exitRoutine:
    Set myOlApp = Nothing
    Set myFolder = Nothing
    Set xlobj = Nothing
    Set myitem = Nothing

End Sub

答案 1 :(得分:0)

我能够解决问题

Sub subject2excel() 

Dim olFolder As Outlook.Folder 
Dim olItem As Outlook.MailItem 
Dim olNS As Outlook.NameSpace 
Dim xlApp As Object 
Dim xlWB As Object 
Dim i As Long 
Dim j As Long 
Dim vSubject As Variant 


On Error Resume Next 
Set xlApp = GetObject(, "Excel.Application") 
If Err <> 0 Then 
    Set xlApp = CreateObject("Excel.Application") 
End If 
On Error GoTo 0 'err_Handler
xlApp.Visible = True 
Set xlWB = xlApp.Workbooks.Add 
 'Set Heading
With xlWB.Sheets(1) 
    .Range("A" & 1).Value = "Sender" 
    .Range("B" & 1).Value = "Location" 
    .Range("C" & 1).Value = "LOB" 
    .Range("D" & 1).Value = "Date" 
    .Range("E" & 1).Value = "Shift End Time" 
    .Range("F" & 1).Value = "Requested Leave Time" 
    .Range("G" & 1).Value = "Paid/Unpaid" 
End With 
 'Fill sheet
Set olNS = GetNamespace("MAPI") 
Set olFolder = olNS.PickFolder 
For i = 1 To olFolder.Items.Count 
    Set olItem = olFolder.Items(i) 
    If InStr(1, olItem.Subject, "|") > 0 Then 
        vSubject = Split(olItem.Subject, "|") 
        With xlWB.Sheets(1) 
            .Range("A" & i + 1).Value = olItem.Sender 
            .Range("B" & i + 1).Value = vSubject(0) 
            .Range("C" & i + 1).Value = vSubject(1) 
            .Range("D" & i + 1).Value = vSubject(2) 
            .Range("E" & i + 1).Value = Trim(Mid(vSubject(3), InStr(1, vSubject(3), Chr(58)) + 1)) 
            .Range("F" & i + 1).Value = Trim(Mid(vSubject(4), InStr(1, vSubject(4), Chr(58)) + 1)) 
            .Range("F" & i + 1).HorizontalAlignment = -4152 'align right
            .Range("G" & i + 1).Value = Replace(Trim(Mid(vSubject(5), InStrRev(vSubject(5), Chr(40)) + 1)), Chr(41), "") 
        End With 
    End If 
Next i 
xlWB.Sheets(1).UsedRange.Columns.Autofit 
exitRoutine: 
Set olFolder = Nothing 
Set xlApp = Nothing 
Set xlWB = Nothing 
Set olItem = Nothing 
lbl_Exit: 
Exit Sub 
err_Handler: 
GoTo lbl_Exit 
End Sub