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

Excel VBA引用Outlook报错:用户定义类型未定义

VBA代码“用户定义类型未定义”错误解决方法

你的代码

Sub Alerta_email()
    Dim meuoutlook As Outlook.Application
    Dim criaremail As Outlook.MailItem
    
    Range(“E14”).Activate
    
    Do Until activateCell.Value = “”
    
        If ActiveCell.Offset(0, 1).Value < Range(“F7”, ”G7”) Then
        
            Set meuoutlook = New Application
            Set criaremail = Outlook.CriateItem(olMailItem)
            
            With criaremail
                .BodyFormat = olFormatHTML
                .Display
                .HTMLBody = “Alerta automático” & “<br>” & “O documento: “ _
                    & ActiveCell.Offset (0,2).Value & “ vai expirar em “ _
                    & ActiveCell.Offset (0,4).Value & “ Dias. “
                .To = Range(“n14”).Value
                .cc = Range(“o14).Value
                .subject = “Alerta de vencimento do documento: “ & ActiveCell.Offset (0,2).Value
                .send
            End With
            End If
        
        ActiveCell.offse(1, 0).Select
    
    Loop

End Sub

已勾选的引用项

  • VBA Microsoft Excel 16.0 Object Library
  • OLE Automation
  • Microsoft Office 16.0 Object Library
  • Microsoft Access 16.0 Object Library
  • Microsoft ActiveX Data Objects 6.1 Library

错误原因及解决步骤

核心问题:缺少Outlook对象库引用

你在代码中定义了Outlook.Application和Outlook.MailItem两种类型,但当前引用列表里没有对应的Outlook库,导致VBA无法识别这些用户定义类型。

解决操作:

  1. 打开VBA编辑器(按Alt+F11)
  2. 点击顶部菜单栏的「工具」→「引用」
  3. 在弹出的窗口中,找到并勾选Microsoft Outlook 16.0 Object Library(版本号可能因Office版本不同显示为15.0/14.0等)
  4. 点击「确定」保存设置

额外代码语法错误修正

即使解决引用问题,代码里的拼写和语法错误仍会导致报错,需同步修正:

  • activateCell拼写错误,改为ActiveCell
  • Range(“F7”, ”G7”)逻辑错误:区域无法直接和单个值比较,需明确取某单元格值,比如Range("F7").Value(根据实际需求调整)
  • Set meuoutlook = New Application改为Set meuoutlook = New Outlook.Application(否则会创建Excel实例而非Outlook)
  • Outlook.CriateItem拼写错误,改为Outlook.CreateItem
  • ActiveCell.offse(1, 0).Select拼写错误,改为ActiveCell.Offset(1, 0).Select
  • Range(“o14).Value缺少右引号,改为Range("O14").Value
  • 所有中文引号“”替换为英文引号""(VBA仅识别英文引号)

修正后的代码示例

Sub Alerta_email()
    Dim meuoutlook As Outlook.Application
    Dim criaremail As Outlook.MailItem
    
    Range("E14").Activate
    
    Do Until ActiveCell.Value = ""
        ' 假设和F7单元格值比较,可根据需求调整
        If ActiveCell.Offset(0, 1).Value < Range("F7").Value Then
            Set meuoutlook = New Outlook.Application
            Set criaremail = Outlook.CreateItem(olMailItem)
            
            With criaremail
                .BodyFormat = olFormatHTML
                .Display
                .HTMLBody = "Alerta automático" & "<br>" & "O documento: " _
                    & ActiveCell.Offset(0, 2).Value & " vai expirar em " _
                    & ActiveCell.Offset(0, 4).Value & " Dias. "
                .To = Range("N14").Value
                .CC = Range("O14").Value
                .Subject = "Alerta de vencimento do documento: " & ActiveCell.Offset(0, 2).Value
                .Send
            End With
        End If
        
        ActiveCell.Offset(1, 0).Select
    Loop

End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:21:10