结合Outlook/excel的VBA代码
我有两个单独的代码,我需要作为一个工作。我已经第一个工作了,但是在尝试添加第二部分时我犯了一个错误。我如何获得第一部分的第二部分?第一个代码是将文件夹中的电子邮件正文导出到excel中。第二部分应该是将身体的某些部分分解成它自己的细胞。结合Outlook/excel的VBA代码
Sub ExportMessagesToExcel()
Dim olkMsg As Object, _
excApp As Object, _
excWkb As Object, _
excWks As Object, _
intRow As Integer, _
intVersion As Integer, _
strFilename As String
strFilename = InputBox("Enter a filename (including path) to save the exported messages to.", "Export Messages to Excel")
If strFilename <> "" Then
intVersion = GetOutlookVersion()
Set excApp = CreateObject("Excel.Application")
Set excWkb = excApp.Workbooks.Add()
Set excWks = excWkb.ActiveSheet
'Write Excel Column Headers
With excWks
.Cells(1, 1) = "Subject"
.Cells(1, 2) = "Received"
.Cells(1, 3) = "Sender"
End With
intRow = 2
'Write messages to spreadsheet
For Each olkMsg In Application.ActiveExplorer.CurrentFolder.Items
'Only export messages, not receipts or appointment requests, etc.
If olkMsg.Class = olMail Then
'Add a row for each field in the message you want to export
excWks.Cells(intRow, 1) = olkMsg.Subject
excWks.Cells(intRow, 2) = olkMsg.ReceivedTime
excWks.Cells(intRow, 3) = GetSMTPAddress(olkMsg, intVersion)
intRow = intRow + 1
End If
Next
Set olkMsg = Nothing
excWkb.SaveAs strFilename
excWkb.Close
End If
Set excWks = Nothing
Set excWkb = Nothing
Set excApp = Nothing
MsgBox "Process complete. A total of " & intRow - 2 & " messages were exported.", vbInformation + vbOKOnly, "Export messages to Excel"
End Sub
Private Function GetSMTPAddress(Item As Outlook.MailItem, intOutlookVersion As Integer) As String
Dim olkSnd As Outlook.AddressEntry, olkEnt As Object
On Error Resume Next
Select Case intOutlookVersion
Case Is < 14
If Item.SenderEmailType = "EX" Then
GetSMTPAddress = SMTP2007(Item)
Else
GetSMTPAddress = Item.SenderEmailAddress
End If
Case Else
Set olkSnd = Item.Sender
If olkSnd.AddressEntryUserType = olExchangeUserAddressEntry Then
Set olkEnt = olkSnd.GetExchangeUser
GetSMTPAddress = olkEnt.PrimarySmtpAddress
Else
GetSMTPAddress = Item.SenderEmailAddress
End If
End Select
On Error GoTo 0
Set olkPrp = Nothing
Set olkSnd = Nothing
Set olkEnt = Nothing
End Function
Function GetOutlookVersion() As Integer
Dim arrVer As Variant
arrVer = Split(Outlook.VERSION, ".")
GetOutlookVersion = arrVer(0)
End Function
Function SMTP2007(olkMsg As Outlook.MailItem) As String
Dim olkPA As Outlook.PropertyAccessor
On Error Resume Next
Set olkPA = olkMsg.PropertyAccessor
SMTP2007 = olkPA.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x5D01001E")
On Error GoTo 0
Set olkPA = Nothing
End Function
我需要添加的部分是:
Select
Range("B2").Formula = "=MID(Trim(Clean(A2)),FIND(""Risk Owner:"",Trim(Clean(A2)))+13,FIND(""Counterparty:"",Trim(Clean(A2)))-FIND(""Risk Owner:"",Trim(Clean(A2)))-13)"
Range("C2").Formula = "=MID(Trim(Clean(A2)),FIND(""Counterparty:"",Trim(Clean(A2)))+15,FIND(""Trade ID:"",Trim(Clean(A2)))-FIND(""Counterparty:"",Trim(Clean(A2)))-15)"
Range("D2").Formula = "=MID(TRIM(CLEAN(A2)),FIND(""Trade ID:"",TRIM(CLEAN(A2)))+11,FIND(""Fee Leg ID:"",TRIM(CLEAN(A2)))-FIND(""Trade ID:"",TRIM(CLEAN(A2)))-11)"
Range("E2").Formula = "=MID(TRIM(CLEAN(A2)),FIND(""Fee Leg ID:"",TRIM(CLEAN(A2)))+13,FIND(""Termination Method:"",TRIM(CLEAN(A2)))-FIND(""Fee Leg ID:"",TRIM(CLEAN(A2)))-13)"
Range("F2").Formula = "=MID(TRIM(CLEAN(A2)),FIND(""Termination Method:"",TRIM(CLEAN(A2)))+21,FIND(""Termination amount:"",TRIM(CLEAN(A2)))-FIND(""Termination Method:"",TRIM(CLEAN(A2)))-21)"
Range("G2").Formula = "=MID(TRIM(CLEAN(A2)),FIND(""Termination amount:"",TRIM(CLEAN(A2)))+21,FIND(""Expected Recovery:"",TRIM(CLEAN(A2)))-FIND(""Termination amount:"",TRIM(CLEAN(A2)))-21)"
'Copy formulas
Sheets("Import").Select
Range("B2").Select
Selection.AutoFill Destination:=Range("B2:B" & LastUsedRow), Type:=xlFillDefault
Range("C2").Select
Selection.AutoFill Destination:=Range("C2:C" & LastUsedRow), Type:=xlFillDefault
Range("D2").Select
Selection.AutoFill Destination:=Range("D2:D" & LastUsedRow), Type:=xlFillDefault
Range("E2").Select
Selection.AutoFill Destination:=Range("E2:E" & LastUsedRow), Type:=xlFillDefault
Range("F2").Select
Selection.AutoFill Destination:=Range("F2:F" & LastUsedRow), Type:=xlFillDefault
Range("G2").Select
Selection.AutoFill Destination:=Range("G2:G" & LastUsedRow), Type:=xlFillDefault
'Paste values to remove formulas
Sheets(Array("Import")).Select
Sheets("Import").Activate
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
新增3/13
Sub ExportMessagesToExcel()
Dim olkMsg As Object, _
excApp As Object, _
excWkb As Object, _
excWks As Object, _
intRow As Integer, _
intVersion As Integer, _
strBuffer As String, _
strFilename As String, _
strTemp As String, _
arrLines As Variant, _
varLine As Variant, _
bolComments As Boolean
strFilename = InputBox("Enter a filename (including path) to save the exported messages to.", MACRO_NAME)
If strFilename <> "" Then
intVersion = GetOutlookVersion()
Set excApp = CreateObject("Excel.Application")
Set excWkb = excApp.Workbooks.Add()
Set excWks = excWkb.ActiveSheet
'Write Excel Column Headers
With excWks
.Cells(1, 1) = "Transaction Type:"
.Cells(1, 2) = "Select One:"
.Cells(1, 3) = "Area"
.Cells(1, 4) = "Store"
.Cells(1, 5) = "Date"
.Cells(1, 6) = "Iar Date"
.Cells(1, 7) = "Name of submitter"
.Cells(1, 8) = "Key Rec"
.Cells(1, 9) = "Issue"
.Cells(1, 10) = "Vendor #"
.Cells(1, 11) = "Vendor address"
End With
intRow = 2
'Write messages to spreadsheet
For Each olkMsg In Application.ActiveExplorer.CurrentFolder.Items
'Only export messages, not receipts or appointment requests, etc.
If olkMsg.Class = olMail Then
'Add a row for each field in the message you want to export
strBuffer = ""
bolComments = False
arrLines = Split(olkMsg.Body, vbCrLf)
For Each varLine In arrLines
strTemp = Trim(varLine)
If bolComments Then
Else
If Left(strTemp, 17) = "Transaction Type: " Then
excWks.Cells(intRow, 4) = Mid(strTemp, 17)
Else
If Left(strTemp, 14) = "Select one: " Then
excWks.Cells(intRow, 5) = Mid(strTemp, 16)
Else
If Left(strTemp, 5) = "Area: " Then
excWks.Cells(intRow, 6) = Mid(strTemp, 5)
Else
If Left(strTemp, 8) = "Store #: " Then
excWks.Cells(intRow, 7) = Mid(strTemp, 8)
Else
If Left(strTemp, 16) = "Date MM/DD/YYYY: " Then
excWks.Cells(intRow, 8) = Mid(strTemp, 16)
Else
If Left(strTemp, 28) = "IAR Week End Date MM/DD/YYYY: " Then
excWks.Cells(intRow, 9) = Mid(strTemp, 28)
Else
If Left(strTemp, 44) = "Name Title of Person Submitting Issue Sheet: " Then
excWks.Cells(intRow, 10) = Mid(strTemp, 14)
Else
If Left(strTemp, 29) = "Keyrec#: " Then
excWks.Cells(intRow, 11) = Mid(strTemp, 29)
Else
If Left(strTemp, 32) = "Detailed Description of Issue: " Then
excWks.Cells(intRow, 12) = Mid(strTemp, 32)
Else
If Left(strTemp, 9) = "Vendor #:" Then
bolComments = True
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Next
excWks.Cells(intRow, 10) = strBuffer
intRow = intRow + 1
End If
Next
Set olkMsg = Nothing
excWkb.SaveAs strFilename
excWkb.Close
End If
Set excWks = Nothing
Set excWkb = Nothing
Set excApp = Nothing
MsgBox "Process complete."
End Sub
尝试添加代码之后最终选择和LEAV断字“选择'
我的意思是,试试这个
...
End Select
Range("B2").Formula = "=M ....
和NOT:
...
End Select
Select
Range("B2").Formula = "=MID(...
HTH
菲利普
谢谢你的工作......以及让代码运行的工作。输出仍然不是我想象的那样。我认为第二部分将把身体分解成单元格,并在公式中的关键词之间提供值。 – pete 2013-03-12 17:51:59
这与你的公式是不是相关的 - 我怀疑你需要通过A列中的值然后调试B列,C列等公式...... – 2013-03-12 17:59:32
发布A列的一些示例然后我可以帮助你调试公式 – 2013-03-12 17:59:57
什么是你得到,并在代码中你得到了错误的错误? – 2013-03-12 16:29:41
以及在你的代码中你想在现有过程中添加第2部分 - 在它自己的过程中? – 2013-03-12 16:31:42