Есть ли способ сказать 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
Я бы предложил другой методологии, чтобы прийти на то же самое.
в powerpoint VBA добавьте ссылки на "Microsoft Excel 12.0 Object Library"
убедитесь, что для этой операции ни один из excel не должен быть открыт через всплывающее окно формы yuser перед операцией.
в VBA создайте excel и установите его параметры в следующем коде
добавить диаграмму 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