使用Macro在Outlook中发送或接收邮件后在Excel中写日志

时间:2018-07-25 09:28:06

标签: excel vba logging outlook outlook-vba

我需要您的帮助,以便在Outlook 2010中创建一个宏,该宏将在发送任何形式的帐户的邮件或在该帐户的收件箱中接收任何邮件之后,将From,To,Date,Subject,Flag存储在excel中。

在此过程中,我尝试使用以下代码发送具有一些默认值的邮件后,首先在excel中创建日志。但这在行:

处给出错误“编译错误,未定义子函数或函数”
Windows("Access_Log.xlsx").Activate

代码如下:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Workbooks.Open FileName:="\\Bmcstr01\grp\SRV\Allsrv\NEW Complaints Logger\GI Complaints\Spreadsheets\Archieve\Access_Log.xlsx"
Windows("Access_Log.xlsx").Activate


'Sheets("log").Activate
If Range("A1").Value = "" Then
n = 1
Else
n = Cells(Rows.Count, "A").End(xlUp).Row + 1
End If
Cells(n, "A").Value = Environ("username")
Cells(n, "b").Value = Date
Cells(n, "c").Value = Time
Cells(n, "d").Value = "Outlook"
Cells(n, "E").Value = "sent mail"
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub

它是在ThisOutlookSession->应用程序-> SendItem中编写的。

对此代码和原始要求的任何帮助将不胜感激。

谢谢, 弥勒佛

1 个答案:

答案 0 :(得分:0)

要从Outlook-VBA访问Excel文件,您首先需要创建一个Excel应用程序:

Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")

如果您不希望Excel显示使用

xlApp.Visible = False

隐藏它。然后您可以在该应用程序中打开一个Excel文件:

Dim xlWb As Object
Set xlWb = xlApp.Workbooks.Open(FileName:="\\Bmcstr01\grp\SRV\Allsrv\NEW Complaints Logger\GI Complaints\Spreadsheets\Archieve\Access_Log.xlsx")

,然后您可以访问该文件中的工作表:

Dim xlWs As Object
Set xlWs = xlWb.Worksheets("Sheet1") 'put your sheet name here

然后您的代码访问该工作表的方式就像

Const xlUp = -4162 'see explanation below

Dim n As Long
With xlWs
    If .Range("A1").Value = "" Then
        n = 1
    Else
        n = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
    End If
    .Cells(n, "A").Value = Environ("username")
    .Cells(n, "B").Value = Date
    .Cells(n, "C").Value = Time
    .Cells(n, "D").Value = "Outlook"
    .Cells(n, "E").Value = "sent mail"
End With

xlWb.Close SaveChanges:=True 'close and save workbook

编辑//

请注意,xlUp在Outlook中不存在。因此,您需要先使用-4162或为其定义一个常量Const xlUp = -4162,然后才能使用它。