Ejemplos y tutoriales de macros VBA en PowerPoint
In this Article
- VBA PDF (descargas gratuitas)
- Tutorial de PowerPoint VBA (Macros)
- Guardar como presentación habilitada para macros
- Habilitar la pestaña ‘Desarrollador’ en la cinta de opciones
- Crear una macro de PowerPoint
- Aplicación PowerPoint
- Abrir una nueva presentación
- Abrir una presentación existente
- Abrir y asignar a una variable
- Hacer referencia a la presentación activa
- Guardar la presentación actual
- Cerrar la presentación actual
- Referencias útiles
- Asignar una presentación existente (por nombre) a una variable
- Asignar la diapositiva activa a una variable
- Asignar la diapositiva por índice a una variable
- Contar el número de diapositivas
- Obtener el número de índice de la diapositiva actual
- Añadir una diapositiva en blanco al final de la presentación
- Añadir una diapositiva después de la diapositiva actual
- Eliminar una diapositiva
- Ir a una diapositiva específica
- Mover Diapositiva
- Bucle a través de todas las diapositivas
- Bucle a través de todas las formas de la diapositiva activa
- Recorrer todas las formas en todas las diapositivas
- Recorrer todos los cuadros de texto de la diapositiva activa
- Recorrer todos los cuadros de texto en todas las diapositivas
- Copiar las diapositivas seleccionadas a una nueva presentación PPT
- Copiar diapositiva activa al final de la presentación activa
- Ejemplos útiles de macros de PowerPoint
- Cambiar Diapositiva Durante la Presentación
- Cambiar la fuente en todas las diapositivas en todos los cuadros de texto
- Cambiar mayúsculas a normales en todos los cuadros de texto
- Alternar mayúsculas y minúsculas en todos los cuadros de texto
- Eliminar el subrayado de los descendentes
- Quitar animaciones de todas las diapositivas
- Guardar la Presentación como PDF
- Buscar y reemplazar texto
- Exportar diapositiva como imagen
- Cambiar el tamaño de la imagen para cubrir toda la diapositiva
- Salir de todas las presentaciones de diapositivas en ejecución
- Automatizando PowerPoint desde Excel
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!
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)
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.
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