You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用objWord.Selection将Excel内容粘贴到Outlook时出现错误91

Outlook约会粘贴Excel区域首次运行报错的修复方案

错误原因

运行时错误'91'(对象变量未设置)出现在objSel.PasteAndFormat (wdChartPicture)语句,核心原因是首次打开Outlook约会窗口时,内置的Word编辑器组件还未完全加载完毕,导致objWord.Selection无法获取有效对象。第二次运行时窗口已处于就绪状态,代码就能正常执行。

修复方案

1. 等待Word编辑器就绪

在Mymail.Display后添加循环检测,直到objInsp.WordEditor返回有效对象,避免操作未初始化的组件。

2. 强制变量声明

开启Option Explicit,避免未声明变量导致的隐含错误(原代码中testRange、myRange等未声明)。

3. 优化粘贴定位

确保光标定位到约会正文末尾,避免因焦点问题导致选择对象无效。

修正后的完整代码

Option Explicit ' 强制声明所有变量,减少隐含错误

Sub Meeting_InvitesNEW()
    Dim olApp As Outlook.Application
    Set olApp = Outlook.Application
    
    Dim ObjMail As Outlook.MailItem ' 补全原代码未声明的变量
    Set ObjMail = olApp.CreateItem(olMailItem)
    
    Dim Mymail As Outlook.AppointmentItem
    Call GetData
    
    ' 显式声明范围变量
    Dim testRange As Range
    Set testRange = Range("$A$10:$AD$500")
    
    Dim myRange As Range
    Set myRange = Selection
    
    ' 检查选择范围是否合规
    If Intersect(testRange, myRange) Is Nothing Then
        MsgBox "You are not on a loan", vbCritical, "Read me"
        Exit Sub
    Else
        Worksheets("Manager County Info").Range("14:18").EntireRow.Hidden = False
        Application.ScreenUpdating = False
        Worksheets("Manager County Info").Range("D7:I18").Copy
        
        Set Mymail = olApp.CreateItem(olAppointmentItem)
        Mymail.Display
        
        Dim objItem As Object
        Dim objInsp As Outlook.Inspector
        Dim objDoc As Word.Document
        Dim objWord As Word.Application
        
        Set objItem = Mymail
        Set objInsp = objItem.GetInspector
        
        ' 循环等待Word编辑器加载完成,避免假死
        Do While objInsp.WordEditor Is Nothing
            DoEvents
        Loop
        
        Set objDoc = objInsp.WordEditor
        Set objWord = objDoc.Application
        
        ' 设置约会属性
        With Mymail
            .RequiredAttendees = Worksheets("Loans").Range("k" & ActiveCell.Row).Value
            .Subject = Worksheets("Loans").Range("B" & ActiveCell.Row).Value & " (LGI Builder LO - " & Worksheets("Loans").Range("K" & ActiveCell.Row).Value & ")" _
               & " COE " & Worksheets("Loans").Range("W" & ActiveCell.Row).Value & " (" & Worksheets("Loans").Range("Q" & ActiveCell.Row).Value & ")"
            .Start = Worksheets("Loans").Range("M" & ActiveCell.Row).Value & " " & Format(Worksheets("Loans").Range("O" & ActiveCell.Row).Value, "h:mm")
            .Duration = 90
            .Importance = olImportanceHigh
            .ReminderMinutesBeforeStart = 180
            .MeetingStatus = olMeeting
        
            If Worksheets("Loans").Range("K" & ActiveCell.Row).Value = "Mario Cerrato" Then
                .BusyStatus = olBusy
            Else
                .BusyStatus = olFree
            End If
        End With
        
        ' 定位光标到正文末尾再粘贴
        objWord.Selection.EndKey Unit:=wdStory
        objWord.Selection.PasteAndFormat wdChartPicture
        
        ' 清理资源
        Application.CutCopyMode = False
        Set objWord = Nothing
        Set objDoc = Nothing
        Set objInsp = Nothing
        Set objItem = Nothing
        Set Mymail = Nothing
        Set ObjMail = Nothing
        Set olApp = Nothing
        
        Application.ScreenUpdating = True
    End If
End Sub

额外注意事项

  • 需在VBA编辑器中引用Microsoft Word Object Library和Microsoft Outlook Object Library(路径:工具 -> 引用)
  • 原代码中ObjMail变量未实际使用,可根据需求保留或删除
  • 如果未引用Word库,可将wdChartPicture替换为对应数值14,wdStory替换为6

内容的提问来源于stack exchange,提问作者MEC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 04:16:06