Cómo controlar eventos de PowerPoint utilizando Visual Basic .NET 2003

INTRODUCCIÓN

En este artículo se describe cómo controlar eventos de PowerPoint de Microsoft Office desde un cliente de Automatización desarrollado utilizando Microsoft Visual Basic .NET 2003.

Crear un controlador de eventos

Puede utilizar cualquiera de los métodos siguientes para crear un controlador de eventos mediante Visual Basic .NET. El método que elija depende de cómo desee asociar el controlador de eventos a un evento.

Crear al cliente de automatización de Visual Basic .NET que controla los eventos de PowerPoint

Los siguientes conjuntos de pasos muestran cómo utilizar la instrucción AddHandler para controlar los eventos de aplicación de PowerPoint desde un cliente de Automatización desarrollado con Visual Basic .NET.

Para crear un proyecto de Visual Basic .NET, siga estos pasos:
  1. Inicie Microsoft Visual Studio .NET 2003.
  2. En el menú archivo , haga clic en nuevoy, a continuación, haga clic en proyecto.
  3. En la lista Tipos de proyecto , haga clic en Proyectos de Visual Basic. En la lista plantillas , haga clic en Aplicación para Windows.
  4. Denomine el proyecto PowerPointEvents y, a continuación, haga clic en Aceptar.

    De forma predeterminada, se crea un formulario denominado Form1.
