【发布时间】:2019-01-21 16:06:10
【问题描述】:
我已经修改了代码,用于检查新 Outlook 电子邮件的主题行中的关键字、打开工作簿并将某些信息粘贴到此工作簿中:
Option Explicit
Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
' default local Inbox
Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub Items_ItemAdd(ByVal item As Object)
On Error GoTo ErrorHandler
Dim Msg As Outlook.MailItem
If TypeName(item) = "MailItem" Then
Set Msg = item
If InStr(Msg.Subject, "Re:") > 0 Then
Exit Sub
ElseIf InStr(Msg.Subject, "MDI Board") > 0 Then '// Keyword goes here
'// Declare all variables needed for excel functionality and open appropriate document
Dim oXL As Object
Dim oWS As Object
Dim lngRow As Long
Set oXL = CreateObject("Excel.Application")
oXL.Workbooks.Open FileName:="T:\Capstone Proj\TimeStampsOnly.xlsx", AddTOMRU:=False, UpdateLinks:=False
'// Change sheet name to suit
Set oWS = oXL.Sheets("TimeStamps")
lngRow = oWS.Range("A" & oXL.Rows.Count).End(-4162).Offset(1).Row '// -4162 = xlUp. not available late bound
With oWS
.cells(lngRow, 1).Value = Msg.SenderName
.cells(lngRow, 2).Value = Msg.ReceivedTime
.cells(lngRow, 3).Value = Msg.ReceivedByName
.cells(lngRow, 4).Value = Msg.Subject
.cells(lngRow, 5).Value = Msg.Body
'// And others as needed - you will have Intellisense
End With
With oXL
.activeworkbook.Save
.activeworkbook.Close SaveChanges:=2 '// 2 = xlDoNotSaveChanges but not availabe late bound
.Application.Quit
End With
Set oXL = Nothing
Set oWS = Nothing
End If
Else
Exit Sub
End If
ExitPoint:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ExitPoint
'// Debug only
Resume
End Sub
运行 Outlook VBA 代码后,我无法访问工作簿。即使我的机器上没有运行 Excel 的实例或“此文件是只读的”等,它也会给出多个错误,例如“工作簿已打开”。
我试图通过使用另一个带有更新宏的工作簿来规避此问题,该宏将使用有问题的工作簿中的信息更新仪表板,但是当我尝试将变量设置为带有 Outlook 数据的工作簿。
Dim wkb As Excel.Workbook
Dim wks As Excel.Worksheet
Set wkb = Excel.Workbooks("T:\Capstone Proj\TimeStampsOnly.xlsx")
Set wks = wkb.Worksheets("Timestamps")
【问题讨论】:
-
见第二个例子 - stackoverflow.com/a/41801050/4539709
-
如果您的代码在工作簿打开时出错,它不会关闭,Excel 实例将保持打开状态。检查您的任务管理器是否有仍在运行的 Excel 实例。
-
@TimWilliams 在写这篇文章之前我已经检查了我的任务管理器几次,以确保没有任何东西在运行并且它仍然抛出错误。
-
如果工作簿尚未打开,则需要打开它:
Set wkb = Excel.Workbooks.Open("T:\Capstone Proj\TimeStampsOnly.xlsx") -
@TimWilliams 这消除了我的“下标超出范围”错误,尽管我不喜欢花费计算机资源来打开然后关闭工作簿只是为了捕获一个单元格值,它似乎是唯一的大大地。 - 当调用时间戳工作簿时,Outlook VBA 中是否有任何内容导致“被'另一个用户'锁定编辑”?似乎 excel 将 Outlook 宏视为一个人并在文件运行后锁定文件