2012-07-17 34 views
5

Slide.Shapes.AddChart()自動打開Excel。即使我很快做Chart.ChartData.Workbook.Application.Visible = false,它仍然顯示一段時間。這使得自動化的圖表創建容易出錯,因爲用戶不得不嘗試不斷彈出的Excel應用程序。有沒有辦法讓PowerPoint在創建圖表時不要打開Excel?

使用WithWindow = false打開演示文稿時,在創建新圖表時仍然會打開Excel。

回答

8

此行爲是「通過設計」,並且微軟不想更改。這是UI的功能。

你可以做的是在Excel中創建圖表(使用interop或OpenXML),然後將該文件導入(插入)到PowerPoint中。

檢查從 MSDN

+0

我沒有測試過這個,但這與Slide.AddChart有什麼不同?這不會自動打開Excel工作簿嗎? – simendsjo 2012-07-23 08:45:45

+0

@simendsjo代碼還具有創建圖表所需的數據。所以它可能不會彈出excel。 我無法嘗試上面的代碼,因爲我很少使用Windows。 – 465544 2012-07-23 15:54:09

+0

這正是我正在做的(Shapes.AddChart),所以即使從代碼 – simendsjo 2012-07-24 07:54:59

1

這是一個可能的解決方法。

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

然後,您將操縱通過s.OLEFormat.Object添加的圖表。我只嘗試了一點,但它並沒有打開一個外部Excel應用程序,除非我激活該對象,否則我沒有看到任何極端的閃爍。換一種說法是,至少在Powerpoint 2010中,您需要將其轉換爲使用所有功能。如果這不工作,你總是可以嘗試web components.

編輯: 我不明白爲什麼這種方法會導致一個問題,而是要盡力協助進一步這裏是一個多一點的代碼,顯示實際操縱的對象。這是用對象而不是工作簿等書寫的,所以不需要引用任何參考。它只要求用戶在他們的機器上安裝Excel。

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

我要爲出現在PowerPoint中的圖表太數據。看來我必須嵌入或鏈接一個Excel工作簿才能使用它,這可能對我的使用情況更糟糕。 – simendsjo 2012-07-18 08:21:08

+0

數據位於Excel.Chart對象的Sheet1中,您可以通過代碼修改該對象。看到我編輯的答案。 – 2012-07-18 12:54:41

+0

謝謝,但這仍然只是「有效」。該圖是作爲圖片添加的,而不是實際的圖表。 PowerPoint無法操作通過PowerPoint添加的圖表。添加圖表模板後,您無法應用它(或者您可以,它只是沒有做任何事情)。它不會添加到圖表佔位符等等等等等等...... – simendsjo 2012-07-18 18:11:37

0

這個環節我會建議其他methdology超過過來一樣。

  1. 在PowerPoint中VBA添加refrences爲「Microsoft Excel中12.0對象庫」

  2. 確保用戶是爲Excel的這種操作沒有必須通過手術前yuser形式彈出打開。

  3. 在VBA創建Excel並設定其參數在下面的代碼

  4. 添加PowerPoint演示圖表,用戶不會是能夠在添加圖看,底層excel工作表的開口excet excel的突片可以通過代碼進行控制。

示例代碼:

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 
相關問題