指定用于保存Excel文件的文件夹

时间:2017-08-09 18:44:01

标签: excel vba excel-vba outlook outlook-vba

我每天都会在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因收件箱中的电子邮件数量而异。

1 个答案:

答案 0 :(得分:1)

除非您向InputBox提供完整路径,否则您只需为其提供文件名,而SaveAs会将其放入当前目录。

enter image description here

上面的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的文本输入字段,如果您愿意,可以更改它。

注意:当然你应该确保用户提供了一个有效的路径,并且该文件尚不存在,并且如果出现这些潜在的错误情况之一,你应该编写管理这些错误的代码,但这不是这个问题的范围。