Enlace en tiempo de tarde en soluciones de Office

Algunos tipos de los modelos de objetos de las aplicaciones de Office proporcionan funcionalidad que está disponible a través de características de enlace en tiempo de ejecución. Por ejemplo, algunos métodos y propiedades pueden devolver distintos tipos de objetos en función del contexto de la aplicación de Office, y algunos tipos pueden exponer diferentes métodos o propiedades en contextos diferentes.

Se aplica a: La información de este tema se aplica a los proyectos de nivel de documento y a los - - proyectos de complemento de VSTO. Consulte características disponibles por aplicación y tipo de proyecto de Office.

Visual Basic proyectos en los que Option Strict está desactivado y los proyectos de Visual C# que tienen como destino o pueden funcionar directamente con tipos que emplean estas características de enlace en tiempo .NET Framework 4 de .NET Framework 4.5 tarde.

Conversión implícita y explícita de valores devueltos de objetos

Muchos métodos y propiedades de Microsoft Office ensamblados de interoperabilidad primarios (PIA) devuelven valores, ya que pueden devolver varios Object tipos diferentes de objetos. Por ejemplo, la propiedad devuelve porque su valor devuelto puede ser un objeto ActiveSheet Object o , Worksheet Chart dependiendo de cuál sea la hoja activa.

Cuando un método o propiedad devuelve , debe convertir explícitamente (en Visual Basic) el objeto al tipo correcto en los proyectos de Visual Basic en los que Object Option Strict está en . No es necesario convertir explícitamente valores devueltos en Object Visual Basic donde Option Strict está desactivado.

En la mayoría de los casos, la documentación de referencia enumera los posibles tipos del valor devuelto para un miembro que devuelve Object . Convertir o convertir el objeto habilita IntelliSense para el objeto en el Editor de código.

Para obtener información sobre la conversión en Visual Basic, vea Implicit and explicit conversions (Visual Basic) and CType function (Visual Basic).

Ejemplos

En el ejemplo de código siguiente se muestra cómo convertir un objeto a un tipo específico en un proyecto de Visual Basic donde Option Strict está en . En este tipo de proyecto, debe convertir explícitamente la Cells propiedad en Range . Este ejemplo requiere un proyecto de Excel de nivel de documento con una clase de hoja de cálculo denominada Sheet1 .

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

En el ejemplo de código siguiente se muestra cómo convertir implícitamente un objeto a un tipo específico en un proyecto de Visual Basic donde Option Strict está desactivado o en un proyecto de Visual C# que tiene como destino .NET Framework 4 . En estos tipos de proyectos, la propiedad se convierte Cells implícitamente en Range . Este ejemplo requiere un proyecto de Excel de nivel de documento con una clase de hoja de cálculo denominada Sheet1 .

Dim dynamicRange As Excel.Range = Globals.Sheet1.Cells(1, 1)
Excel.Range dynamicRange = Globals.Sheet1.Cells[1, 1];

Acceso a miembros que solo están disponibles a través del enlace en tiempo de tarde

Algunas propiedades y métodos de los PIA de Office solo están disponibles a través del enlace en tiempo de tarde. En Visual Basic proyectos en los que Option Strict está desactivado o en proyectos de Visual C# que tienen como destino o , puede usar las características de enlace en tiempo de tarde en estos lenguajes para acceder a los miembros enlazados en tiempo .NET Framework 4 de .NET Framework 4.5 lectura. En Visual Basic proyectos en los que Option Strict está en , debe usar la reflexión para acceder a estos miembros.

Ejemplos

En el ejemplo de código siguiente se muestra cómo acceder a los miembros enlazados en tiempo de ejecución en un proyecto de Visual Basic donde Option Strict está desactivado o en un proyecto de Visual C# que tiene como destino .NET Framework 4 . En este ejemplo se accede a la propiedad Name enlazada en tiempo de tiempo del cuadro de diálogo Abrir archivo en Word. Para usar este ejemplo, ejecute desde la clase ThisDocument o en un proyecto de ThisAddIn Word.

Private Sub TestDynamicDialog()
    Dim dialog As Word.Dialog = Application.Dialogs(Word.WdWordDialog.wdDialogFileOpen)
    dialog.Name = "Testing"
    dialog.Show()
    MessageBox.Show(dialog.Name)
End Sub
dynamic dialog = Application.Dialogs[Word.WdWordDialog.wdDialogFileOpen];
dialog.Name = "Testing";
dialog.Show();
MessageBox.Show(dialog.Name);

En el ejemplo de código siguiente se muestra cómo usar la reflexión para realizar la misma tarea en un proyecto de Visual Basic donde Option Strict está en .

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))

Consulte también