2012-07-17 17 views
5

Slide.Shapes.AddChart() abre automáticamente Excel. Incluso si lo hago rápidamente Chart.ChartData.Workbook.Application.Visible = false, todavía muestra un momento. Esto hace que la automatización de la creación de gráficos sea propensa a errores ya que el usuario tiene que tratar de no tocar las aplicaciones de Excel que siguen apareciendo.¿Hay alguna forma de decirle a PowerPoint que no abra Excel al crear gráficos?

Al abrir una presentación con WithWindow = false, se seguirá abriendo Excel al crear gráficos nuevos.

Respuesta

8

Este comportamiento es "por diseño" y Microsoft no está interesado en cambiar. Esta es la forma en que funciona la IU.

Lo que podría hacer sería crear el gráfico en Excel (utilizando la interoperabilidad o OpenXML), luego importar (insertar) ese archivo en PowerPoint.

Comprobar este enlace de MSDN

+0

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

+0

@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

+0

Es exactamente lo que estoy haciendo (Shapes.AddChart), por lo que se abrirá Excel incluso cuando se lo llame desde el código – simendsjo

1

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 
+0

Quiero los datos del gráfico presente en el PowerPoint también. Parece que tengo que incrustar o vincular un libro de Excel para usar esto, lo que probablemente sea aún peor para mi caso de uso. – simendsjo

+0

Los datos se encuentran en la Hoja 1 del objeto Excel.Chart, que puede modificar a través de un código. Ver mi respuesta editada. –

+0

Gracias, pero esto solo "funciona". El gráfico se agrega como una imagen en lugar de un gráfico real. PowerPoint no puede manipular el gráfico como se lo agregó a través de PowerPoint. No puede aplicar una plantilla de gráfico después de que se agrega (o puede, simplemente no hace nada). No se agrega a un marcador de posición de gráfico, etc. etc ... – simendsjo

0

Yo sugeriría otra methdology a más vienen de la misma.

  1. En el PowerPoint VBA refrences a "Microsoft Excel 12.0 Object Library"

  2. garantizar que el usuario que por esta operación ninguno de los excel debe estar abierto a través del formulario yuser emergente antes de la operación.

  3. En el VBA crear un excel y establecer sus parámetros en el siguiente código

  4. Añadir el gráfico PowerPoint, el usuario no sería capaz de ver la apertura de la hoja de Excel que subyace tras añadir tabla Excet las lengüetas de Excel que se puede controlar a través de código.

Código de ejemplo:

Option Explicit 

Sub AddExcelChartSample() 

    Dim xlApp As Excel.Application, xlWkbk As Excel.Workbook 

    Dim pres As PowerPoint.Presentation, sld As PowerPoint.Slide, iCount As Integer, chtShape As PowerPoint.Shape 

    'Open up the excel instance and set parameters 


    Set xlApp = New Excel.Application 
    With xlApp 
     .WindowState = xlNormal 
     .Top = -1000 
     .Left = -1000 
     .Height = 0 
     .Width = 0 
    End With 


    Set sld = PowerPoint.ActiveWindow.View.Slide 



    For iCount = 1 To 10 

     Set chtShape = sld.Shapes.AddChart(xlLine) 
     Set xlWkbk = chtShape.Chart.ChartData.Workbook 
     With xlWkbk 

      .Sheets(1).Range("A2").Value = "Test 1" 
      .Sheets(1).Range("A3").Value = "Test 2" 
      .Sheets(1).Range("A4").Value = "Test 3" 

     End With 

     chtShape.Chart.Refresh 

     xlWkbk.Close False 


    Next iCount 


    xlApp.Quit 

End Sub 
Cuestiones relacionadas