运行Outlook导出任务到Excel的VBA代码时报同步文件夹冲突错误
报错原因
"One or more items in the folder you synchronized do not match. To resolve the conflicts, open the items, and then try this operation again."
上述报错的核心原因是Outlook默认待办文件夹中存在同步冲突项:当你在多端修改同个任务、或是Outlook与邮件服务器同步中断时,会生成特殊的冲突副本项,这类项不属于常规任务类型,遍历读取属性时会触发同步校验报错,你之前代码可正常运行是因为当时文件夹内没有冲突项。
解决方案
方案1:手动清理冲突(永久解决)
- 打开Outlook,切换到待办事项视图
- 查找带有冲突标识的任务项,打开后选择保留需要的版本,删除冲突副本
- 重启Outlook后运行原代码即可正常执行
方案2:修改代码兼容异常项(无需清理可直接运行)
在原代码中增加错误捕获逻辑,自动跳过无法读取的冲突项,修改后的完整代码如下:
'创建导出子程序 Sub Export_TaskItems() Dim NS As NameSpace Dim TaskFolder As Folder Dim Item As Object Dim TaskItem As TaskItem Dim xlApp As Excel.Application Dim xlwb As Excel.Workbook Dim xlws As Excel.Worksheet Dim iRow As Long Set xlApp = CreateObject("Excel.Application") Set xlwb = xlApp.Workbooks.Add Set xlws = xlwb.Worksheets(1) Set NS = Session Set TaskFolder = NS.GetDefaultFolder(olFolderToDo) '写入Excel表头 xlws.Range("A1").Resize(1, 6).Value = Array("状态", "开始日期", "截止日期", "任务名称", "优先级", "分类") iRow = 2 '遍历任务,增加错误捕获跳过冲突项 On Error Resume Next For Each Item In TaskFolder.Items If Err.Number = 0 Then If Item.Class = olTask Then Set TaskItem = Item xlws.Cells(iRow, 1).Value = Convert_Status(TaskItem.Status) xlws.Cells(iRow, 2).Value = TaskItem.StartDate xlws.Cells(iRow, 3).Value = TaskItem.DueDate xlws.Cells(iRow, 4).Value = TaskItem.Subject xlws.Cells(iRow, 5).Value = Convert_Importance(TaskItem.Importance) xlws.Cells(iRow, 6).Value = TaskItem.Categories iRow = iRow + 1 End If Else Err.Clear End If Next Item On Error GoTo 0 xlApp.Visible = True Set xlApp = Nothing End Sub '状态值转文本函数 Public Function Convert_Status(ByVal Status_Value As Integer) As String On Error Resume Next Convert_Status = Array("未开始", "进行中", "已完成", "待回应", "已延期")(Status_Value) End Function '优先级值转文本函数 Public Function Convert_Importance(ByVal Importance_Value As Integer) As String On Error Resume Next Convert_Importance = Array("低", "普通", "高")(Importance_Value) End Function
内容的提问来源于stack exchange,提问作者H Lakis
相关产品推荐
相关产品推荐

