7

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

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

4

3 回答 3

8

这种行为是“设计使然”,Microsoft 对改变不感兴趣。这就是 UI 的运作方式。

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

从MSDN检查此链接

于 2012-07-22T16:28:25.193 回答
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 组件。

编辑:我不明白为什么这种方法会导致问题,但为了进一步提供帮助,这里有更多代码显示实际操作对象。这是用对象而不是工作簿等编写的,因此不需要进行引用。它只要求用户在他们的机器上安装 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
于 2012-07-17T14:20:42.650 回答
0

我会建议另一种方法来克服同样的问题。

  1. 在 powerpoint VBA 中添加对“Microsoft Excel 12.0 对象库”的引用

  2. 确保用户对于此操作,必须在操作之前通过 yuser 表单弹出窗口打开任何 excel。

  3. 在VBA中创建一个excel并在下面的代码中设置它的参数

  4. 添加powerpoint图表,用户在添加图表时无法看到底层excel表的打开,可以通过代码控制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
于 2013-02-03T10:33:21.430 回答