有没有办法告诉PowerPoint在创建图表时不要打开Excel?

时间:2012-07-17 07:17:57

标签: excel powerpoint office-interop

Slide.Shapes.AddChart()会自动打开Excel。即使我很快做Chart.ChartData.Workbook.Application.Visible = false,它仍会显示一段时间。这使得自动化图表创建容易出错,因为用户必须尽量不要触摸不断弹出的Excel应用程序。

在创建新图表时,使用WithWindow = false打开演示文稿仍会打开Excel。

3 个答案:

答案 0 :(得分:8)

此行为是“按设计”,Microsoft对更改不感兴趣。这是UI的功能。

您可以做的是在Excel中创建图表(使用互操作或OpenXML),然后将该文件导入(插入)到PowerPoint中。

MSDN

查看此链接

答案 1 :(得分: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

答案 2 :(得分:0)

我建议采用另一种方法。

  1. 在powerpoint VBA中添加参考资料" Microsoft Excel 12.0对象库"

  2. 确保用户在操作之前,不必通过yuser表单弹出打开此操作。

  3. 在VBA中创建一个excel并在以下代码中设置其参数

  4. 添加powerpoint图表,除了可以通过代码控制的excel选项卡外,用户无法在添加图表时看到底层Excel工作表的打开。

  5. 示例代码:

    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