簡體   English   中英

如何在不打開開發人員的情況下在PowerPoint 2010中運行VBA(宏)代碼

[英]How to run VBA (macro) code in PowerPoint 2010 without opening the developer

這個問題有點古怪-可能是系統的問題,根本行不通。 我的總體項目是,我需要在24/7循環上播放演示文稿,並且它具有來自excel文件的一些鏈接圖表,需要從中提取數據。 我寫了基本的代碼來做到這一點。

但是,當我第一次打開PowerPoint並運行演示文稿時->沒有代碼運行(已通過Debug.Prints和MsgBoxes驗證)。 但是,如果我只是在開發人員中打開代碼(但不要編輯)並運行演示文稿,那么一切都會按計划進行。 我已經將所有信任中心安全性設置設為允許所有宏並將網絡文件設置為也自動信任。 我還驗證了這與此處的另一台筆記本電腦有關。 任何幫助是極大的贊賞。 供參考,這是我需要運行的簡單代碼。

Sub updateCharts()

Dim i As Integer
Dim sld As Slide
Dim shp As Shape

If IsFileOpen(filePath) = False Then
    If ActivePresentation.SlideShowWindow.View.Slide.SlideIndex = 1 Then
        For Each sld In ActivePresentation.Slides
            For Each shp In sld.Shapes
                If shp.HasChart Then
                    On Error Resume Next
                    shp.LinkFormat.Update
                    shp.Chart.Refresh
                    On Error GoTo 0
                End If
            Next shp
        Next sld
    End If
End If

End Sub


Sub OnSlideShowPageChange(ByVal Win As SlideShowWindow)

Call updateCharts

End Sub

感謝您的機會。 有3個主要部分可以幫助您做到這一點。

  1. 需要一種在演示文稿啟動時自動運行宏的方法
  2. 需要一種處理PowerPoint應用程序事件的方法
  3. 常規模塊,用於來自事件處理程序的調用

解:

  1. 遵循PPT Alchemy的指示,目標是添加UI元素:
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="onLoadCode" > </customUI>
    其中onLoadCode是您將在模塊中創建的子項
  2. 根據MS How to:將事件與Application Object一起使用 ,您需要創建一個Class模塊,並由Sub對其進行初始化。 在這里,我們希望onLoadCode進行初始化。
    EventClassModule
  3. 模塊中的Sub將進行圖表更新。
    PlayerModule

確保為您的目的將演示文稿設置為Kiosk模式:
SlideShowSetting


類模塊: EventClassModule

 Public WithEvents App As Application Private Sub App_SlideShowBegin(ByVal Wn As SlideShowWindow) Debug.Print Now & vbTab & "App_SlideShowBegin" updateCharts Wn End Sub Private Sub App_SlideShowNextSlide(ByVal Wn As SlideShowWindow) Debug.Print Now & vbTab & "App_SlideShowNextSlide" updateCharts Wn End Sub 

模塊: 播放器

 Dim X As New EventClassModule Sub OnLoadCode() InitializeApp End Sub Sub InitializeApp() Set X.App = Application ActivePresentation.SlideShowSettings.Run End Sub Sub updateCharts(ByRef Win As SlideShowWindow) Dim sld As Slide Dim shp As Shape Debug.Print Now & vbTab & "Playing slide with index: " & Win.View.Slide.SlideIndex If Win.View.Slide.SlideIndex = 1 Then Debug.Print Now & vbTab & "Update charts on other slides!" For Each sld In Win.Presentation.Slides For Each shp In sld.Shapes If shp.HasChart Then Debug.Print Now & vbTab & "Update chart """ & shp.Chart.Name & """ on slide index " & sld.SlideIndex On Error Resume Next shp.LinkFormat.Update shp.Chart.Refresh If Err.Number <> 0 Then Debug.Print Now & vbTab & "ERR(" & Err.Number & ") " & Err.Description Err.Clear End If On Error GoTo 0 End If Next Next End If End Sub 

您應該刪除生產環境的調試行。 玩得開心!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM