我使用宏将对象从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
然后,从代码的其他位置开始,我可以通过以这种方式遍历PowerPoint幻灯片来导出Excel对象,以上是我的PowerPoint类For Each slide In PowerPoint.pPowerpoint.ActivePresentation.Slides
在哪里PowerPoint
。
在不切换焦点的情况下更改活动的PowerPoint演示文稿有些困惑。但是从讨论中的评论中可以看出,真正的问题是导出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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句