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无法识别这些用户定义类型。
解决操作:
- 打开VBA编辑器(按
Alt+F11) - 点击顶部菜单栏的「工具」→「引用」
- 在弹出的窗口中,找到并勾选Microsoft Outlook 16.0 Object Library(版本号可能因Office版本不同显示为15.0/14.0等)
- 点击「确定」保存设置
额外代码语法错误修正
即使解决引用问题,代码里的拼写和语法错误仍会导致报错,需同步修正:
activateCell拼写错误,改为ActiveCellRange(“F7”, ”G7”)逻辑错误:区域无法直接和单个值比较,需明确取某单元格值,比如Range("F7").Value(根据实际需求调整)Set meuoutlook = New Application改为Set meuoutlook = New Outlook.Application(否则会创建Excel实例而非Outlook)Outlook.CriateItem拼写错误,改为Outlook.CreateItemActiveCell.offse(1, 0).Select拼写错误,改为ActiveCell.Offset(1, 0).SelectRange(“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
相关产品推荐
相关产品推荐

