我每天都会在Outlook中收到大约100封电子邮件,其中包含类似主题“Dealer Sales Cockpit - XXXXXXXX”,XXXXXXXX是一个可变数字。
我需要获取电子邮件主题末尾的数字,并将它们写在Excel电子表格的列中(或者在.txt文件中,如果在Excel中无法实现)。
这是我发现的代码。问题是,它从不写入“test.xlsx”。从来没有真正使用过VBA,我无法解决它。
Sub ExportMessagesToExcel()
Dim olkMsg As Object, _
excApp As Object, _
excWkb As Object, _
excWks As Object, _
lngRow As Long, _
lngCnt As Long, _
intPos As Integer, _
strFil As String
strFil = InputBox("D:\LocalData\xl02926\Documents\Samuel\AutoCockpit\test.xlsx", "Export Messages to Excel")
If strFil <> "" Then
Set excApp = CreateObject("Excel.Application")
Set excWkb = excApp.Workbooks.Add()
Set excWks = excWkb.ActiveSheet
'Write Excel Column Headers
With excWks
.Cells(1, 1) = "Computer"
End With
lngRow = 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
intPos = InStrRev(olkMsg.Subject, " ")
excWks.Cells(lngRow, 1) = Mid(olkMsg.Subject, intPos + 1)
lngRow = lngRow + 1
lngCnt = lngCnt + 1
End If
Next
Set olkMsg = Nothing
excWkb.SaveAs strFil
excWkb.Close
End If
Set excWks = Nothing
Set excWkb = Nothing
Set excApp = Nothing
MsgBox "Process complete. A total of " & lngCnt & " messages were
exported.", vbInformation + vbOKOnly, "Export messages to Excel"
End Sub
当我运行它时,会出现一个弹出窗口,我认为它要求电子表格的名称,但我选择的任何名称似乎已经存在,因此不会创建任何内容。它仍会扫描我的收件箱,因为它会计算我的电子邮件,并说“已导出总共X条消息”。 X因收件箱中的电子邮件数量而异。
答案 0 :(得分:1)
除非您向InputBox
提供完整路径,否则您只需为其提供文件名,而SaveAs
会将其放入当前目录。
上面的InputBox
显示您提供的提示,而不是默认或初始值。然后,当您到达SaveAs
时,当您保存没有完整路径的文件时,它将保存在当前目录中,这可能与您在InputBox
中硬编码的路径不同提示。
所以它绝对 保存文件,它只是不将它保存到您认为的D:\...
路径。
您的输入框功能可能应该是:
strFile = InputBox(Prompt:="Specify file location for export.", _
Default:="D:\LocalData\xl02926\Documents\Samuel\AutoCockpit\test.xlsx", _
Title:="Export Messages to Excel")
上面,我们给出了一个提示,一个默认值和一个标题。默认值填充InputBox
的文本输入字段,如果您愿意,可以更改它。
注意:当然你应该确保用户提供了一个有效的路径,并且该文件尚不存在,并且如果出现这些潜在的错误情况之一,你应该编写管理这些错误的代码,但这不是这个问题的范围。