Esta es una guía completa para automatizar PowerPoint usando macros VBA (Visual Basic para Aplicaciones). A continuación encontrará muchos ejemplos útiles.
VBA PDF (descargas gratuitas)
¡Descargue nuestro tutorial gratuito de Microsoft PowerPoint VBA! ¡O tutoriales de VBA para otros programas de Office!
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)
Habilitar la pestaña "Desarrollador" en la cinta
Debe habilitar la pestaña Desarrollador en la cinta antes de crear el código VBA. Para hacerlo, elija Archivo -> Opciones, luego haga clic en "Personalizar cinta" y marque la casilla junto a la pestaña "Desarrollador" en el panel derecho.
Crear macro de PowerPoint
Este es un ejemplo simple de una macro de PowerPoint VBA:
1234567891011 | Sub SavePresentationAsPDF ()Dim pptName como cadenaDim PDFName como cadena'Guardar PowerPoint como PDFpptName = ActivePresentation.FullName'Reemplazar la extensión del archivo de PowerPoint en el nombre a PDFPDFName = Izquierda (pptName, InStr (pptName, ".")) & "Pdf"ActivePresentation.ExportAsFixedFormat PDFName, 2 'ppFixedFormatTypePDF = 2End 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 de PDF
- Asigna el nombre de la presentación activa a la variable pptName
- Crea el nombre completo del PDF
- Guarda la presentación como PDF
Aplicación de PowerPoint
Cuando el código VBA se ejecuta dentro de una presentación de PowerPoint, la aplicación de PowerPoint es la aplicación predeterminada y se puede manipular sin una referencia explícita. Crear una nueva presentación
Para crear una presentación, use el método Add de la aplicación PowerPoint.
123 | Aplicación.Presentaciones.Añadir'o sin referencia explícitaPresentaciones Agregar |
Abrir una nueva presentación
Para abrir una presentación nueva y en blanco, utilice el método Add de Application.
1 | Presentaciones Agregar |
Abrir una presentación existente
Para abrir una presentación que ya ha creado, utilice el método Open de Application.
1 | Presentations.Open ("Mi presentación.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 que pueda manipularla según sus requisitos.
12 | Dim ppt como presentaciónEstablecer ppt = Presentations.Open ("Mi presentación.pptx") |
Consulte la presentación activa
Utilice la referencia ActivePrentation para manipular la presentación activa en la GUI cuando se ejecuta el código VBA.
12 | 'Imprima el nombre de la presentación activa en la ventana inmediataDebug.Print ActivePresentation.Name |
Guardar presentación actual
La siguiente declaración guardará la presentación activa si se guardó antes. Si no se ha guardado, aparecerá el cuadro de diálogo "Guardar como".
1 | ActivePresentation.Save |
Cerrar presentación actual
La siguiente declaración cerrará la presentación activa incluso si no se guardó después de la última edición.
1 | ActivePresentation.Close |
Referencias útiles
Asignar presentación existente (por nombre) a variable
12 | Atenuar myPresentationByName como presentaciónEstablecer myPresentationByName = Application.Presentations ("Mi presentación") |
Asignar diapositiva activa a variable
12 | Corriente atenuada Deslizamiento como deslizamientoEstablecer currentSlide = Application.ActiveWindow.View.Slide |
Asignar diapositiva por índice a variable
12 | Atenuar mySlide como diapositivaEstablecer mySlide = ActivePresentation.Slides (11) |
Contar el número de diapositivas
12 | Atenuar diapositivaslideCount = ActivePresentation.Slides.Count |
Obtener índice de diapositiva Número de diapositiva actual
12 | Atenuar currentSlideIndex como diapositivacurrentSlideIndex = Application.ActiveWindow.View.Slide.SlideIndex |
Agregar una diapositiva en blanco al final de la presentación de diapositivas
1234567 | Atenuar diapositivaDim newSlide as SlideslideCount = ActivePresentation.Slides.CountEstablecer newSlide = ActivePresentation.Slides.Add (slideCount + 1, 12)'o como ppLayoutBlank = 12Establecer newSlide = ActivePresentation.Slides.Add (slideCount + 1, ppLayoutBlank) |
Agregar una diapositiva después de la diapositiva actual
12345 | Dim newSlide As SlideAtenuar currentSlideIndex como enterocurrentSlideIndex = Application.ActiveWindow.View.Slide.SlideIndexEstablecer newSlide = ActivePresentation.Slides.Add (currentSlideIndex, ppLayoutBlank) |
Eliminar una diapositiva
1234 | Atenuar currentSlideIndex como enterocurrentSlideIndex = Application.ActiveWindow.View.Slide.SlideIndexActivePresentation.Slides (currentSlideIndex) .Delete |
Ir a una diapositiva específica
12 | Esto te llevará a la diapositiva número 4.Application.ActiveWindow.View.GotoSlide (4) |
Mover diapositiva
Puede mover una diapositiva de su posición anterior a la nueva posición
123456 | 'Pasar de la diapositiva 3 a la primera diapositivaDim oldPosition como entero, dim newPosition como enterooldPosition = 3newPosition = 1ActivePresentation.Slides (oldPosition) .MoveTo toPos: = newPosition |
Recorrer todas las diapositivas
Puede hacer algo con cada diapositiva o pasar por todas las diapositivas para encontrar algunas diapositivas y hacer algo al respecto con el uso del código;
123456 | Atenuar mySlide como SlidePara cada mySlide en ActivePresentation.Slides'Hacer algo con la diapositiva actual a la que se hace referencia en la variable' mySlide ''Debug.Print mySlide.NameLa siguiente diapositiva |
Recorrer todas las formas de la diapositiva activa
El poder de PowerPoint se puede realizar mediante el uso de "Formas". El siguiente código recorre todas las formas de la diapositiva actual para que pueda manipularlas como desee;
123456789 | Dim currentSlide as SlideDim shp como formaEstablecer currentSlide = Application.ActiveWindow.View.SlidePara cada shp en currentSlide.Shapes'Hacer algo con la forma actual a la que se hace referencia en la variable' shp ''Por ejemplo, imprima el nombre de la forma en la ventana InmediatoDebug.Print shp.NameSiguiente shp |
Recorrer todas las formas en todas las diapositivas
Puede recorrer todas las formas de la presentación agregando un bucle para recorrer todas las diapositivas.
123456789 | Dim currentSlide as SlideDim shp como formaPara cada diapositiva actual en ActivePresentation.SlidesPara cada shp en currentSlide.Shapes'Hacer algo con la forma actual a la que se hace referencia en la variable' shp 'Debug.Print shp.NameSiguiente shpSiguiente diapositiva actual |
Recorrer todos los cuadros de texto de la diapositiva activa
Los TextBoxes son las formas más utilizadas en las presentaciones de PowerPoint. Puede recorrer todos los cuadros de texto agregando una marca de "Tipo de forma". Los TexBoxes tienen el tipo de forma definido como la constante de VBA msoTextBox (el valor numérico de la constante es 17)
1234567891011 | Dim currentSlide as SlideDim shp como formaEstablecer currentSlide = Application.ActiveWindow.View.SlidePara cada shp en currentSlide.Shapes'Compruebe si el tipo de forma es msoTextBoxSi shp.Type = 17 Entonces 'msoTextBox = 17'Imprime el texto en el TextBoxDebug.Print shp.TextFrame2.TextRange.TextTerminara siSiguiente shp |
Recorrer todos los cuadros de texto en todas las diapositivas
Nuevamente, puede recorrer todos los cuadros de texto de la presentación agregando un bucle para recorrer todas las diapositivas.
1234567891011 | Atenuar corriente Deslizar como Deslizar Atenuar shp como FormaPara cada diapositiva actual en ActivePresentation.SlidesPara cada shp en currentSlide.Shapes'Compruebe si el tipo de forma es msoTextBoxSi shp.Type = 17 Entonces 'msoTextBox = 17'Hacer algo con el TextBox mencionado en la variable' shp 'Debug.Print shp.TextFrame2.TextRange.TextTerminara siSiguiente shpSiguiente diapositiva actual |
Copiar 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 a continuación;
123456789101112131415161718 | Dim currentPresentation como presentaciónDim currentSlide as SlideDim newPresentation como presentación'Guardar referencia a la presentación actualEstablecer currentPresentation = Application.ActivePresentation'Guardar referencia a la diapositiva actualEstablecer currentSlide = Application.ActiveWindow.View.Slide'Agregar nueva presentación y guardar en una referenciaEstablecer NewPresentation = Application.Presentations.Add'Copiar diapositivas seleccionadasSelección. CopiarPéguelo en una nueva presentaciónNewPresentation.Slides.Paste |
Copiar la diapositiva activa al final de la presentación activa
12345 | 'Copiar diapositiva actualApplication.ActiveWindow.View.Slide.Copy'Pegar al finalActivePresentation.Slides.Paste |
Ejemplos útiles de macros de PowerPoint
A continuación, se muestran 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 de diapositivas
1234567891011 | Sub ChangeSlideDuringSlideShow ()Atenuar SlideIndex como enteroAtenuar SlideIndex Anterior como entero'Cambiar la diapositiva actual a la diapositiva 4 seleccionada durante la presentación de diapositivasSlideIndex = 4'El índice de la ventana de presentación de diapositivas actual es 1 en la colección SlideShowWindowsSlideIndexPrevious = SlideShowWindows (1) .View.CurrentShowPositionSlideShowWindows (1) .View.GotoSlide SlideIndexEnd Sub |
Cambiar fuente en todas las diapositivas en todos los cuadros de texto
123456789101112131415 | Sub ChangeFontOnAllSlides ()Atenuar mySlide como diapositivaDim shp como forma'Cambiar el tamaño de fuente en todas las diapositivasPara cada mySlide en ActivePresentation.SlidesPara cada artículo en mySlide.ShapesSi shp.Type = 17 Entonces 'msoTextBox = 17'Cambiar tamaño de fuente a 24shp.TextFrame.TextRange.Font.Size = 24Terminara siSiguiente shpSiguiente mySlideEnd Sub |
Cambiar mayúsculas y minúsculas a normal en todos los cuadros de texto
123456789101112131415 | Sub ChangeCaseFromUppertoNormal ()Atenuar mySlide como diapositivaDim shp como forma'Cambiar de mayúscula a normal para todas las diapositivasPara cada mySlide en ActivePresentation.SlidesPara cada artículo en mySlide.ShapesSi shp.Type = 17 Entonces 'msoTextBox = 17'Cambiar mayúsculas a mayúsculas y minúsculasshp.TextFrame2.TextRange.Font.Allcaps = FalsoTerminara siSiguiente shpSiguiente mySlideEnd Sub |
Alternar entre mayúsculas y minúsculas en todos los cuadros de texto
12345678910111213141516 | Sub ToggleCaseBetweenUpperAndNormal ()Atenuar mySlide como diapositivaDim shp como forma'Alternar entre mayúsculas y minúsculas para todas las diapositivasPara cada mySlide en ActivePresentation.SlidesPara cada artículo en mySlide.ShapesSi shp.Type = 17 Entonces 'msoTextBox = 17'Alternar entre mayúsculas y minúsculasshp.TextFrame2.TextRange.Font.Allcaps = _No shp.TextFrame2.TextRange.Font.AllcapsTerminara siSiguiente shpSiguiente mySlideEnd Sub |
Eliminar el subrayado de los descendientes
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 descendientes se reservan para caracteres en minúscula como g, j, q, p, y y, a veces, f.
Cuando subraya el texto, no se ve bien debajo de los descendientes. Aquí está el código para eliminar el subrayado de todos los caracteres g, j, p, qey en toda la Presentación.
1234567891011121314151617181920212223242526 | Sub RemoveUnderlineFromDescenders ()Atenuar mySlide como diapositivaDim shp como formaDim descenders_list como cadenaFrase tenue como cadenaDim x tan largo'Eliminar subrayados de descendienteslista_descendientes = "gjpqy"Para cada mySlide en ActivePresentation.SlidesPara cada artículo en mySlide.ShapesSi shp.Type = 17 Entonces 'msoTextBox = 17"Eliminar el subrayado de las letras" gjpqy "Con shp.TextFrame.TextRangefrase = .TextoPara x = 1 Para Len (.Texto)Si InStr (lista_descendientes, Mid $ (frase, x, 1))> 0 Entonces.Caracteres (x, 1) .Font.Underline = FalseTerminara siSiguiente xTerminar conTerminara siSiguiente shpSiguiente mySlideEnd Sub |
Eliminar animaciones de todas las diapositivas
Utilice el siguiente código para eliminar todas las animaciones establecidas en una presentación.
123456789101112 | Sub RemoveAnimationsFromAllSlides ()Atenuar mySlide como diapositivaDim i tan largoPara cada mySlide en ActivePresentation.SlidesPara i = mySlide.TimeLine.MainSequence.Count To 1 Step -1'Eliminar cada animaciónmySlide.TimeLine.MainSequence.Item (i) .DeleteSiguiente yoSiguiente mySlideEnd Sub |
Guardar presentación como PDF
Puede guardar fácilmente la presentación activa en formato PDF.
1234567891011 | Sub SavePresentationAsPDF ()Dim pptName como cadenaDim PDFName como cadena'Guardar PowerPoint como PDFpptName = ActivePresentation.FullName'Reemplazar la extensión del archivo de PowerPoint en el nombre a PDFPDFName = Izquierda (pptName, InStr (pptName, ".")) & "Pdf"ActivePresentation.ExportAsFixedFormat PDFName, 2 'ppFixedFormatTypePDF = 2End Sub |
Buscar y reemplazar texto
Puede buscar y reemplazar texto en Todos los cuadros de texto de Todas las diapositivas. Después de la primera instancia del texto que desea encontrar (definida por findWhat), debe recorrer el comando Buscar para encontrar otras instancias, si las hay.
123456789101112131415161718192021222324252627282930313233 | Sub FindAndReplaceText ()Atenuar mySlide como diapositivaDim shp como formaDim findLo que como cadenaDim reemplazar con como cadenaAtenuar ShpTxt como TextRangeAtenuar TmpTxt como TextRangefindWhat = "chacal"replaceWith = "zorro"'Buscar y buscar y reemplazarPara cada mySlide en ActivePresentation.SlidesPara cada artículo en mySlide.ShapesSi shp.Type = 17 Entonces 'msoTextBox = 17Establecer ShpTxt = shp.TextFrame.TextRange'Buscar la primera instancia de la palabra "Buscar" (si existe)Establecer TmpTxt = ShpTxt.Replace (findWhat, _Reemplazar qué: = reemplazar con, _Palabras completas: = Verdadero)'Buscar cualquier instancia adicional de la palabra "Buscar" (si existe)Hacer mientras TmpTxt no es nadaEstablecer ShpTxt = ShpTxt.Characters (TmpTxt.Start + TmpTxt.Length, ShpTxt.Length)Establecer TmpTxt = ShpTxt.Replace (findWhat, _Reemplazar qué: = reemplazar con, _Palabras completas: = Verdadero)CírculoTerminara siSiguiente shpSiguiente mySlideEnd Sub |
Exportar diapositiva como imagen
Puede exportar la diapositiva actual (o cualquier otra diapositiva) como una imagen PNG o JPG (JPEG) o BMP.
1234567891011121314 | Sub ExportSlideAsImage ()Dim imageType como cadenaDim pptName como cadenaAtenuar imageName como cadenaAtenuar mySlide como diapositiva'Exportar diapositiva actual a imagenimageType = "png" 'o jpg o bmppptName = ActivePresentation.FullNameimageName = Izquierda (pptName, InStr (pptName, ".")) & imageTypeEstablecer mySlide = Application.ActiveWindow.View.slidemySlide.Export imageName, imageTypeEnd Sub |
Cambiar el tamaño de la imagen para cubrir la diapositiva completa
1234567891011121314151617181920212223242526 | Sub ResizeImageToCoverFullSlide ()Atenuar mySlide como diapositivaDim shp como forma'Cambiar el tamaño de la imagen a tamaño de diapositiva completo'Cambiar la altura y el ancho de la primera forma en la diapositiva actual'para adaptarse a las dimensiones de la diapositivaEstablecer mySlide = Application.ActiveWindow.View.slideEstablecer shp = mySlide.Shapes (1)'''' Reemplace dos enunciados anteriores con'' la siguiente declaración si desea'' expandir la forma seleccionada actualmente'' dará error si no se selecciona nada'Establecer shp = ActiveWindow.Selection.ShapeRange (1)Con shp.LockAspectRatio = Falso.Height = ActivePresentation.PageSetup.SlideHeight.Width = ActivePresentation.PageSetup.SlideWidth.Izquierda = 0.Top = 0Terminar conEnd Sub |
Salir de todas las presentaciones de diapositivas en ejecución
Si tiene varias presentaciones de diapositivas abiertas al mismo tiempo, puede cerrarlas todas con la macro siguiente.
1234567 | Sub ExitAllRunningSlideShows ()Hacer mientras SlideShowWindows.Count> 0SlideShowWindows (1) .View.SalirCírculoEnd Sub |
Automatizar PowerPoint desde Excel
También puede conectarse a PowerPoint a través de otras aplicaciones (como Excel y Word). Como primer paso, debe hacer referencia a una instancia de PowerPoint.
Hay dos formas de hacerlo: encuadernación anticipada y encuadernación tardía .
PowerPoint abierto - Encuadernación anticipada
En "Enlace anticipado", debe establecer explícitamente una referencia a "Biblioteca de objetos de Microsoft PowerPoint 16" (para MS Office 2022) en el VBE (Editor de Visual Basic) mediante la opción Herramientas-> Referencias.
123 | 'Encuadernación tempranaDim pptApp como aplicaciónEstablecer pptApp = Nueva aplicación de PowerPoint. |
PowerPoint abierto - Encuadernación tardía
En "Enlace tardío", la variable de aplicación se declara como un objeto y el motor VBA se conecta a la aplicación correcta en tiempo de ejecución.
123 | 'Encuadernación tardíaDim pptApp como objetoEstablecer pptApp = CreateObject ("PowerPoint.Application") |
Hacer visible la aplicación
Después de configurar la referencia a la aplicación PowperPoint, es posible que deba hacerla visible.
1 | pptApp.Visible = Verdadero |
Manipular PowerPoint
Puede usar todos los métodos para manipular presentaciones, desde dentro de PowerPoint, descritos anteriormente desde Excel, simplemente agregando la referencia a PowerPoint creada por usted anteriormente.
Por ejemplo
1 | Presentations.Open ("Mi presentación.pptx") |
tiene que ser usado me gusta esto
1 | pptApp .Presentations.Open ("Mi presentación.pptx") |
Cerrar la aplicación
Una vez que haya completado lo que quería hacer con la aplicación de PowerPoint, debe cerrarla y liberar la referencia.
12 | pptApp.QuitEstablecer pptApp = Nada |
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 un rango de Excel se puede copiar a PowerPoint usando VBA.
12345678910111213141516171819 | Sub copyRangeToPresentation ()'Abrir nueva instancia de PowerPointEstablecer pptApp = CreateObject ("PowerPoint.Application")Con pptApp'Crear una nueva presentaciónEstablecer ppt = .Presentations.Add'Agregar una diapositiva en blancoEstablecer newSlide = ppt.Slides.Add (1, 12) 'ppLayoutBlank = 12'Copiar rango de hoja activa en ExcelActiveSheet.Range ("A1: E10"). Copiar'Pegar en PowerPoint como una imagennewSlide.Shapes.PasteSpecial DataType: = 2 '2 = ppPasteEnhancedMetafile'Cambiar a PowerPoint.ActivarTerminar conEnd Sub |
Preguntas frecuentes sobre PowerPoint VBA
¿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 las tareas en PowerPoint utilizando el lenguaje de programación VBA.
¿Cómo uso VBA en PowerPoint?
Para usar VBA en PowerPoint, abra el Editor de VBA (ALT + F11 o Desarrollador> Visual Basic).
¿Cómo creo una macro en PowerPoint?
1. Abra el Editor de VBA (ALT + F11 o Desarrollador> Visual Basic)
2. Vaya a Insertar> Módulo para crear un módulo de código.
3. Escribe "Sub HelloWorld" y presiona Enter.
4. Entre las líneas "Sub HelloWorld" y "End Sub", escriba "MsgBox" Hello World! "
5. ¡Ha creado una macro!
6. Ahora presione "F5" para ejecutar la macro
Escrito por: Vinamra Chandra