无法将类型 'system.object' 的对象转换为类型 'Microsoft.Office.Interop.Outlook.Folder'
Unable to cast object of type 'system.object' to type 'Microsoft.Office.Interop.Outlook.Folder'
我有这个 Outlook 加载项(用 VB.Net 编写,已经工作多年了。最近用户在安装加载项时尝试通过加载项在 outlook 中创建文件夹-在,他们收到此错误:
Unable to cast object of type 'system.object' to type
'Microsoft.Office.Interop.Outlook.Folder'
这是我的代码
Public Function FindOLFolderByFolderName(ByVal TFolder As Outlook.Folder, ByVal FolderName As String) As Object
Dim ReturnValue As New Object
Try
Dim SubFolder As Outlook.Folder
For Each SubFolder In TFolder.Folders
If SubFolder.Name = FolderName Then
ReturnValue = SubFolder
Exit For
Else
ReturnValue = Nothing
End If
Next
Catch ex As Exception
MsgBox(ex.Message.ToString)
Finally
''
End Try
Return ReturnValue
End Function
以上函数由以下代码调用:
Dim InboxF As Outlook.Folder
Dim WorkingCasesF As Outlook.Folder
Try
InboxF = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
WorkingCasesF = FindOLFolderByFolderName(InboxF, GetFolderNameFromDB("Parent"))
If IsNothing(WorkingCasesF) Then
WorkingCasesF = InboxF.Folders.Add(GetFolderNameFromDB("Parent"))
End If
Catch ex As Exception
MsgBox(ex.Message.ToString)
Finally
''
End Try
我特别在这行代码中收到错误
WorkingCasesF = FindOLFolderByFolderName(InboxF, GetFolderNameFromDB("Parent"))
事实是这一切正常。我不确定最新版本的 Outlook 是否破坏了它...你能指导我在这里需要做什么来修复这个错误吗?
问题应该在这里:
Dim ReturnValue As New Object
'...
Return ReturnValue
您实际上是在创建 Object
class 的实例,如果该变量未在其他任何地方设置,则 return 对其进行设置。不要使用 New
关键字,除非你真的想调用一个构造函数来创建一个新对象。在这种情况下,您不希望这样。该代码清楚地表明您想要 return 文件夹或 Nothing
那么 Object
实例的用途是什么?它不是为了任何东西,所以根本不应该创建它。该代码应该是这样的:
Public Function FindOLFolderByFolderName(ByVal TFolder As Outlook.Folder, ByVal FolderName As String) As Object
Dim ReturnValue As Object = Nothing
Try
For Each SubFolder As Outlook.Folder In TFolder.Folders
If SubFolder.Name = FolderName Then
ReturnValue = SubFolder
Exit For
End If
Next
Catch ex As Exception
MsgBox(ex.Message.ToString)
Finally
''
End Try
Return ReturnValue
End Function
当然,如果您实际上是在没有设置该变量的情况下进入 Return
语句,那么这似乎表明在代码命中设置它的任何一个语句之前抛出异常,所以这是一个你无论如何都需要研究的问题。
我有这个 Outlook 加载项(用 VB.Net 编写,已经工作多年了。最近用户在安装加载项时尝试通过加载项在 outlook 中创建文件夹-在,他们收到此错误:
Unable to cast object of type 'system.object' to type 'Microsoft.Office.Interop.Outlook.Folder'
这是我的代码
Public Function FindOLFolderByFolderName(ByVal TFolder As Outlook.Folder, ByVal FolderName As String) As Object
Dim ReturnValue As New Object
Try
Dim SubFolder As Outlook.Folder
For Each SubFolder In TFolder.Folders
If SubFolder.Name = FolderName Then
ReturnValue = SubFolder
Exit For
Else
ReturnValue = Nothing
End If
Next
Catch ex As Exception
MsgBox(ex.Message.ToString)
Finally
''
End Try
Return ReturnValue
End Function
以上函数由以下代码调用:
Dim InboxF As Outlook.Folder
Dim WorkingCasesF As Outlook.Folder
Try
InboxF = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
WorkingCasesF = FindOLFolderByFolderName(InboxF, GetFolderNameFromDB("Parent"))
If IsNothing(WorkingCasesF) Then
WorkingCasesF = InboxF.Folders.Add(GetFolderNameFromDB("Parent"))
End If
Catch ex As Exception
MsgBox(ex.Message.ToString)
Finally
''
End Try
我特别在这行代码中收到错误
WorkingCasesF = FindOLFolderByFolderName(InboxF, GetFolderNameFromDB("Parent"))
事实是这一切正常。我不确定最新版本的 Outlook 是否破坏了它...你能指导我在这里需要做什么来修复这个错误吗?
问题应该在这里:
Dim ReturnValue As New Object
'...
Return ReturnValue
您实际上是在创建 Object
class 的实例,如果该变量未在其他任何地方设置,则 return 对其进行设置。不要使用 New
关键字,除非你真的想调用一个构造函数来创建一个新对象。在这种情况下,您不希望这样。该代码清楚地表明您想要 return 文件夹或 Nothing
那么 Object
实例的用途是什么?它不是为了任何东西,所以根本不应该创建它。该代码应该是这样的:
Public Function FindOLFolderByFolderName(ByVal TFolder As Outlook.Folder, ByVal FolderName As String) As Object
Dim ReturnValue As Object = Nothing
Try
For Each SubFolder As Outlook.Folder In TFolder.Folders
If SubFolder.Name = FolderName Then
ReturnValue = SubFolder
Exit For
End If
Next
Catch ex As Exception
MsgBox(ex.Message.ToString)
Finally
''
End Try
Return ReturnValue
End Function
当然,如果您实际上是在没有设置该变量的情况下进入 Return
语句,那么这似乎表明在代码命中设置它的任何一个语句之前抛出异常,所以这是一个你无论如何都需要研究的问题。