共用方式為


Office 解決方案中的晚期系結

Office 應用程式 lication 物件模型中的某些類型提供透過晚期系結功能提供的功能。 例如,某些方法和屬性可能會根據 Office 應用程式 lication 的內容傳回不同類型的物件,而某些類型可以在不同的內容中公開不同的方法或屬性。

適用於: 本主題中的資訊適用於檔層級專案和 VSTO 載入宏專案。 請參閱 Office 應用程式 lication 和項目類型所提供的功能。

Visual Basic 專案,其中 Option Strict 已關閉,而以 .NET Framework 4 或 .NET Framework 4.5 為目標的 Visual C# 專案可以直接使用採用這些晚期系結功能的型別。

對象傳回值的隱含和明確轉換

Microsoft Office 主要 Interop 元件中的許多方法和屬性都會傳回 Object 值,因為它們可以傳回數種不同類型的物件。 例如, ActiveSheet 屬性會 Object 傳回 ,因為其傳回值可以是 WorksheetChart 對象,視使用中工作表為何而定。

當方法或屬性傳Object回 時,您必須在Option Strict所在的Visual Basic專案中明確將 物件轉換成正確的類型。 您不需要在關閉 Option Strict 的 Visual Basic 專案中明確轉換Object傳回值。

在大部分情況下,參考檔會列出傳回 成員的可能傳回 Object值類型。 轉換或轉換物件會啟用程式碼編輯器中物件的 IntelliSense。

如需 Visual Basic 中轉換的相關信息,請參閱隱含和明確轉換 (Visual Basic)CType 函式 (Visual Basic)。

範例

下列程式代碼範例示範如何在 Option Strict 所在的 Visual Basic 專案中,將對象轉換成特定類型。 這個類型的項目中,您必須明確地將 Cells 屬性 Range轉換成 。 此範例需要具有名為 Sheet1之工作表類別的檔層級Excel專案。

Dim castRange As Excel.Range = CType(Globals.Sheet1.Cells(1, 1), Excel.Range)

下列程式代碼範例示範如何在 Visual Basic 專案中 以 .NET Framework 4 為目標的 Option Strict 關閉或以 .NET Framework 4 為目標的 Visual C# 專案中,以隱含方式將對象轉換成特定類型。 在這些類型的專案中, Cells 屬性會隱含轉換成 Range。 此範例需要具有名為 Sheet1之工作表類別的檔層級Excel專案。

Excel.Range dynamicRange = Globals.Sheet1.Cells[1, 1];

僅透過晚期系結提供存取成員

Office PIA 中的某些屬性和方法只能透過晚期系結來使用。 在 Visual Basic 專案中 ,在以 .NET Framework 4 或 .NET Framework 4.5 為目標的 Visual C# 專案中,您可以使用這些語言中的晚期系結功能來存取晚期綁定成員。 在選項 Strict 開啟的 Visual Basic 專案中,您必須使用反映來存取這些成員。

範例

下列程式代碼範例示範如何存取Visual Basic專案中的晚期綁定成員,其中 Option Strict 已關閉,或是以 .NET Framework 4 為目標的Visual C# 專案中。 本範例會存取 Word 中 [檔案開啟] 對話框的晚期綁定 Name 屬性。 若要使用此範例,請從 Word 專案中的 ThisDocumentThisAddIn 類別執行它。

dynamic dialog = Application.Dialogs[Word.WdWordDialog.wdDialogFileOpen];
dialog.Name = "Testing";
dialog.Show();
MessageBox.Show(dialog.Name);

下列程式代碼範例示範如何使用反映,在Option Strict所在的Visual Basic專案中完成相同的工作。

Dim dlg As Word.Dialog = Application.Dialogs(Word.WdWordDialog.wdDialogFileOpen)
Dim dlgType As Type = GetType(Word.Dialog)

' Set the Name property of the dialog box.
dlgType.InvokeMember("Name", _
    Reflection.BindingFlags.SetProperty Or _
        Reflection.BindingFlags.Public Or _
        Reflection.BindingFlags.Instance, _
    Nothing, dlg, New Object() {"Testing"}, _
    System.Globalization.CultureInfo.InvariantCulture)

' Display the dialog box.
dlg.Show()

' Show the Name property.
MessageBox.Show(dlgType.InvokeMember("Name", _
    Reflection.BindingFlags.GetProperty Or _
        Reflection.BindingFlags.Public Or _
        Reflection.BindingFlags.Instance, _
    Nothing, dlg, Nothing, _
    System.Globalization.CultureInfo.InvariantCulture))