Questo articolo illustra come automatizzare PowerPoint e gestire eventi mediante Visual Basic .NET.
Con Microsoft Visual Studio .NET non è possibile utilizzare delegati per elaborare eventi con PowerPoint. PowerPoint utilizza l'interfaccia
IDispatch
per generare gli eventi. Per elaborare correttamente gli eventi, è necessario che l'applicazione Visual Basic .NET utilizzi le interfacce
IConnectionPointContainer
e
IConnectionPoint. Inoltre gli DISPID degli eventi da elaborare devono essere noti all'applicazione di destinazione. I DISPID non sono elencati nella libreria dei tipi di PowerPoint, ma lo sono nel codice di esempio riportato di seguito per riferimento.
Creazione del client di automazione Visual Basic .NET di esempio
-
Avviare Microsoft Visual Studio .NET. Dal menu
File
scegliere
Nuovo, quindi scegliere
Progetto. In
Tipi progetto, fare clic su
Progetti di Visual Basic, quindi su
Applicazione Windows
in
Modelli. In base all'impostazione predefinita viene creato il progetto Form1.
-
Aggiungere un riferimento a
Libreria oggetti di Microsoft PowerPoint. Per eseguire questa operazione, attenersi alla seguente procedura:
-
Dal menu
Progetto
scegliere
Aggiungi riferimento.
-
Nella scheda
COM
individuare
Microsoft PowerPoint Object Library
e scegliere
Seleziona.
NOTA: la libreria oggetti di PowerPoint contiene un numero di versione; la versione relativa a PowerPoint 2000 è 9.0, quella relativa a PowerPoint 2002 è 10.0.
-
Scegliere
OK
nella finestra di dialogo
Aggiungi riferimento
per accettare la selezione. Se viene richiesto di generare wrapper per le librerie selezionate, scegliere
Sì.
-
Dal menu
Visualizza
scegliere
Casella degli strumenti
per visualizzare la Casella degli strumenti e aggiungere due pulsanti e una casella di riepilogo a Form1.
-
Fare doppio clic in sequenza su
Button1,
Button2
e
Form1.
-
Nella finestra del codice sostituire il codice riportato di seguito:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
con:
Private m_oConnectionPoint As UCOMIConnectionPoint
Private m_Cookie As Integer
Private oPPT As PowerPoint.Application
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Create a new instance of PowerPoint.
oPPT = New PowerPoint.Application()
' Show PowerPoint to the user.
'POWERPOINT9
oPPT.Visible = Office.MsoTriState.msoTrue
'POWERPOINT10
'oPPT.Visible = Microsoft.Office.Core.MsoTriState.msoTrue
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' Call Unadvise to remove the sink to the connection.
m_oConnectionPoint.Unadvise(m_Cookie)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oPPT)
GC.Collect()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim oConnPointContainer As UCOMIConnectionPointContainer
' QI for IConnectionPointContainer.
oConnPointContainer = CType(oPPT, UCOMIConnectionPointContainer)
' Create a new variable that contains the GUID of the PowerPoint.EApplication interface.
Dim guid As New Guid("914934C2-5A91-11CF-8700-00AA0060263B")
' Find the connection point.
oConnPointContainer.FindConnectionPoint(guid, m_oConnectionPoint)
' Call Advise to sink up the connection.
m_oConnectionPoint.Advise(Me, m_Cookie)
End Sub
<DispId(2001)> Public Sub WindowSelectionChange(ByVal Sel As PowerPoint.Selection)
Me.ListBox1.Items.Add("WindowSelectionChange")
End Sub
<DispId(2002)> Public Sub WindowBeforeRightClick(ByVal Sel As PowerPoint.Selection, ByVal Cancel As Boolean)
Me.ListBox1.Items.Add("WindowBeforeRightClick")
End Sub
<DispId(2003)> Public Sub WindowBeforeDoubleClick(ByVal Sel As PowerPoint.Selection, ByVal Cancel As Boolean)
Me.ListBox1.Items.Add("WindowBeforeDoubleClick")
End Sub
<DispId(2004)> Public Sub PresentationClose(ByVal Pres As PowerPoint.Presentation)
Me.ListBox1.Items.Add("PresentationClose")
End Sub
<DispId(2005)> Public Sub PresentationSave(ByVal Pres As PowerPoint.Presentation)
Me.ListBox1.Items.Add("PresentationSave")
End Sub
<DispId(2006)> Public Sub PresentationOpen(ByVal Pres As PowerPoint.Presentation)
Me.ListBox1.Items.Add("PresentationOpen")
End Sub
<DispId(2007)> Public Sub NewPresentation(ByVal Pres As PowerPoint.Presentation)
Me.ListBox1.Items.Add("NewPresentation")
End Sub
<DispId(2008)> Public Sub PresentationNewSlide(ByVal Sld As PowerPoint.Slide)
Me.ListBox1.Items.Add("PresentationNewSlide")
End Sub
<DispId(2009)> Public Sub WindowActivate(ByVal Pres As PowerPoint.Presentation, ByVal Wn As PowerPoint.DocumentWindow)
Me.ListBox1.Items.Add("WindowActivate")
End Sub
<DispId(2010)> Public Sub WindowDeactivate(ByVal Pres As PowerPoint.Presentation, ByVal Wn As PowerPoint.DocumentWindow)
Me.ListBox1.Items.Add("WindowDeactivate")
End Sub
<DispId(2011)> Public Sub SlideShowBegin(ByVal Wn As PowerPoint.SlideShowWindow)
Me.ListBox1.Items.Add("SlideShowBegin")
End Sub
<DispId(2012)> Public Sub SlideShowNextBuild(ByVal Wn As PowerPoint.SlideShowWindow)
Me.ListBox1.Items.Add("SlideShowNextBuild")
End Sub
<DispId(2013)> Public Sub SlideShowNextSlide(ByVal Wn As PowerPoint.SlideShowWindow)
Me.ListBox1.Items.Add("SlideShowNextSlide")
End Sub
<DispId(2014)> Public Sub SlideShowEnd(ByVal Pres As PowerPoint.Presentation)
Me.ListBox1.Items.Add("SlideShowEnd")
End Sub
<DispId(2015)> Public Sub PresentationPrint(ByVal Pres As PowerPoint.Presentation)
Me.ListBox1.Items.Add("PresentationPrint")
End Sub
'BEGIN POWERPOINT10
'<DispId(2016)> Public Sub SlideSelectionChanged(ByVal SldRange As 'PowerPoint.SlideRange)
' Me.ListBox1.Items.Add("SlideSelectionChanged")
'End Sub
'<DispId(2017)> Public Sub ColorSchemeChanged(ByVal SldRange As 'PowerPoint.SlideRange)
' Me.ListBox1.Items.Add("ColorSchemeChanged")
'End Sub
'<DispId(2018)> Public Sub PresentationBeforeSave(ByVal Pres As 'PowerPoint.Presentation, ByVal Cancel As Boolean)
' Me.ListBox1.Items.Add("PresentationBeforeSave")
'End Sub
'<DispId(2019)> Public Sub SlideShowNextClick(ByVal Wn As 'PowerPoint.SlideShowWindow, ByVal nEffect As PowerPoint.Effect)
' Me.ListBox1.Items.Add("SlideShowNextClick")
'End Sub
'END POWERPOINT10
NOTA:
il codice qui presentato utilizza la libreria di oggetti di PowerPoint 9.0. Quando si aggiungono riferimenti al progetto selezionando la libreria oggetti di PowerPoint 10.0 anziché quella di PowerPoint 9.0, cercare nel codice i commenti contenenti "'POWERPOINT10" e rimuovere il commento dalle righe di codice relative. Allo stesso modo, cercare nel codice i commenti contenenti "'POWERPOINT9" e impostare come commento la riga o le righe di codice relative.
-
con:
Aggiungere quanto riportato di seguito alla sezione
Imports
nella parte superiore della finestra del codice:
Imports System.Runtime.InteropServices
-
con:
Eseguire la verifica del programma. Per eseguire questa operazione, attenersi alla seguente procedura:
-
Premere F5 per compilare ed eseguire il programma. Viene avviato PowerPoint.
-
Scegliere
Button1
per impostare i sink di evento.
-
Creare una nuova presentazione in PowerPoint.
Gli eventi
WindowActivate,
NewPresentation,
PresentationNewSlide
e
WindowSelectionChange
vengono generati.
-
Salvare la presentazione.
Viene generato l'evento
PresentationSave.
-
Chiudere la presentazione.
Viene generato l'evento
PresentationClose.
-
Attivare
Form1
nel programma. Nella casella di riepilogo vengono visualizzati gli eventi generati da PowerPoint e gestiti dal programma.
-
Scegliere
Button2
per disconnettere i sink di evento.
-
Chiudere
Form1.
I seguenti eventi dell'applicazione PowerPoint sono nuovi in PowerPoint 2002 e vengono generati solo automatizzando PowerPoint 2002:
RIFERIMENTI
Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito (gli articoli con prefisso "Q" contengono informazioni in inglese):
254009
(http://support.microsoft.com/kb/254009/
)
INFO: PowerPoint 2000 Event Demonstration Available for Download
Per ulteriori informazioni sull'automazione di Office, visitare il seguente sito di supporto Microsoft Office Development: