Ejemplos y tutoriales de macros VBA en PowerPoint

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on febrero 22, 2022

In this Article

Esta es una guía completa para automatizar PowerPoint utilizando macros VBA (Visual Basic para Aplicaciones). A continuación encontrará muchos ejemplos útiles.


VBA PDF (descargas gratuitas)

Descargue nuestro tutorial gratuito de VBA para Microsoft PowerPoint ¡O tutoriales VBA para otros programas de Office!

vba powerpoint tutorial pdf

Descargar


Tutorial de PowerPoint VBA (Macros)

Guardar como presentación habilitada para macros

La presentación con código VBA debe ser «guardada como» presentación habilitada para macros de PowerPoint (*.pptm)

guardar como macro powerpoint

 

Habilitar la pestaña ‘Desarrollador’ en la cinta de opciones

Debe habilitar la pestaña Desarrollador en la cinta de opciones antes de crear el código VBA. Para ello, elija Archivo -> Opciones, haga clic en «Personalizar la cinta de opciones» y marque la casilla junto a la pestaña «Desarrollador» en el panel derecho.

pestaña programador cinta de opciones

 

Crear una macro de PowerPoint

Este es un ejemplo sencillo de una macro VBA para PowerPoint:

Sub salvarPresentacionComoPDF()
    Dim pptNombre As String
    Dim PDFNombre As String
    
    ' Guardar Power Point como PDF
    pptNombre = ActivePresentation.FullName
    ' Reemplazar extensión de archivo PowerPoint en el nombre a PDF
    PDFNombre = Left(pptNombre , InStr(pptNombre, ".")) & "pdf"
    ActivePresentation.ExportAsFixedFormat PDFNombre, 2  ' ppFixedFormatTypePDF = 2
End Sub

Guarda la presentación activa como PDF. Cada línea de código hace lo siguiente:

  • Crea variables para el nombre de PowerPoint y el nombre del PDF
  • Asigna el nombre de la presentación activa a la variable pptNombre
  • Crea el nombre completo del PDF
  • Guarda la presentación como PDF

Aplicación PowerPoint

Cuando el código VBA se ejecuta dentro de una Presentación de PowerPoint, la Aplicación de PowerPoint es la aplicación por defecto y puede ser manipulada sin referencia explícita. Crear una nueva presentación.

Para crear una presentación, utilice el método Add de la aplicación PowerPoint.

Application.Presentations.Add
' o sin referencia explicita
Presentations.Add

Abrir una nueva presentación

Para abrir una presentación nueva y en blanco utilice el método Add de la colección Application.Presentations

Presentations.Add

Abrir una presentación existente

Para abrir una presentación ya creada, utilice el método Open de la colección Application.Presentations

Presentations.Open ("Mi Presentacion.pptx")

El código anterior asume que la presentación está en el mismo directorio que la presentación de PowerPoint que contiene el código.

Abrir y asignar a una variable

Debe asignar la presentación que abre a una variable para poder manipularla según sus necesidades.

Dim ppt As Presentation
Set ppt = Presentations.Open("Mi Presentacion.pptx")

Hacer referencia a la presentación activa

Utilice la referencia ActivePresentation para manipular la Presentación activa en la GUI cuando se ejecuta el código VBA.

' imprime el nombre de la presentación activa en la ventana inmediato
Debug.Print ActivePresentation.Name

Guardar la presentación actual

La siguiente sentencia guardará la Presentación Activa si fue guardada anteriormente. Si no se ha guardado, aparecerá el diálogo ‘Guardar como’.

ActivePresentation.Save

Cerrar la presentación actual

La siguiente sentencia cerrará la Presentación Activa aunque no se haya guardado después de la última edición.

ActivePresentation.Close

Referencias útiles

Asignar una presentación existente (por nombre) a una variable

Dim miPresentacionPorNombre As Presentation
Set miPresentacionPorNombre = Application.Presentations("Mi Presentacion")

Asignar la diapositiva activa a una variable

Dim diapositivaActual As Slide
Set diapositivaActual = Application.ActiveWindow.View.Slide

Asignar la diapositiva por índice a una variable

Dim miDiapositiva As Slide
Set miDiapositiva = ActivePresentation.Slides(11)

Contar el número de diapositivas

Dim numeroDeDiapositivas As Long
numeroDeDiapositivas = ActivePresentation.Slides.Count

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

Dim indiceDiapositivaActual As Integer
indiceDiapositivaActual = Application.ActiveWindow.View.Slide.SlideIndex

Añadir una diapositiva en blanco al final de la presentación

Dim numeroDeDiapositivas As Long
Dim nuevaPresentacion as Slide
 
numeroDeDiapositivas = ActivePresentation.Slides.Count
Set nuevaPresentacion = ActivePresentation.Slides.Add(numeroDeDiapositivas + 1, 12)
' O como ppLayoutBlank = 12
Set nuevaPresentacion = ActivePresentation.Slides.Add(numeroDeDiapositivas + 1, ppLayoutBlank)

Añadir una diapositiva después de la diapositiva actual

Dim nuevaDiapositiva As Slide
Dim indiceDiapositivaActual As Integer
 
indiceDiapositivaActual = Application.ActiveWindow.View.Slide.SlideIndex
Set nuevaDiapositiva = ActivePresentation.Slides.Add(indiceDiapositivaActual, ppLayoutBlank)

Eliminar una diapositiva

Dim indiceDiapositivaActual as Integer
 
indiceDiapositivaActual = Application.ActiveWindow.View.Slide.SlideIndex
ActivePresentation.Slides(indiceDiapositivaActual).Delete

Ir a una diapositiva específica

' Esto lo llevará a la diapositiva número 4
Application.ActiveWindow.View.GotoSlide (4)

Mover Diapositiva

Puede mover una diapositiva desde su antigua posición a la nueva

' Mover de la diapositiva 3 a la primera diapositiva
Dim posicionAnterior as integer, dim nuevaPosicion as integer
 
posicionAnterior = 3
nuevaPosicion = 1
ActivePresentation.Slides(posicionAnterior).MoveTo toPos:=nuevaPosicion 

Bucle a través de todas las diapositivas

Puede hacer algo con cada diapositiva o pasar por todas las diapositivas para encontrar algunas diapositivas y hacer algo con ellas usando el código

Dim miDiapositiva as Slide
 
For Each miDiapositiva In ActivePresentation.Slides
   ' Hacer algo con la diapositiva actual referida en la variable 'miDiapositiva'
   ' Debug.Print miDiapositiva.Name
Next miDiapositiva

Bucle a través de todas las formas de la diapositiva activa

El poder de PowerPoint puede ser realizado usando ‘Shapes’ El código de abajo hace un bucle a través de todas las formas de la diapositiva actual para que pueda manipularlas como quiera;

Dim diapositivaActual as Slide
Dim forma As Shape
 
Set diapositivaActual = Application.ActiveWindow.View.Slide
For Each forma In diapositivaActual.Shapes
  ' Hacer algo con la forma referida en la variable forma
  ' Por ejemplo imprimir el nombre de la forma en la ventana inmediato
  Debug.Print forma.Name
Next forma

Recorrer todas las formas en todas las diapositivas

Puede hacer un bucle a través de todas las formas en la presentación agregando un bucle para recorrer todas las diapositivas.

Dim diapositivaActual As Slide
Dim forma As Shape
 
For Each diapositivaActual In ActivePresentation.Slides
  For Each forma In diapositivaActual.Shapes
    ' Hacer algo con la forma actual referida a la variable 'forma'
    Debug.Print forma.Name
  Next forma 
Next diapositivaActual

Recorrer todos los cuadros de texto de la diapositiva activa

Los Cuadros de Texto son las formas más usadas en las presentaciones de PowerPoint. Puede hacer un bucle a través de todos los Cuadros de Texto, agregando un chequeo para ‘Tipo de Forma’ Los TexBoxes tienen el tipo de forma definido como la constante VBA msoTextBox (el valor numérico de la constante es 17)

Dim diapositivaActual As Slide
Dim forma As Shape
 
Set diapositivaActual = Application.ActiveWindow.View.Slide
For Each forma In diapositivaActual.Shapes
  ' Chequea si la forma es de tipo msoTextBox
  If forma.Type = 17 Then ' msoTextBox = 17
    'Imprimir el texto del TextBox
    Debug.Print forma.TextFrame2.TextRange.Text
  End If
Next forma

Recorrer todos los cuadros de texto en todas las diapositivas

Nuevamente, puede hacer un bucle a través de todos los cuadros de texto en la presentación, agregando un bucle para recorrer todas las diapositivas.

Dim diapositivaActual As Slide 
Dim forma As Shape
 
For Each diapositivaActual In ActivePresentation.Slides
  For Each forma In diapositivaActual.Shapes
    ' Chequear si el tipo de forma msoTextBox
    If forma.Type = 17 Then ' msoTextBox = 17
      ' Haga algo con el Texbox referido a la variable forma
      Debug.Print forma.TextFrame2.TextRange.Text
    End If
  Next forma
Next diapositivaActual

Copiar las diapositivas seleccionadas a una nueva presentación PPT

Para copiar ciertas diapositivas a una nueva presentación, primero seleccione las diapositivas deseadas en la presentación existente y luego ejecute el código siguiente;

Dim presentacionActual As Presentation
Dim diapositivaActual As Slide
Dim presentacionNueva As Presentation
 
' Guarda la referencia a la presentación actual.
Set presentacionActual = Application.ActivePresentation
 
' Guarda la referencia a la diapositiva actual.
Set diapositivaActual = Application.ActiveWindow.View.Slide
 
' Agrega una nueva presentación y la guarda en una referencia/variable
Set presentacionNueva = Application.Presentations.Add
 
' Copia las diapositivas seleccionadas
Selection.Copy
 
' pega las diapositivas en la variable presentacionNueva
presentacionNueva.Slides.Paste

Copiar diapositiva activa al final de la presentación activa

' Copiar la diapositiva actual
Application.ActiveWindow.View.Slide.Copy

' Pegar al final
ActivePresentation.Slides.Paste

Ejemplos útiles de macros de PowerPoint

Aquí hay algunos ejemplos de macros útiles que muestran cómo realizar tareas. Estos también demostrarán los conceptos descritos anteriormente.

Cambiar Diapositiva Durante la Presentación

Sub cambiarUnaDiapositivaDurantePresentacion()
    Dim indiceDiapositiva As Integer
    Dim indiceAnterior As Integer
    '  Cambiar la diapositiva actual a la diapositiva 4 seleccionada durante la presentación.
    indiceDiapositiva = 4
    ' El índice de la ventana de presentación de diapositivas actual es 1 en la colección SlideShowWindows
    indiceAnterior = SlideShowWindows(1).View.CurrentShowPosition
    SlideShowWindows(1).View.GotoSlide indiceDiapositiva
    
End Sub

Cambiar la fuente en todas las diapositivas en todos los cuadros de texto

Sub cambiarFuenteEnTodasLasDiapositivas()
    Dim miDiapositiva As Slide
    Dim forma As Shape
    
    ' Cambia el tamaño de la fuente en todas las diapositivas
    For Each miDiapositiva In ActivePresentation.Slides
      For Each forma In miDiapositiva.Shapes
        If forma.Type = 17 Then ' msoTextBox = 17
          ' Change Fontsize to 24
          forma.TextFrame.TextRange.Font.Size = 24
        End If
      Next forma
    Next miDiapositiva
End Sub

Cambiar mayúsculas a normales en todos los cuadros de texto

Sub cambiardeMayusculas_A_LetrasNormal()
    Dim miDiapositiva As Slide
    Dim forma As Shape
    
    ' Cambiar de mayúsculas a normales en todas las diapositivas
    For Each miDiapositiva In ActivePresentation.Slides
      For Each forma In miDiapositiva.Shapes
        If forma.Type = 17 Then ' msoTextBox = 17
          ' Cambiar las mayúsculas por las normales
          forma.TextFrame2.TextRange.Font.Allcaps = False
        End If
      Next forma
    Next miDiapositiva
End Sub

Alternar mayúsculas y minúsculas en todos los cuadros de texto

Sub AlternarMayusculasYNormales()
    Dim miDiapositiva As Slide
    Dim forma As Shape
    '  alternar entre mayúsculas y minúsculas para todas las diapositivas
    For Each miDiapositiva In ActivePresentation.Slides
      For Each forma In miDiapositiva.Shapes
        If forma.Type = 17 Then ' msoTextBox = 17
          ' Alternar entre mayúsculas y minúsculas
          forma.TextFrame2.TextRange.Font.Allcaps = _
            Not forma.TextFrame2.TextRange.Font.Allcaps
        End If
      Next forma
    Next miDiapositiva
End Sub

Eliminar el subrayado de los descendentes

En tipografía, un descendente es la parte de una letra que se extiende por debajo de la línea de base de una fuente. En la mayoría de las fuentes, los descendentes se reservan para los caracteres en minúscula como la g, j, q, p, y, a veces, la f.

Cuando se subraya un texto, no se ve bien bajo los descendientes. Aquí está el código para eliminar el subrayado de todos esos caracteres g, j, p, q, e y en toda la Presentación.

Sub QuitarSubrayadoDeDescendientes()
    Dim miDiapositiva As Slide
    Dim forma As Shape
    Dim listaDescendientes As String
    Dim frase As String
    Dim x As Long
    
    ' Eliminar los subrayados de los descendientes
    listaDescendientes = "gjpqy"
    For Each miDiapositiva In ActivePresentation.Slides
      For Each forma In miDiapositiva.Shapes
        If forma.Type = 17 Then ' msoTextBox = 17
         ' Eliminar el subrayado de las letras "gjpqy"
         With forma.TextFrame.TextRange
            frase = .Text
           For x = 1 To Len(.Text)
             If InStr(listaDescendientes, Mid$(frase, x, 1)) > 0 Then
              .Characters(x, 1).Font.Underline = False
             End If
           Next x
         End With
       End If
      Next forma
    Next miDiapositiva
End Sub

Quitar animaciones de todas las diapositivas

Utilice el código siguiente para eliminar todas las animaciones establecidas en una Presentación.

Sub QuitarAnimacionesDeTodasLasDiapositivas()
    Dim miDiapositiva As Slide
    Dim i As Long
    For Each miDiapositiva In ActivePresentation.Slides
      For i = miDiapositiva.TimeLine.MainSequence.Count To 1 Step -1
       'Eliminar cada animación
       miDiapositiva.TimeLine.MainSequence.Item(i).Delete
      Next i
    Next miDiapositiva
End Sub

Guardar la Presentación como PDF

Puedes guardar fácilmente la presentación activa en formato PDF.

Sub GuardarPresentacionComoPDF()
    Dim pptNombre As String
    Dim PDFNombre As String
    
    ' Guardar PowerPoint como PDF
    pptNombre = ActivePresentation.FullNombre
    ' Reemplazar la extensión del archivo PowerPoint en el nombre a PDF
    PDFNombre = Left(pptNombre, InStr(pptNombre, ".")) & "pdf"
    ActivePresentation.ExportAsFixedFormat PDFNombre, 2  ' ppFixedFormatTypePDF = 2
End Sub

Buscar y reemplazar texto

Puede encontrar y reemplazar texto en todos los cuadros de texto de todas las diapositivas. Después de la primera instancia del texto que quiere encontrar (definida por findWhat) necesita hacer un bucle a través del comando Find para encontrar otras instancias, si las hay.

Sub BuscarYReemplazarTexto()
    Dim miDiapositiva As Slide
    Dim forma As Shape
    Dim cadenaBuscar As String
    Dim cadenaReemplazo As String
    Dim formaTxt As TextRange
    Dim TmpTxt As TextRange
 
    cadenaBuscar = "jackal"
    cadenaReemplazo = "fox"
    
    ' Buscar,encontrar y reemplazar
    For Each miDiapositiva In ActivePresentation.Slides
      For Each forma In miDiapositiva.Shapes
        If forma.Type = 17 Then ' msoTextBox = 17
          Set formaTxt = forma.TextFrame.TextRange
          'Encuentra la primera instancia de la palabra "cadenaBuscar" (si existe)
          Set TmpTxt = formaTxt.Replace(cadenaBuscar, _
             Replacewhat:=cadenaReemplazo, _
             WholeWords:=True)
    
          'Buscar cualquier instancia adicional de la palabra "cadenaBuscar" (si existe)
          Do While Not TmpTxt Is Nothing
            Set formaTxt = formaTxt.Characters(TmpTxt.Start + TmpTxt.Length, formaTxt.Length)
            Set TmpTxt = formaTxt.Replace(cadenaBuscar, _
              Replacewhat:=cadenaReemplazo, _
              WholeWords:=True)
          Loop
        End If
      Next forma
    Next miDiapositiva
End Sub

Exportar diapositiva como imagen

Puede exportar la diapositiva actual (o cualquier otra diapositiva) como una imagen PNG o JPG (JPEG) o BMP.

Sub ExportarDiapositivaComoImagen()
    Dim tipoImagen As String
    Dim pptNombre As String
    Dim nombreImagen As String
    Dim miDiapositiva As Slide
    
    ' Exportar la diapositiva actual a una imagen
    tipoImagen = "png" ' or jpg or bmp
    pptNombre = ActivePresentation.FullName
    nombreImagen = Left(pptNombre, InStr(pptNombre, ".")) & tipoImagen
    Set miDiapositiva = Application.ActiveWindow.View.Slide
    miDiapositiva.Export nombreImagen, tipoImagen
End Sub

Cambiar el tamaño de la imagen para cubrir toda la diapositiva

