2017-02-07 4 views
0

Я строю сценарий автоматизации диаграмм в powerpoint, и у меня есть проблема при вызове «ActivateChartDataWindow».Автоматизация VBA Chart с использованием ActivateChartDataWindow

Я бы использовал «Активировать» вместо «ActivateChartDataWindow», но «Активировать» загружает полную программу Excel и заставляет всю рутину работать медленно и ulgy.

Проблема заключается в том, что «ActivateChartDataWindow» работает, чтобы заполнить диаграммы, но когда я вручную перехожу к редактированию данных - щелкните правой кнопкой мыши, отредактируйте данные - чтобы получить доступ к приложению excel, он, похоже, не хочет загружать !

Это заставило меня с ума сойти за последние 5 часов и будет благодарно за любые идеи о том, как это сделать.

OLE.dlll работают корректно, код, который я использую, приведен ниже.

код ниже:

Есть 5 слайдов с одной карты на каждой странице и ниже кода является то, что я использую в качестве отправной точки концепции

У меня есть вырубку я использую «ActivateChartDataWindow» неправильно , но в Интернете мало чего узнать, что я делаю неправильно! Arrrhhhh!

For i = 1 To 5 
     Set instance = Nothing 
     Set instance = ActivePresentation.Slides(i).Shapes(1).Chart.ChartData 
     With instance 
      .ActivateChartDataWindow 
      instance.Workbook.Sheets(1).Range("A1:H26").Value = 27 
      instance.Workbook.Close 
     End With 
    Next i 
End Sub 
+0

Зачем использовать 'ActivateWhatever' вообще? Лучше работать непосредственно с объектом, не нужно «.Activate». –

+0

С моей точки зрения, вам нужно активировать чертову вещь! Разве я не прав? – Dianna

+0

Нет, вам не нужно. Пожалуйста, попробуйте мой ответ ниже. –

ответ

0

Как всегда рекомендуется, вам не нужно Activate объект, чтобы изменить его. Если вы пытаетесь обрабатывать книгу, встроенную в слайд, вы можете сделать это таким образом.

' This function will get you a Workbook object embedded in a Slide (late binding) 
Function getEmbeddedWorkbook(sld As Slide) As Object 
    Dim shp As Shape 
    On Error Resume Next 
    For Each shp In sld.Shapes 
     If shp.Type = 3 Then ' embedded chart workbook created in PP 
      Set getEmbeddedWorkbook = shp.Chart.ChartData.Workbook 
      Exit Function 
     End If 
     If shp.Type = 7 Then ' embedded workbook pasted from excel 
      Set getEmbeddedWorkbook = shp.OLEFormat.Object 
      Exit Function 
     End If 
    Next 
End Function 


' For Testing, I have 6 slides, Some have a workbook pasted from Excel 
' OLE, shape type = 7, others have a chart created in PP (type = 3) 
Sub Test() 
    Dim wb As Object, i As Long 
    For i = 6 To 6 'ActivePresentation.Slides.Count 
     Set wb = getEmbeddedWorkbook(ActivePresentation.Slides(i)) 
     If Not wb Is Nothing Then 
      wb.Sheets(1).Range("A1:D5").Value = i * i 
     End If 
    Next 
End Sub 
+1

Привет пепел, спасибо за головы. Я определенно дам это раньше. Тем не менее, книга встроена в диаграмму. Будет ли этот код работать? Я смотрю на строку .... shp.OLEFormat.Object) = «Рабочая тетрадь», которая ссылается на книгу как на Typename – Dianna

+0

p.s. Я полагаю, вы вставляете таблицу в PP, используя 'PasteSpecial -> Excel Worksheet', правильно? –

+0

Да. Я предполагаю, что вы предложите лучший способ? – Dianna