Outlook VBA保存指定附件提示对象变量或With块未设置如何处理
问题原因
你已声明objAtt为Outlook.Attachment类型的对象变量,但从未给该变量绑定具体的附件实例,直接调用SaveAsFile方法就会触发「Object variable or With block variable not set」报错。
修正方案
在匹配到附件名为CID.csv的逻辑下,先给objAtt赋值,绑定当前循环到的附件对象即可。同时对代码冗余和变量拼写问题做了优化,修正后完整代码如下:
Public Sub saveAttachtoDisk(item As Outlook.MailItem) Dim objAtt As Outlook.Attachment Dim saveFolder As String Dim strFileName As String Dim STRFileExists As String Dim EmAttFile As String Dim i As Long Dim AttachCount As Long On Error GoTo ErrHandler saveFolder = "\\page\data\NFInventory\groups\CID\Schedules\Nightly File Schedules\Deb's File Autosave\Extra Packs" strFileName = saveFolder & "\CID.csv" STRFileExists = Dir(strFileName) Set EmAttach = item.Attachments AttachCount = EmAttach.Count For i = AttachCount To 1 Step -1 EmAttFile = EmAttach.Item(i).FileName If EmAttFile = "CID.csv" Then ' 给objAtt绑定当前匹配到的附件实例 Set objAtt = EmAttach.Item(i) ' 旧文件存在则先删除 If STRFileExists <> "" Then Kill strFileName End If ' 保存新附件 objAtt.SaveAsFile strFileName ' 匹配到目标后直接退出循环,无需继续遍历 Exit For End If Next i ErrHandler: If Err.Number <> 0 Then MsgBox "Error Number:" & Err.Number & vbCrLf & _ "Error Description: " & Err.Description Exit Sub End If End Sub
内容的提问来源于stack exchange,提问作者Deke
相关产品推荐
相关产品推荐

