无法捕获COMException(VB.net Excel工作簿.styles)
我正在MS Visual Studio 2012中使用VB.net为Excel(2010、2007)创建外接程序。外接程序使用Excel的样式设置报表格式。我认为,与其遍历Styles集合,不如尝试按名称获取对我的样式的引用,并捕获不存在的异常无法捕获COMException(VB.net Excel工作簿.styles),vb.net,styles,try-catch,excel-interop,comexception,Vb.net,Styles,Try Catch,Excel Interop,Comexception,我正在MS Visual Studio 2012中使用VB.net为Excel(2010、2007)创建外接程序。外接程序使用Excel的样式设置报表格式。我认为,与其遍历Styles集合,不如尝试按名称获取对我的样式的引用,并捕获不存在的异常 Imports xi = Microsoft.Office.Interop.Excel <ComVisible(True)> _ <ClassInterface(ClassInterfaceType.None)> _ Publi
Imports xi = Microsoft.Office.Interop.Excel
<ComVisible(True)> _
<ClassInterface(ClassInterfaceType.None)> _
Public Class ReportOptions
Implements IReportOptions
Private Const _TitleStyleName As String = "TitleStyle"
Private Const _SubtitleStyleName As String = "SubtitleStyle"
Public Sub SetDefaults() Implements IReportOptions.SetDefaults
Dim MyApp As xi.Application
Dim wb As xi.Workbook
Dim styles As xi.Styles
Dim SubtitleStyle As xi.Style
Dim TitleStyle As xi.Style
MyApp = GetObject(, "Excel.Application")
wb = MyApp.ActiveWorkbook
styles = wb.Styles
Try
SubtitleStyle = styles.Item(_SubtitleStyleName) 'Exception here
Catch ex As COMException
SubtitleStyle = styles.Add(_SubtitleStyleName)
End Try
TitleStyle.Font.Name = "Calibri"
'More code setting style values
'Code to clean up the COM Objects...
End Sub
End Class
<代码>导入席=微软办公软件
_
_
公共类报告选项
实现IReportOptions
Private Const_TitleStyleName As String=“TitleStyle”
Private Const_SubtitleStyleName As String=“SubtitleStyle”
Public Sub SetDefaults()实现IReportOptions.SetDefaults
席MyApp作为XI应用
作为工作席的DWB
席式风格
席风格风格
席式风格
MyApp=GetObject(,“Excel.Application”)
wb=MyApp.ActiveWorkbook
styles=wb.styles
尝试
SubtitleStyle=styles.Item(\u SubtitleStyleName)在此处出现异常
作为例外捕获
SubtitleStyle=样式。添加(\u SubtitleStyleName)
结束尝试
TitleStyle.Font.Name=“Calibri”
'更多代码设置样式值
'清除COM对象的代码。。。
端接头
末级
我不断收到Visual Studio的“COMException跨越本机/托管边界”异常对话框,其中包含以下详细信息:
Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at Microsoft.Office.Interop.Excel.Styles.get_Item(Object Index)
at ReportClassLibrary.ReportClassLibrary.ReportOptions.SetDefaults() in <Path>\ReportClassLibrary.vb:line 68
索引无效。(HRESULT的例外:0x8002000B(显示索引))
位于System.RuntimeType.ForwardCallToInvokeMember(字符串memberName、BindingFlags标志、对象目标、Int32[]aWrapperTypes、MessageData和msgData)
在Microsoft.Office.Interop.Excel.Styles.get_项(对象索引)中
在\ReportClassLibrary.vb中的ReportClassLibrary.ReportClassLibrary.ReportOptions.SetDefaults()处:第68行
为了抓住这个“简单”的例外,我想尽一切办法:
感谢您抽出时间阅读本文。:) 我知道一定要简单点 我打算按照Hans Passant的建议再次检查异常设置,但乍一看,我没有看到调试菜单上的异常选项。相反,我在底部附近看到了选项和设置。这将打开“选项”对话框。在调试->常规部分,我发现异常跨越AppDomain或托管/本机边界时会中断 我取消选中该框,现在我的try/catch块按预期处理COMException 摘要
如果捕获异常时遇到问题,请查看它是否跨越AppDomain或托管/本机边界。如果有:
1) 转到调试菜单
2) 单击选项和设置 3) 转到调试->常规部分
4) 当异常跨越AppDomain或托管/本机边界时,取消选中“中断”我知道它必须是简单的 我打算按照Hans Passant的建议再次检查异常设置,但乍一看,我没有看到调试菜单上的异常选项。相反,我在底部附近看到了选项和设置。这将打开“选项”对话框。在调试->常规部分,我发现异常跨越AppDomain或托管/本机边界时会中断 我取消选中该框,现在我的try/catch块按预期处理COMException 摘要
如果捕获异常时遇到问题,请查看它是否跨越AppDomain或托管/本机边界。如果有:
1) 转到调试菜单
2) 单击选项和设置 3) 转到调试->常规部分
4) 当异常跨越AppDomain或托管/本机边界时,取消选中“中断”。调试+异常,确保未勾选抛出的复选框。@Hans谢谢。我在原来的问题中忘了提到这一点。我已验证COMException的复选框未选中。调试+异常,请确保未勾选抛出的复选框。@Hans谢谢。我在原来的问题中忘了提到这一点。我已确认COMException的复选框未选中。