在 Excel 中,如何在不切换焦点的情况下更改活动的 PowerPoint 演示文稿?
From within Excel how do I change an active PowerPoint presentation without switching focus?
我使用宏将对象从 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
这是class中的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
然后从我代码的其他地方,我可以通过以这种方式 For Each slide In PowerPoint.pPowerpoint.ActivePresentation.Slides
遍历 PowerPoint 幻灯片来导出 Excel 个对象,其中 PowerPoint
是我的 PowerPoint class 引用以上。
有点令人困惑。.在不切换焦点的情况下更改活动的 PowerPoint 演示文稿..。但是从问题评论的讨论来看,真正的问题是 export Excel objects without focus on 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
我使用宏将对象从 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
这是class中的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
然后从我代码的其他地方,我可以通过以这种方式 For Each slide In PowerPoint.pPowerpoint.ActivePresentation.Slides
遍历 PowerPoint 幻灯片来导出 Excel 个对象,其中 PowerPoint
是我的 PowerPoint class 引用以上。
有点令人困惑。.在不切换焦点的情况下更改活动的 PowerPoint 演示文稿..。但是从问题评论的讨论来看,真正的问题是 export Excel objects without focus on 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