2012-07-17 27 views
5

Slide.Shapes.AddChart() tự động mở Excel. Ngay cả khi tôi nhanh chóng làm Chart.ChartData.Workbook.Application.Visible = false, nó vẫn hiển thị một chút. Điều này làm cho việc tự động tạo biểu đồ dễ bị lỗi khi người dùng phải cố gắng không chạm vào các ứng dụng Excel mà vẫn tiếp tục xuất hiện.Có cách nào để nói với PowerPoint không mở Excel khi tạo biểu đồ không?

Mở bản trình bày với WithWindow = false sẽ vẫn mở Excel khi tạo biểu đồ mới.

Trả lời

8

Hành vi này là "theo thiết kế" và Microsoft không quan tâm đến việc thay đổi. Đây là cách các chức năng giao diện người dùng.

Điều bạn có thể làm là tạo biểu đồ trong Excel (sử dụng interop hoặc OpenXML), sau đó nhập (chèn) tệp đó vào PowerPoint.

Kiểm tra liên kết này từ MSDN

+0

Tôi chưa thử nghiệm điều này, nhưng điều này khác với Slide.AddChart như thế nào? Điều này không tự động mở sổ làm việc Excel? – simendsjo

+0

@simendsjo Code cũng có dữ liệu cần thiết để tạo biểu đồ. Vì vậy, nó có thể không bật lên excel. Tôi không thể thử mã trên vì tôi hiếm khi sử dụng các cửa sổ. – 465544

+0

Đó là chính xác những gì tôi đang làm (Shapes.AddChart), do đó, nó sẽ mở excel ngay cả khi được gọi từ mã – simendsjo

1

Đây là công việc có thể xảy ra xung quanh.

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

Sau đó, bạn sẽ điều khiển biểu đồ mà bạn đã thêm qua s.OLEFormat.Object. Tôi chỉ thử nghiệm một chút, nhưng nó không mở một ứng dụng Excel bên ngoài và tôi không thấy bất kỳ nhấp nháy cực nào trừ khi tôi kích hoạt đối tượng. Một thương mại là ít nhất trong Powerpoint 2010, bạn cần phải chuyển đổi nó để sử dụng tất cả các tính năng. Nếu cách này không hiệu quả, bạn luôn có thể thử web components.

Chỉnh sửa: Tôi không hiểu tại sao phương pháp này gây ra sự cố, nhưng cố gắng hỗ trợ thêm ở đây là một ít mã hơn cho thấy thực sự thao tác đối tượng. Điều này đã được viết với các đối tượng thay vì workbook vv, do đó không có tài liệu tham khảo cần phải được thực hiện. Nó chỉ yêu cầu người dùng có Excel trên máy của họ.

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

Tôi muốn các dữ liệu cho bảng xếp hạng hiện diện trong powerpoint quá. Có vẻ như tôi phải nhúng hoặc liên kết sổ làm việc Excel để sử dụng, điều này có thể còn tồi tệ hơn cho trường hợp sử dụng của tôi. – simendsjo

+0

Dữ liệu nằm trong Sheet1 của đối tượng Excel.Chart, mà bạn có thể sửa đổi thông qua mã. Xem câu trả lời đã chỉnh sửa của tôi. –

+0

Cảm ơn, nhưng điều này vẫn chỉ "hoạt động". Biểu đồ được thêm dưới dạng hình ảnh thay vì biểu đồ thực tế. PowerPoint không thể thao tác biểu đồ khi nó được thêm vào thông qua PowerPoint. Bạn không thể áp dụng mẫu biểu đồ sau khi nó được thêm vào (hoặc bạn có thể, nó không làm gì cả). Nó không được thêm vào một trình giữ chỗ biểu đồ, v.v. v.v ... – simendsjo

0

tôi sẽ đề nghị methdology khác đến hơn đến cùng.

  1. Trong powerpoint VBA thêm refrences để "Microsoft Excel 12.0 Object Library"

  2. Đảm bảo cho người dùng biết cho điều này không có hoạt động của excel phải được mở thông qua mẫu yuser cửa sổ bật lên trước khi phẫu thuật.

  3. Trong VBA tạo excel và thiết lập các thông số của nó trong đoạn mã sau

  4. Thêm biểu đồ powerpoint, người dùng wouldnt có thể thấy việc mở các lớp dưới bảng excel khi thêm biểu đồ excet các tab excel có thể được kiểm soát thông qua mã.

Sample Code:

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