Aquí hay una posible solución alternativa.
Sub ChartExample()
Dim s As Shape
Set s = Application.Presentations(1).Slides(1).Shapes.AddOLEObject(ClassName:="Excel.Chart")
End Sub
Luego manipularía la tabla que agregó a través del s.OLEFormat.Object
. Solo experimenté un poco, pero no abre una aplicación externa de Excel y no vi ningún parpadeo extremo a menos que activara el objeto. Una compensación es que, al menos en Powerpoint 2010, debe convertirlo para usar todas las funciones. Si esto no funciona, siempre puede intentar web components.
No entiendo por qué este método causa un problema, pero para tratar de ayudarlo aquí hay un poco más de código que muestra realmente la manipulación del objeto. Esto fue escrito con objetos en lugar de libros de trabajo, etc., por lo que no es necesario hacer referencias. Solo exige que el usuario tenga Excel en su máquina.
Option Explicit
Const xlcolumns = 2
Sub ChartExample()
Dim s As Shape
Dim wb As Object, chart As Object, data As Object
Set s = Application.Presentations(1).Slides(1).Shapes.AddOLEObject(ClassName:="Excel.Chart")
Set wb = s.OLEFormat.Object
Set chart = wb.Sheets(1)
Set data = wb.Sheets(2)
'Set the range for the chart data
chart.setsourcedata Source:=data.Range("A1:C7"), PlotBy:= _
xlcolumns
'Update data values for the chart
data.Range("B1").Value = "Column Label 1"
data.Range("C1").Value = "Column Label 2"
data.Range("A2:C7").clearcontents
data.Range("A2").Value = "Row Label"
data.Range("B2").Value = 7
data.Range("C2").Value = 11
End Sub
No he probado esto, pero ¿cómo es esto diferente de Slide.AddChart? ¿Esto no abre el libro de trabajo de Excel automáticamente? – simendsjo
@simendsjo Code también tiene datos necesarios para crear el gráfico. Por lo tanto, es posible que no aparezca emergente. No pude probar el código anterior ya que rara vez uso Windows. – 465544
Es exactamente lo que estoy haciendo (Shapes.AddChart), por lo que se abrirá Excel incluso cuando se lo llame desde el código – simendsjo