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.
- Hacer referencia a presentaciones, diapositivas y formas.
- Cuente el número de diapositivas
- Obtener el número de índice de la diapositiva actual
- Agregar diapositivas
- Eliminar diapositivas
- Mover diapositivas
- Recorriendo todas las diapositivas de la presentación activa
- Recorriendo todas las formas en la diapositiva activa
- Recorriendo todas las formas en todas las diapositivas
- Recorriendo todas las formas vinculadas en todas las diapositivas
- Administrar enlaces
- 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