Есть ли способ сказать PowerPoint не открывать Excel при создании диаграмм?

Slide.Shapes.AddChart() автоматически открывает Excel. Даже если я быстро сделаю Chart.ChartData.Workbook.Application.Visible = false, он все еще показывает немного времени. Это делает автоматизацию создания диаграммы ошибки подвержены, как пользователь должен стараться не прикасаться к приложениям Excel, который продолжает появляться.

Открытие презентации с WithWindow = false будет по-прежнему открывать Excel при создании новых диаграмм.

3 ответов


Это поведение "по дизайну", и Microsoft не заинтересована в изменении. Так функционирует пользовательский интерфейс.

Что вы могли бы сделать, это создать диаграмму в Excel (с помощью взаимодействия или OpenXML), а затем импортировать (вставить) этот файл в PowerPoint.

, проверьте эту ссылку от MSDN


здесь можно обойти.

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, вам нужно преобразовать его, чтобы использовать все функции. Если это не работает, вы всегда можете попробовать веб-компонентов.

изменить: Я не поймите, почему этот метод вызывает проблему, но чтобы попытаться помочь дальше, здесь немного больше кода, который показывает фактическое манипулирование объектом. Это было написано с объектами вместо книг и т. д., Так что никаких ссылок не нужно делать. Он требует только, чтобы пользователь имел 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

Я бы предложил другой методологии, чтобы прийти на то же самое.

  1. в powerpoint VBA добавьте ссылки на "Microsoft Excel 12.0 Object Library"

  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