Sub RedimensionarImagenParaCubrirLaDiapositivaCompleta()
    Dim miDiapositiva As Slide
    Dim forma As Shape
    
    ' Redimensionar la imagen al tamaño completo de la diapositiva
    ' Cambiar la altura y el ancho de la primera forma en la diapositiva actual
    ' para ajustarse a las dimensiones de la diapositiva
    Set miDiapositiva = Application.ActiveWindow.View.Slide
    Set forma = miDiapositiva.Shapes(1)
    '' reemplace las dos declaraciones anteriores con
    '' la siguiente declaración si desea
    '' expandir la forma actualmente seleccionada
    '' dará error si no hay nada seleccionado
    'Set forma = ActiveWindow.Selection.ShapeRange(1)
    
    With forma
        .LockAspectRatio = False
        .Height = ActivePresentation.PageSetup.SlideHeight
        .Width = ActivePresentation.PageSetup.SlideWidth
        .Left = 0
        .Top = 0
    End With
End Sub

Salir de todas las presentaciones de diapositivas en ejecución

Si tiene varias presentaciones de diapositivas abiertas al mismo tiempo, puede cerrarlas todas utilizando la siguiente macro.

Sub salirDeTodasLasPresentacionesActivas()
    Do While SlideShowWindows.Count > 0
        SlideShowWindows(1).View.Exit
    Loop
End Sub

Automatizando PowerPoint desde Excel

También puede conectarse a PowerPoint a través de otras aplicaciones (como Excel y Word). Como primer paso, debe referirse a una instancia de PowerPoint. Hay dos formas de hacerlo vinculación temprana y vinculación tardía .

Abrir PowerPoint – Vinculación temprana

En ‘vinculación temprana’ debes establecer explícitamente una referencia a ‘Microsoft PowerPoint 16 Object Library’ (para MS Office 2019) en el VBE (Visual Basic Editor) utilizando la opción Herramientas->Referencias.

' Vinculación temprana
Dim pptApp As Application
Set pptApp = New PowerPoint.Application

Abrir PowerPoint – Vinculación tardía

En ‘vinculación tardía’ la variable de la aplicación se declara como un objeto y el motor de VBA se conecta a la aplicación correcta en tiempo de ejecución.

' Vinculación tardía
Dim pptApp As Object
Set pptApp = CreateObject("PowerPoint.Application")

Hacer visible la aplicación

Después de establecer la referencia a la aplicación PowperPoint, es necesario hacerla visible.

pptApp.Visible = True

Manipular PowerPoint

Puede utilizar todos los métodos para manipular presentaciones, desde dentro de PowerPoint, descritos anteriormente desde Excel con sólo añadir la referencia a PowerPoint creada por usted anteriormente.

Por ejemplo

Presentations.Open ("Mi presentacion.pptx")

tiene que ser utilizado así

pptApp .Presentations.Open ("Mi Presentacion.pptx")

Cerrar la aplicación

Una vez que haya completado lo que quería hacer con la aplicación PowerPoint debe cerrarla y debe liberar la referencia

pptApp.Quit
Set pptApp = Nothing

Copiar de Excel a PowerPoint

Este código copiará un rango de Excel a PowerPoint:

Nota: Se ha mantenido lo más simple posible para mostrar cómo se puede copiar un rango de Excel a PowerPoint utilizando VBA.

Sub copiarRabgoAPresentacion()
 
' abrir una nueva instancia de PowerPoint
Set pptApp = CreateObject("PowerPoint.Application")
 
With pptApp
    ' Crear una nueva presentación
    Set ppt = .Presentations.Add
    ' Añadir una diapositiva en blanco
    Set newSlide = ppt.Slides.Add(1, 12) ' ppLayoutBlank = 12
    ' Copiar Rango de la Hoja Activa en Excel
    ActiveSheet.Range("A1:E10").Copy
    ' Pegar en Powerpoint como imagen
    newSlide.Shapes.PasteSpecial DataType:=2  '2 = ppPasteEnhancedMetafile
    ' Cambiar a PowerPoint
    .Activate
End With
 
End Sub

Preguntas frecuentes sobre VBA en PowerPoint

¿Qué son las macros en PPT?

Una macro es un término general que se refiere a un conjunto de instrucciones de programación que automatizan tareas. Las macros de PowerPoint (PPT) automatizan tareas en PowerPoint utilizando el lenguaje de programación VBA.

¿Cómo se utiliza VBA en PowerPoint?

Para utilizar VBA en PowerPoint, abra el Editor VBA (ALT + F11 o Desarrollador > Visual Basic).

¿Cómo puedo crear una macro en PowerPoint?

1. Abra el Editor VBA (ALT + F11 o Desarrollador > Visual Basic)

2. Vaya a Insertar > Módulo para crear un Módulo de Código

3. Escriba ‘Sub HelloWorld’ y pulse Enter

4. ¡Entre las líneas ‘Sub HelloWorld’ y ‘End Sub’, escriba ‘MsgBox «Hello World!

5. Has creado una macro

6. Ahora pulsa ‘F5’ para ejecutar la macro

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples