返回一个值,该值指示指定的 Excel 工作簿对象是否存在 Microsoft.Office.Tools.Excel.Workbook 宿主项。
命名空间:  Microsoft.Office.Tools.Excel
程序集:  Microsoft.Office.Tools.Excel(在 Microsoft.Office.Tools.Excel.dll 中)
语法
声明
Function HasVstoObject ( _
    workbook As _Workbook _
) As Boolean
bool HasVstoObject(
    _Workbook workbook
)
参数
- workbook
 类型:Microsoft.Office.Interop.Excel._Workbook
 要测试的本机工作簿对象。尽管此参数的类型为 Microsoft.Office.Interop.Excel._Workbook,但通常可将 Microsoft.Office.Interop.Excel.Workbook 对象传递给此方法。
返回值
类型:System.Boolean
如果指定的 Microsoft.Office.Interop.Excel.Workbook 对象存在 Microsoft.Office.Tools.Excel.Workbook 宿主项,则为 true;否则为 false。
备注
您可以在应用程序级外接程序中调用此方法,在关闭或保存 Excel 工作簿之前检测要保持的托管控件是否存在。
提示
workbook 参数属于 Microsoft.Office.Interop.Excel._Workbook 类型,后者是 Microsoft.Office.Interop.Excel.Workbook 的父接口。 因此,此方法可以接受这两种类型的对象:Microsoft.Office.Interop.Excel._Workbook 和 Microsoft.Office.Interop.Excel.Workbook。 通常,在引用 Excel 工作簿时,使用 Microsoft.Office.Interop.Excel.Workbook。
示例
下面的代码示例检查当前工作薄是否有关联的宿主项。 若要使用此代码,请从针对 .NET Framework 4 的 Excel 外接程序项目的 ThisAddIn 类中运行此代码。
Private Sub Application_WorkbookBeforeSave( _
    ByVal Wb As Microsoft.Office.Interop.Excel.Workbook, _
    ByVal SaveAsUI As Boolean, _
    ByRef Cancel As Boolean) Handles Application.WorkbookBeforeSave
    If Globals.Factory.HasVstoObject(Wb) = True Then
        For Each interopSheet As Excel.Worksheet In Wb.Worksheets
            If Globals.Factory.HasVstoObject(interopSheet) = True Then
                Dim vstoSheet As Worksheet = Globals.Factory.GetVstoObject(interopSheet)
                If vstoSheet.Controls.Count > 0 Then
                    System.Windows.Forms.MessageBox.Show( _
                        "The VSTO controls are not persisted when you" _
                        + " save and close this workbook.", _
                        "Controls Persistence", _
                        System.Windows.Forms.MessageBoxButtons.OK, _
                        System.Windows.Forms.MessageBoxIcon.Warning)
                    Exit For
                End If
            End If
        Next
    End If
End Sub
void Application_WorkbookBeforeSave(
    Microsoft.Office.Interop.Excel.Workbook Wb, bool SaveAsUI, 
    ref bool Cancel)
{            
    if (Globals.Factory.HasVstoObject(Wb) == true)
    {                
        foreach (Excel.Worksheet interopSheet in Wb.Worksheets)
        {
            if (Globals.Factory.HasVstoObject(interopSheet) ==  true)
            {
                Worksheet vstoSheet = Globals.Factory.GetVstoObject(interopSheet);
                if (vstoSheet.Controls.Count > 0)
                {
                    System.Windows.Forms.MessageBox.Show(
                        "The VSTO controls are not persisted when you"
                        + " save and close this workbook.",
                        "Controls Persistence",
                        System.Windows.Forms.MessageBoxButtons.OK,
                        System.Windows.Forms.MessageBoxIcon.Warning);
                    break;
                }
            }
        }
    }
}
.NET Framework 安全性
- 对直接调用方的完全信任。此成员不能由部分信任的代码使用。有关更多信息,请参见通过部分受信任的代码使用库。