Trabajar con gráficos

En el Service Pack 2 (SP2) y posteriores de Word 2007, se puede tener acceso y manipular los gráficos mediante programación usando el modelo de objetos de VBA en Word. Se dibuja el objeto gráfico en Word mediante la misma implementación de capas de dibujo de Office compartida que se usa en Excel, por lo que, si está familiarizado con el modelo de objetos gráficos de Excel, puede migrar fácilmente el código VBA de Excel que manipula los gráficos al código VBA de Word.

Uso del objeto Chart

En Word, un gráfico se representa mediante un objeto Chart. El objeto Chart se encuentra en InlineShape o Shape. Use la colección InlineShapes o la colección Shapes del objeto Document para agregar nuevos gráficos o acceder a ellos. Use el método AddChart para ambas colecciones, especificando el tipo de gráfico y la ubicación en el documento para agregar un nuevo gráfico.

Utilice la propiedad HasChart para determinar si un objeto InlineShape o un objeto Shape contiene un gráfico. Si HasChart devuelve True, puede entonces usar la propiedad Chart para obtener una referencia a un objeto Chart que representa el gráfico. En este punto, la implementación es prácticamente idéntica a la de Excel y el código VBA se puede transferir entre los dos programas en la mayoría de los casos.

Por ejemplo, el siguiente ejemplo de código VBA agrega un nuevo gráfico de columnas apiladas en 2-D a la hoja de cálculo activa en Excel y establece los datos de origen del gráfico en el rango A1:C3 de la hoja de cálculo Hoja1.

Sub AddChart_Excel()
    Dim objShape As Shape
    
    ' Create a chart and return a Shape object reference.
    ' The Shape object reference contains the chart.
    Set objShape = ActiveSheet.Shapes.AddChart(XlChartType.xlColumnStacked100)
    
    ' Ensure the Shape object contains a chart. If so,
    ' set the source data for the chart to the range A1:C3.
    If objShape.HasChart Then
        objShape.Chart.SetSourceData Source:=Range("'Sheet1'!$A$1:$C$3")
    End If
End Sub

En comparación, el siguiente ejemplo de código VBA agrega un nuevo gráfico de columnas apiladas en 2-D al documento activo y establece los datos de origen del gráfico en el rango A1:C3 de los datos del gráfico asociados con el gráfico.

Sub AddChart_Word()
    Dim objShape As InlineShape
    
    ' Create a chart and return a Shape object reference.
    ' The Shape object reference contains the chart.
    Set objShape = ActiveDocument.InlineShapes.AddChart(XlChartType.xlColumnStacked100)
    
    ' Ensure the Shape object contains a chart. If so,
    ' set the source data for the chart to the range A1:C3.
    If objShape.HasChart Then
        objShape.Chart.SetSourceData Source:="'Sheet1'!$A$1:$C$3"
    End If
End Sub

Diferencias clave entre el objeto Chart en Word y el objeto ChartObject en Excel

Aunque la forma de trabajar con gráficos entre Excel y Word es casi idéntica en la mayoría de los casos, es útil identificar las áreas importantes dónde se diferencian las dos implementaciones:

  • Para crear o manipular mediante programación un objeto ChartData en Word se requiere que se ejecute Excel.

  • Las propiedades del gráfico y los métodos para manipular la hoja de gráfico no se implementan. El concepto de una hoja de gráfico es específico de Excel. Las hojas de gráfico no se usan en Word, por lo que los métodos y las propiedades usados para hacer referencia o manipular una hoja de gráfico están deshabilitados en esas aplicaciones.

  • Las propiedades y los métodos que, en Excel normalmente toman una referencia de objeto Range , ahora toman una dirección de rango en Word. El objeto Range en Word es diferente al objeto Range en Excel. Para evitar confusiones, el modelo de objetos de gráfico en Word acepta cadenas de dirección de rango como "='Sheet1'!$A$1:$D$5", en aquellas propiedades y métodos (como el método SetSourceData del objeto Chart) que aceptan objetos Range en Excel.

  • Se ha agregado un objeto nuevo, ChartData, a los modelos de objetos de VBA para que Word proporcione acceso a los datos incrustados o vinculados subyacentes para un gráfico. Cada gráfico tiene asociado con él los datos usados para dibujar el gráfico en Word. Los datos del gráfico se pueden vincular de un libro de Excel externo o incrustar como parte del gráfico mismo. El objeto ChartData encapsula el acceso a los datos para un gráfico determinado en Word. Por ejemplo, en el siguiente ejemplo de código VBA se muestran y, a continuación, se minimizan los datos del gráfico para cada gráfico contenido en el documento activo en Word.

Sub ShowWorkbook_Word() 
    Dim objShape As InlineShape 
     
    ' Iterates each inline shape in the active document. 
    ' If the inline shape contains a chart, then display the 
    ' data associated with that chart and minimize the application 
    ' used to display the data. 
    For Each objShape In ActiveDocument.InlineShapes 
        If objShape.HasChart Then 
 
            ' Activate the topmost window of the application used to 
            ' display the data for the chart. 
            objShape.Chart.ChartData.Activate 
             
            ' Minimize the application used to display the data for 
            ' the chart. 
            objShape.Chart.ChartData.Workbook.Application.WindowState = -4140 
        End If 
    Next 
End Sub 

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.