2016-12-01 3 views
0

Я использую макросы для экспорта объектов в PowerPoint из Excel. У меня есть возможность выбрать, какую открытую презентацию я бы хотел экспортировать. Однако когда я переключаю презентации, есть ли способ остановить переключение фокуса из Excel в PowerPoint? Мой код ниже:Из Excel, как изменить активную презентацию PowerPoint без переключения фокуса?

Function SetActivePresentation(Filename As String) As Boolean 

    Dim i As Integer 

    ' This just checks if PowerPoint is loaded - not needed for the question 
    If Me.Load = False Then 
     SetActivePresentation = False 
    End If 

    ' Loop through the PowerPoint windows 
    For i = 1 To Me.pPowerpoint.Windows.Count 
     If Me.pPowerpoint.Windows(i).Presentation.name = Filename Then 
      Me.pPowerpoint.Windows(i).Activate 
      Exit For 
     End If 
    Next i 

    SetActivePresentation = True 

End Function 

и это pPowerPoint метод в классе:

Public pPowerpoint As Object 

Public Property Get PowerPoint() As Object 
    PowerPoint = pPowerpoint 
End Property 

и, наконец, моя функция нагрузки:

Function Load() As Boolean 

    On Error Resume Next 

    ' Set the PowerPoint object 
    Set pPowerpoint = GetObject(Class:="PowerPoint.Application") 

    ' Handle if the PowerPoint Application is not found 
    If Err.Number = 429 Then 
     GoTo ErrorHandler 
    End If 

    Load = True 

    Exit Function 

ErrorHandler: 

    Load = False 

End Function 

Тогда из других в моем коде, и я может экспортировать объекты Excel путем циклического перехода по слайдам PowerPoint таким образом For Each slide In PowerPoint.pPowerpoint.ActivePresentation.Slides, где PowerPoint - мой класс PowerPoint, упомянутый выше.

+0

, что вам нужно от 'switching',' Activating'? насколько я знаю, не требуется активировать PP для большинства действий. Что вы делаете в другой части кода? –

+0

@KazimierzJawor, потому что тогда я могу вызвать объект ActivePresentation и экспортировать объекты Excel. –

+0

Вы бы просто префикс pPowerpoint. –

ответ

0

Его несколько сбивает с толку около .. заменяет активную презентацию PowerPoint без переключения фокуса.. Но из обсуждения в комментариях вопроса показывают, что реальная проблема заключается в export Объекты Excel без фокус на Powerpoint. Чтобы решить эту проблему, вы можете избежать использования объекта ActivePresentation. Как? один простое решение заключается в использовании глобальной переменной ..

Этот код ниже показывает, как его сделали ..

'Global variables 
Dim pptPres As PowerPoint.Presentation 
Dim pptSlide As PowerPoint.Slide 

'searching for presentation (function/sub) 
For i = 1 To Me.pPowerpoint.Windows.Count 
    If Me.pPowerpoint.Windows(i).Presentation.name = Filename Then 
     'dont activate! Me.pPowerpoint.Windows(i).Activate 
     Set pptPres = Me.pPowerpoint.Windows(i).Presentation 
     Exit For 
    End If 
Next i 

'copy object "Char 1" at "Sheet1" 
'by accessing the global variable (other function/sub) 
Set objChart = Worksheets("Sheet1").ChartObjects("Chart 1").Chart 
objChart.ChartArea.Copy 
Set pptSlide = pptPres.Slides.Add(1, ppLayoutBlank) 
pptSlide.Shapes.Paste