Outlook VBA变量声明编译报错:需用户定义类型而非项目
Outlook VBA
Dim objSearch As Search编译错误的解决办法 问题描述
编写Outlook VBA代码实现文字与数字搜索时,Dim objSearch As Search语句触发编译错误,提示“Expected user-defined type, not project”,相关代码如下:
Sub AdvSearchForStr() On Error GoTo Err_SearchFolderForSender Dim strFrom As String Dim strTo As String Dim strSearch As String strSearch = InputBox("Enter String to AdvSearch", "Advanced Search") strTo = "Test" Dim strDASLFilter As String strDASLFilter = "urn:schemas:httpmail:subject LIKE '%" & strSearch & "%'" Debug.Print strDASLFilter Dim strScope As String strScope = "'Inbox', 'Sent Items', 'Tasks'" Dim objSearch As Search <------ 错误发生位置 Set objSearch = Application.AdvancedSearch(Scope:=strScope, Filter:=strDASLFilter, SearchSubFolders:=True, Tag:="SearchFolder") 'Save the search results to a searchfolder objSearch.Save (strSearch) Set objSearch = Nothing Exit Sub Err_SearchFolderForSender: MsgBox "Error # " & Err & " : " & Error(Err) End Sub
解决办法
1. 解决命名冲突
如果你的VBA项目中存在名为Search的模块、类或其他对象,会与Outlook内置的Search类型产生命名冲突。可以通过两种方式解决:
- 重命名项目中同名的模块/类;
- 声明时明确指定Outlook命名空间:
Dim objSearch As Outlook.Search
2. 检查并修复Outlook对象库引用
虽然Outlook VBA默认会引用自身对象库,但偶尔会出现引用丢失的情况:
- 打开VBA编辑器,点击菜单栏的工具 -> 引用;
- 在弹出的对话框中,勾选
Microsoft Outlook xx.x Object Library(xx.x对应你的Outlook版本); - 保存项目后重新运行代码。
3. 改用通用Object类型声明
如果不想处理引用或命名冲突问题,可以直接将变量声明为Object类型,这样不会触发类型识别错误,后续方法调用依然有效:
Dim objSearch As Object
修改后的示例代码(使用Outlook.Search)
Sub AdvSearchForStr() On Error GoTo Err_SearchFolderForSender Dim strFrom As String Dim strTo As String Dim strSearch As String strSearch = InputBox("输入要搜索的内容", "高级搜索") strTo = "Test" Dim strDASLFilter As String strDASLFilter = "urn:schemas:httpmail:subject LIKE '%" & strSearch & "%'" Debug.Print strDASLFilter Dim strScope As String strScope = "'Inbox', 'Sent Items', 'Tasks'" ' 明确指定Outlook命名空间的Search类型 Dim objSearch As Outlook.Search Set objSearch = Application.AdvancedSearch(Scope:=strScope, Filter:=strDASLFilter, SearchSubFolders:=True, Tag:="SearchFolder") ' 将搜索结果保存到搜索文件夹 objSearch.Save (strSearch) Set objSearch = Nothing Exit Sub Err_SearchFolderForSender: MsgBox "错误代码 # " & Err & " : " & Error(Err) End Sub
内容的提问来源于stack exchange,提问作者david warnock
相关产品推荐
相关产品推荐