Para agregar referencias a la biblioteca de objetos de Microsoft PowerPoint a la biblioteca de objetos de Microsoft Graph, siga estos pasos:
  1. En el menú proyecto , haga clic en Agregar referencia.
  2. En la ficha COM , haga clic en uno de los siguientes y, a continuación, haga clic en Seleccionar:
    • En Microsoft Office PowerPoint 2007, haga clic en Microsoft PowerPoint 12.0 Object Library.
    • Para Microsoft Office PowerPoint 2003, haga clic en Microsoft PowerPoint 11.0 Object Library.
  3. En la ficha COM , haga clic en uno de los siguientes y, a continuación, haga clic en Seleccionar:
    • Microsoft Graph 12.0, haga clic en Biblioteca de objetos de Microsoft Graph 12.0.
    • Microsoft Graph 11.0, haga clic en Biblioteca de objetos de Microsoft Graph 11.0.
  4. En el cuadro de diálogo Agregar referencias , haga clic en Aceptar para aceptar sus selecciones.
  5. Haga doble clic en el formulario.

    Abre la ventana de código.
  6. En la parte superior del archivo Form1.vb, agregue el código siguiente:
    Imports PowerPoint = Microsoft.Office.Interop.PowerPointImports Office = Microsoft.Office.Core
    Imports Graph = Microsoft.Office.Interop.Graph

  7. En el menú Ver , haga clic en Diseñador.
  8. En el menú Ver , haga clic en cuadro de herramientasy, a continuación, agregue un botón a Form1.
  9. Haga doble clic en Button1.

    Abre la ventana de código en el evento Button1_Click .
  10. En la ventana de código, coloque el código siguiente antes del evento Button1_Click :
    Dim oApp As PowerPoint.ApplicationDim oPres As PowerPoint.Presentation

  11. Agregue el código siguiente al evento Button1_Click :
    Const sTemplate = "C:\Program Files\Microsoft Office\Templates\Presentation Designs\Orbit.pot"        ' If the previous template is not available, change the template name to a template name that is on your system.
    Const sVideo = "C:\WINDOWS\system32\oobe\images\intro.wmv"

    Dim oPresentations As PowerPoint.Presentations
    Dim oSlides As PowerPoint.Slides
    Dim oSlide As PowerPoint.Slide
    Dim oShapes As PowerPoint.Shapes
    Dim oShape As PowerPoint.Shape
    Dim oMovie As PowerPoint.Shape
    Dim oAnimationSettings As PowerPoint.AnimationSettings
    Dim oPlaySettings As PowerPoint.PlaySettings
    Dim oTextFrame As PowerPoint.TextFrame
    Dim oTextRange As PowerPoint.TextRange
    Dim oFont As PowerPoint.Font
    Dim oOLEFormat As PowerPoint.OLEFormat
    Dim oShadow As PowerPoint.ShadowFormat
    Dim oForeColor As PowerPoint.ColorFormat
    Dim oRange As PowerPoint.SlideRange
    Dim oSlideShowTransition As PowerPoint.SlideShowTransition

    'Start PowerPoint and then make the PowerPoint window visible but minimized.
    oApp = New PowerPoint.Application

    'Add event handlers.
    AddHandler oApp.SlideShowBegin, AddressOf oApp_SlideShowBegin
    AddHandler oApp.SlideShowNextSlide, AddressOf oApp_SlideShowNextSlide
    AddHandler oApp.PresentationClose, AddressOf oApp_PresentationClose

    oApp.Visible = True
    oApp.WindowState = PowerPoint.PpWindowState.ppWindowMinimized

    'Create a new presentation that is based on the specified template.
    oPresentations = oApp.Presentations
    oPres = oPresentations.Open(sTemplate, , , True)

    'Build slide 1.
    'Add text to the slide, change the font, and then insert or position a
    'movie on the first slide.
    oSlides = oPres.Slides
    oSlide = oSlides.Add(1, PowerPoint.PpSlideLayout.ppLayoutTitleOnly)
    oShapes = oSlide.Shapes
    oShape = oShapes.Item(1)
    oTextFrame = oShape.TextFrame
    oTextRange = oTextFrame.TextRange
    oTextRange.Text = "My sample presentation"
    oFont = oTextRange.Font
    oFont.Name = "Comic Sans MS"
    oFont.Size = 48

    oMovie = oShapes.AddMediaObject(sVideo, 150, 150, 500, 350)
    oAnimationSettings = oMovie.AnimationSettings
    oPlaySettings = oAnimationSettings.PlaySettings
    oPlaySettings.PlayOnEntry = True
    oPlaySettings.HideWhileNotPlaying = True

    'NAR to release references.
    NAR(oPlaySettings)
    NAR(oAnimationSettings)
    NAR(oMovie)
    NAR(oFont)
    NAR(oTextRange)
    NAR(oTextFrame)
    NAR(oShape)
    NAR(oShapes)
    NAR(oSlide)
    NAR(oSlides)

    'Build slide 2.
    'Add text to the slide title and then format the text. Also, add a chart to the
    'slide and then change the chart type to a 3D Column Clustered.
    oSlides = oPres.Slides
    oSlide = oSlides.Add(2, PowerPoint.PpSlideLayout.ppLayoutTitleOnly)
    oShapes = oSlide.Shapes
    oShape = oShapes.Item(1)
    oTextFrame = oShape.TextFrame
    oTextRange = oTextFrame.TextRange
    oTextRange.Text = "My chart"
    oFont = oTextRange.Font
    oFont.Name = "Comic Sans MS"
    oFont.Size = 48

    Dim oChart As Graph.Chart
    oShape = oShapes.AddOLEObject(150, 150, 480, 320, "MSGraph.Chart.8")
    oOLEFormat = oShape.OLEFormat
    oChart = oOLEFormat.Object
    oChart.ChartType = Graph.XlChartType.xl3DColumnClustered

    'NAR to release references.
    NAR(oChart)
    NAR(oOLEFormat)
    NAR(oFont)
    NAR(oTextRange)
    NAR(oTextFrame)
    NAR(oShape)
    NAR(oShapes)
    NAR(oSlide)
    NAR(oSlides)


    'Build slide 3.
    'Add a text effect to the slide and then apply shadows to the text effect.
    oSlides = oPres.Slides
    oSlide = oSlides.Add(3, PowerPoint.PpSlideLayout.ppLayoutBlank)
    oSlide.FollowMasterBackground = False
    oShapes = oSlide.Shapes
    oShape = oShapes.AddTextEffect(Office.MsoPresetTextEffect.msoTextEffect27, _
    "The End", "Impact", 96, False, False, 230, 200)

    oShadow = oShape.Shadow
    oForeColor = oShadow.ForeColor
    oForeColor.SchemeColor = PowerPoint.PpColorSchemeIndex.ppForeground
    oShadow.Visible = True
    oShadow.OffsetX = 3
    oShadow.OffsetY = 3

    'NAR to release references.
    NAR(oShadow)
    NAR(oForeColor)
    NAR(oShape)
    NAR(oShapes)
    NAR(oSlide)
    NAR(oSlides)


    'Modify the slide show transition settings for all three slides in
    'the presentation.
    Dim SlideIdx(3) As Integer
    SlideIdx(0) = 1
    SlideIdx(1) = 2
    SlideIdx(2) = 3

    oSlides = oPres.Slides
    oRange = oSlides.Range(SlideIdx)
    oSlideShowTransition = oRange.SlideShowTransition
    oSlideShowTransition.AdvanceOnTime = False
    oSlideShowTransition.EntryEffect = PowerPoint.PpEntryEffect.ppEffectBoxOut


    'Run the slide show in a separate method.
    RunSlideShow()

    'NAR to release references.
    NAR(oSlideShowTransition)
    NAR(oRange)
    NAR(oSlides)

    'Close the presentation without saving changes and then quit PowerPoint.
    oPres.Saved = True
    oPres.Close()

    'NAR the presentation objects.
    NAR(oPres)
    NAR(oPresentations)

    'Remove all event handlers.
    RemoveHandler oApp.SlideShowBegin, AddressOf oApp_SlideShowBegin
    RemoveHandler oApp.SlideShowNextSlide, AddressOf oApp_SlideShowNextSlide
    RemoveHandler oApp.PresentationClose, AddressOf oApp_PresentationClose

    'Quit PowerPoint.
    oApp.Quit()
    NAR(oApp)

    GC.Collect()

  12. En la ventana de código, coloque el código siguiente debajo del evento Button1_Click :
    Private Sub RunSlideShow()            Dim oSettings As PowerPoint.SlideShowSettings
    Dim oSlideShowWindows As PowerPoint.SlideShowWindows

    oSettings = oPres.SlideShowSettings
    oSettings.StartingSlide = 1
    oSettings.EndingSlide = 3

    'Run the slide show. Wait for the slide show to finish.
    oSettings.Run()

    oSlideShowWindows = oApp.SlideShowWindows

    On Error Resume Next
    Do While oSlideShowWindows.Count >= 1
    System.Windows.Forms.Application.DoEvents()
    Loop

    NAR(oSlideShowWindows)
    NAR(oSettings)
    End Sub

    'NAR function to remove reference.
    Private Sub NAR(ByVal o As Object)
    Try
    System.Runtime.InteropServices.Marshal.ReleaseComObject(o)
    Catch
    Finally
    o = Nothing
    End Try
    End Sub

  13. Agregue los siguientes controladores de eventos debajo del código anterior:
    'Event Handlers
    Private Sub oApp_SlideShowBegin(ByVal Wn As Microsoft.Office.Interop.PowerPoint.SlideShowWindow)
    'Change the position and the size of the slide show window.
    Dim oView As PowerPoint.SlideShowView

    With Wn
    .Height = 325
    .Width = 400
    .Left = 100
    .Activate()
    End With

    'Start the movie at the first slide.
    oView = Wn.View
    oView.Next()

    NAR(oView)
    NAR(Wn)
    End Sub

    Private Sub oApp_SlideShowNextSlide(ByVal Wn As Microsoft.Office.Interop.PowerPoint.SlideShowWindow)
    'Change the color and the type of pointer depending on the slide.
    Dim Showpos As Integer
    Dim oView As PowerPoint.SlideShowView
    Dim oColorFormat As PowerPoint.ColorFormat

    oView = Wn.View
    Showpos = oView.CurrentShowPosition + 1

    If Showpos = 3 Then
    oColorFormat = oView.PointerColor
    oColorFormat.RGB = RGB(255, 0, 0)
    oView.PointerType = PowerPoint.PpSlideShowPointerType.ppSlideShowPointerPen
    Else
    oColorFormat = oView.PointerColor
    oColorFormat.RGB = RGB(0, 0, 0)
    oView.PointerType = PowerPoint.PpSlideShowPointerType.ppSlideShowPointerArrow
    End If

    NAR(oColorFormat)
    NAR(oView)
    NAR(Wn)
    End Sub

    Private Sub oApp_PresentationClose(ByVal Pres As Microsoft.Office.Interop.PowerPoint.Presentation)
    'Before you close the presentation, save the presentation as HTML.
    Pres.SaveAs("C:\TestEvents.htm", PowerPoint.PpSaveAsFileType.ppSaveAsHTML)
    NAR(Pres)
    End Sub

Pruébelo

  1. Presione F5 para ejecutar la aplicación.
  2. Haga clic en Button1.

    Iniciar la presentación con diapositivas de PowerPoint. Observe lo siguiente:
    • Una película inicia en la primera diapositiva.
    • Los cambios de tipo de puntero.
    • Los cambios de color de la segunda diapositiva que contiene un gráfico.
  3. Cierre la presentación.

Referencias

Para obtener más información, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:

308330 cómo controlar eventos de PowerPoint 2002 mediante Visual Basic .NET 2002

Demostración de evento de PowerPoint 2000 254009 disponible para su descarga

303717 cómo utilizar automatización para crear y mostrar una presentación de PowerPoint 2002 o una presentación de Office PowerPoint 2003 utilizando Visual Basic .NET 2002 o Visual Basic .NET 2003

823996 no se encuentra PIA al hacer referencia a una biblioteca de tipos de Office en Visual Studio .NET

Propiedades

Id. de artículo: 824021 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios