Biblioteca de referencia de PowerPoint VBA

El siguiente código pretende ser una referencia básica para cualquiera que intente utilizar código VBA para Powerpoint. Ciertamente no está completo, pero es un código que he usado por varias razones. Intentaré agregar y mejorar esta referencia a medida que use más código VBA de PowerPoint.

Índice
  1. Hacer referencia a presentaciones, diapositivas y formas.
  2. Cuente el número de diapositivas
  3. Obtener el número de índice de la diapositiva actual
  4. Agregar diapositivas
  5. Eliminar diapositivas
  6. Mover diapositivas
  7. Recorriendo todas las diapositivas de la presentación activa
  8. Recorriendo todas las formas en la diapositiva activa
  9. Recorriendo todas las formas en todas las diapositivas
  10. Recorriendo todas las formas vinculadas en todas las diapositivas
  11. Administrar enlaces
    1. Métodos de nivel de presentación
    2. Métodos de nivel de forma
  12. formas

Hacer referencia a presentaciones, diapositivas y formas.

'Establece la variable pptPresentation en la presentación activa Dim pptPresentation As PresentationSet pptPresentation = ActivePresentation
'Establece la variable pptSlide en el slideDim pptSlide activo As SlideSet pptSlide = Application.ActiveWindow.View.Slide
'Establece la variable pptSlide en una diapositiva específica (la cuarta diapositiva)Dim pptSlide As SlideSet pptSlide = ActivePresentation.Slides(4)
'Establece la variable pptObject en el ObjectDim pptObject seleccionado como ObjectSet pptObject = ActiveWindow.Selection.ShapeRange

Cuente el número de diapositivas

'Cuenta el número de diapositivas en la presentación activaDebug.Print ActivePresentation.slides.Count

Obtener el número de índice de la diapositiva actual

'Obtiene el número de diapositiva de la diapositiva activaDebug.Print Application.ActiveWindow.View.Slide.SlideIndex

Agregar diapositivas

'Crea una nueva diapositiva en blanco en la posición 5 de la presentación activaDim pptSlide As SlideSet pptSlide = ActivePresentation.Slides.Add(5, ppLayoutBlank)
'Crea una nueva diapositiva en blanco al final de la presentación activaDim pptSlide As SlideSet pptSlide = ActivePresentation.Slides.Add(ActivePresentation.Slides.Count + 1, ppLayoutBlank)

ppLayoutBlank es solo una de las opciones de diseño disponibles.

ppLayoutEn blanco
ppLayoutChart
ppLayoutChartAndText
ppLayoutClipartAndText
ppLayoutClipArtAndVerticalText
ppLayoutFourObjects
ppLayoutLargeObject
ppLayoutMediaClipAndText
ppLayoutMixed
ppLayoutObject
ppLayoutObjectAndText
ppLayoutObjectOverText
ppLayoutOrgchart
ppLayoutTable
ppLayoutText
ppLayoutTextAndChart
ppLayoutTextAndClipart
ppLayoutTextAndMediaClip
ppLayoutTextAndObject
ppLayoutTextAndTwoObjects
ppLayoutTextOverObject
ppLayoutTitle
ppLayoutTitleOnly
ppLayoutTwoColumnText
ppLayoutTwoObjectsAndText
ppLayoutTwoObjectsOverText
ppLayoutVerticalText
ppLayoutVerticalTitleAndText
ppLayoutVerticalTitleAndTextOverChart

Eliminar diapositivas

'Eliminar una diapositiva, diapositiva 6 en este ejemplo ActivePresentation.Slides(6).Delete

Mover diapositivas

'Mueve la posición de una diapositiva, mueve la diapositiva 4 para convertirla en la diapositiva 2ActivePresentation.Slides(4).MoveTo toPos:=2

Recorriendo todas las diapositivas de la presentación activa

'Recorre cada diapositiva en la presentación activaDim pptSlide As SlideDim pptShape As ShapePara cada pptSlide en ActivePresentation.Slides 'Haz algo en cada diapositiva Siguiente

Recorriendo todas las formas en la diapositiva activa

'Recorriendo todas las formas en la diapositiva activaDim pptSlide As SlideDim pptShape As ShapeSet pptSlide = Application.ActiveWindow.View.SlideFor Each pptShape In pptSlide.Shapes 'Haz algo con cada formaSiguiente

Recorriendo todas las formas en todas las diapositivas

'Recorre todas las formas en todas las diapositivas de la presentación activa.Dim pptSlide As SlideDim pptShape As ShapePara cada pptSlide en ActivePresentation.Slides para cada pptShape en pptSlide.Shapes 'Haz algo con esas formas NextNext

Recorriendo todas las formas vinculadas en todas las diapositivas

'Recorre en bucle todas las formas vinculadas en todas las diapositivas de la presentación activa. Dim pptSlide As SlideDim pptShape As ShapeFor Each pptSlide In ActivePresentation.Slides For Each pptShape In pptSlide.Shapes If pptShape.Type = msoLinkedPicture O pptShape.Type = msoLinkedOLEObject Entonces 'Haz algo con esas formas vinculadas Finalizar si SiguienteSiguiente

Si está aplicando un método, la otra opción es aplicar el método a todas las formas, incluso si no están vinculadas. Deberá manejar los errores en los que esa forma no sea una forma vinculada.

'Recorre en bucle todas las formas vinculadas en todas las diapositivas de la presentación activa. Dim pptSlide As SlideDim pptShape As ShapeFor Each pptSlide In ActivePresentation.Slides For Each pptShape In pptSlide.Shapes On Error Reanudar Siguiente 'Aplica el método a todas las formas, incluso si algunas formas generarán un error. Error Ir a 0 SiguienteSiguiente

Administrar enlaces

Algunos de los métodos relacionados con los enlaces ocurren a nivel de presentación, mientras que otros ocurren a nivel de forma.

Métodos de nivel de presentación

'Romper todos los enlacesActivePresentation.BreakLinks
'Actualizar todos los enlacesActivePresentation.UpdateLinks

Métodos de nivel de forma

Los fragmentos de código de esta sección no son independientes. Deben usarse donde pptShape se haya configurado o definido a través de un bucle.

'Romper el enlace de una forma vinculada específicapptShape.LinkFormat.BreakLink
'Actualiza el enlace a una forma vinculada específicapptShape.LinkFormat.UpdateLink
'Cambie el tipo de enlace a Actualización manualpptShape.LinkFormat.AutoUpdate = ppUpdateOptionManual
'Cambie el tipo de enlace a actualización automáticapptShape.LinkFormat.AutoUpdate = ppUpdateOptionAutomatic
'Cambie un enlace para ir a un nuevo archivo fuentepptShape.LinkFormat.SourceFullName = "C:UsersmarksExcelBook.xlsx!Sheet1!R1C1:R20C20"

formas

'Crea una forma y configúrala en una variableDim pptSlide As SlideDim pptShape As ShapeSet pptSlide = Application.ActiveWindow.View.Slide Set pptShape = pptSlide.Shapes.AddShape(Type:=msoShapeRectangle, _Left:=50, Top:=50, Ancho: =50, Altura:=50)'Nombra la formapptShape.Name = "myShape
'Muestra los tamaños de la forma seleccionadaDim msgText As StringmsgText = "Top: " ActiveWindow.Selection.ShapeRange.Top vbNewLinemsgText = msgText "Left: " ActiveWindow.Selection.ShapeRange.Left vbNewLinemsgText = msgText "Height: " ActiveWindow.Selection.ShapeRange. Alto vbNewLinemsgText = msgText "Ancho: " ActiveWindow.Selection.ShapeRange.Width vbNewLineMsgBox msgText