2012-07-17 11 views
5

Slide.Shapes.AddChart() apre automaticamente Excel. Anche se faccio rapidamente il Chart.ChartData.Workbook.Application.Visible = false, mostra ancora un po 'di tempo. Ciò rende l'automazione della creazione di grafici a rischio di errori, in quanto l'utente deve cercare di non toccare le applicazioni di Excel che continuano a spuntare.C'è un modo per dire a PowerPoint di non aprire Excel quando si creano i grafici?

Aprire una presentazione con WithWindow = false apre ancora Excel durante la creazione di nuovi grafici.

risposta

8

Questo comportamento è "di progettazione" e Microsoft non è interessato a cambiare. Questo è il modo in cui funziona l'interfaccia utente.

Quello che potresti fare sarebbe creare il grafico in Excel (utilizzando l'interoperabilità o OpenXML), quindi importare (inserire) quel file in PowerPoint.

controllare questo link da MSDN

+0

Non ho provato questo, ma come è diverso da Slide.AddChart? Non apre automaticamente la cartella di lavoro di Excel? – simendsjo

+0

Il codice @simendsjo ha anche i dati necessari per creare il grafico. Quindi potrebbe non essere visualizzato excel. Non ho potuto provare sopra il codice come raramente uso Windows. – 465544

+0

È esattamente quello che sto facendo (Shapes.AddChart), quindi aprirà Excel anche quando chiamato dal codice – simendsjo

1

Ecco un possibile lavoro.

Sub ChartExample() 
Dim s As Shape 
Set s = Application.Presentations(1).Slides(1).Shapes.AddOLEObject(ClassName:="Excel.Chart") 
End Sub 

Si potrebbe quindi manipolare il grafico si è aggiunto tramite il s.OLEFormat.Object. Ho solo sperimentato un po ', ma non apre un'applicazione esterna di Excel e non ho visto alcun sfarfallio estremo a meno che non avessi attivato l'oggetto. Un compromesso è che almeno in PowerPoint 2010, è necessario convertirlo per utilizzare tutte le funzionalità. Se questo non funziona, puoi sempre provare web components.

Modifica: Non capisco perché questo metodo causi un problema, ma per cercare di aiutare ulteriormente qui c'è un po 'più di codice che mostra effettivamente la manipolazione dell'oggetto. Questo è stato scritto con oggetti invece di cartelle di lavoro ecc., Quindi non è necessario fare riferimento. Richiede solo che l'utente abbia Excel sul proprio computer.

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

voglio i dati per il grafico presente nel powerpoint troppo. Sembra che io debba incorporare o collegare una cartella di lavoro di Excel per poterlo utilizzare, il che probabilmente è ancora peggio per il mio caso d'uso, sfortunatamente. – simendsjo

+0

I dati sono in Sheet1 dell'oggetto Excel.Chart, che è possibile modificare tramite codice. Vedi la mia risposta modificata. –

+0

Grazie, ma questo ancora "funziona". Il grafico viene aggiunto come un'immagine piuttosto che come un grafico reale. PowerPoint non può manipolare il grafico come è stato aggiunto tramite PowerPoint. Non è possibile applicare un modello di grafico dopo averlo aggiunto (oppure è possibile, semplicemente non fa nulla). Non è aggiunto a un segnaposto grafico, ecc ecc ecc ... – simendsjo

0

Vorrei suggerire un'altra methdology a più di venire lo stesso.

  1. In PowerPoint VBA aggiungere refrences a "Microsoft Excel 12.0 Object Library"

  2. assicurare l'utente che per questa operazione nessuno dei excel deve essere aperto con il modulo yuser pop-up prima dell'operazione.

  3. In VBA creare un Excel e impostare i parametri nella seguente codice

  4. Aggiungere il grafico powerpoint, l'utente wouldnt essere in grado di vedere l'apertura del foglio Excel sottostante alla aggiungendo grafico Excet le linguette excel che può essere controllato tramite codice.

codice di esempio:

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