Introducción a VBA en PowerPoint 2010
Resumen: presenta Visual Basic para Aplicaciones (VBA) en PowerPoint 2010 para el usuario de PowerPoint que aún no es un programador. Incluye una introducción al lenguaje de VBA, instrucciones sobre cómo obtener acceso a VBA en PowerPoint 2010, una explicación detallada de una solución para un problema real de programación de VBA para PowerPoint y sugerencias sobre programación y depuración.
Última modificación: viernes, 24 de abril de 2015
Hace referencia a: Office 2010 | PowerPoint 2010 | VBA
En este artículo
¿Por qué usar VBA en PowerPoint 2010?
Programación de VBA 101
Macros y el editor de Visual Basic
Una macro para resolver el desorden
Encontrar objetos
Aprender del ejemplo
Crear la macro
¿Qué hacer a continuación?
Se aplica a: Microsoft PowerPoint 2010
Publicado: noviembre de 2009
Proporcionado por: Ben Chinowsky, SDK Bridge
Contenido
¿Por qué usar VBA en PowerPoint 2010?
Programación de VBA 101
Macros y el editor de Visual Basic
Una macro para resolver el desorden
Encontrar objetos
Aprender del ejemplo
Crear la macro
¿Qué hacer a continuación?
¿Por qué usar VBA en PowerPoint 2010?
PowerPoint 2010 está lleno de características que puede usar para hacer sus presentaciones más efectivas y atractivas, y es fácil encontrar la mayoría de las características desde la interfaz del usuario. Algunas veces, sin embargo, a pesar de tener muchas características en la interfaz de usuario (UI) de PowerPoint, tal vez usted desee encontrar una forma más fácil de realizar tareas comunes y repetitivas, o alguna que la UI no parece resolver. Afortunadamente, las aplicaciones de Office como PowerPoint tienen Visual Basic para Aplicaciones (VBA), un lenguaje de programación que le permite ampliar esas aplicaciones.
VBA funciona con la ejecución de macros, procedimientos paso a paso escritos en Visual Basic. Aprender a programar puede parecer intimidante, pero con un poco de paciencia y algunos ejemplos como los que se incluyen en este artículo, muchos usuarios notaron que aprender aunque sea un poco de código de VBA hace su trabajo más fácil y les da la oportunidad de hacer cosas en Office que no sabían que eran posibles. Después de que haya aprendido un poco de VBA, aprender más se torna más accesible, así que las posibilidades son infinitas.
La razón más común para usar VBA en PowerPoint VBA es automatizar tareas repetitivas. Por ejemplo, supongamos que tiene una presentación que tiene muchos cuadros de texto vacíos que desea eliminar. En vez de ir a cada diapositiva para encontrar, seleccionar y eliminar cada cuadro de texto vacío, puede usar una macro de VBA para PowerPoint para que lo haga por usted.
Otra razón para usar VBA para PowerPoint es agregar nuevas características a PowerPoint. Por ejemplo, puede crear una macro de VBA que se ejecute en la mitad exacta de su presentación, independientemente de cuántas diapositivas tenga, y aparezca un mensaje que indica el tiempo restante disponible para la presentación.
Hay muchas otras razones para usar VBA para PowerPoint, una de las cuales es realizar tareas que implican trabajar con PowerPoint en conjunto con otras aplicaciones de Office. Por ejemplo, puede pasar todo el texto de una presentación a un archivo de valores separados por comas (CSV) que se puede abrir en Microsoft Excel 2010.
Nota
En algunas aplicaciones de Office, puede crear macros de VBA ejecutando una grabadora de macros. Más específicamente, puede realizar varias acciones y la grabadora de macros las graba para poder volver a reproducirlas. PowerPoint 2010 no tiene grabadora de macros, por lo que escribir código VBA es la única manera de crear macros. (Puede modificar macros que se grabaron o escribieron en versiones anteriores de PowerPoint con el editor de Visual Basic en PowerPoint 2010).
Este artículo presenta VBA de PowerPoint mediante la creación de una macro que elimina todos los cuadros de texto vacíos en una presentación.
Programación de VBA 101
Usar código para que las aplicaciones hagan cosas
Usted podría pensar que escribir código es algo misterioso o difícil, pero los principios básicos usan razonamientos de la vida cotidiana y son muy fáciles de aprender. Las aplicaciones Office 2010 se crean de tal forma que exponen elementos llamados objetos que pueden recibir instrucciones. La interacción con las aplicaciones se realiza a través de instrucciones a varios objetos de una aplicación. Estos objetos existen en gran cantidad, son variados y flexibles, pero tienen sus límites. Solo pueden hacer aquello para lo que fueron diseñados y harán únicamente lo que usted les indique.
El modelo de objetos
Los objetos de programación se relacionan unos con otros de forma sistemática en una jerarquía llamada modelo de objetos de la aplicación. El modelo de objetos refleja aproximadamente lo que usted ve en la interfaz de usuario. Por ejemplo, el modelo de objetos de PowerPoint tiene los objetos Application, Presentation y Slide, entre muchos otros. El modelo de objetos es un mapa conceptual de la aplicación y sus capacidades.
Propiedades y métodos
Puede manipular objetos para establecer sus Propiedades y llamar sus Métodos. Establecer una propiedad cambia una parte de la calidad del objeto. Llamar un método provoca que el objeto realice alguna acción. Por ejemplo, el objeto Slide tiene un método Copy que pone una copia de la diapositiva en el portapapeles y una propiedad Layout que representa el diseño de la diapositiva.
Colecciones
Muchos objetos se incluyen en las versiones singulares y plurales: presentación y presentaciones, diapositiva y diapositivas y así sucesivamente. Las versiones plurales se denominan colecciones. Los objetos de colección se usan para realizar una acción en varios elementos de la colección. Este artículo también explica cómo usar la colección Slides para quitar objetos no deseados en cada diapositiva en una presentación.
Macros y el editor de Visual Basic
Ahora que ya sabe un poco acerca de cómo Microsoft PowerPoint 2010 expone su modelo de objetos, probablemente esté ansioso por probar llamar métodos de objetos y establecer las propiedades del objeto. Para ello, debe escribir el código en un lugar y de una forma que Office pueda entenderlo; normalmente, con el editor de Visual Basic. Aunque se instala de forma predeterminada, muchos usuarios no saben que está disponible hasta que no se habilita en la cinta de opciones.
La pestaña Desarrollador
Todas las aplicaciones Office 2010 usan la cinta de opciones. Una de las pestañas de la cinta de opciones es la pestaña Desarrollador, donde se accede al editor de Visual Basic y a otras herramientas de desarrollador. Como Office 2010 no muestra la pestaña Desarrollador de forma predeterminada, debe habilitarla con el siguiente procedimiento:
Para habilitar la pestaña Desarrollador
En la pestaña Archivo, elija Opciones para abrir el cuadro de diálogo Opciones de PowerPoint.
Haga clic en Personalizar cinta de opciones en el lado izquierdo del cuadro de diálogo.
En Comandos disponibles en en el lado izquierdo del cuadro de diálogo, seleccione Comandos más utilizados.
En Personalizar cinta de opciones en el lado derecho del cuadro de diálogo, seleccione Pestañas principales y, a continuación, seleccione la casilla de verificación Desarrollador.
Haga clic en Aceptar.
Después de que PowerPoint muestra la pestaña Desarrollador, verá la ubicación de los botones Visual Basic, Macros y Seguridad de macros en la pestaña.
Figura 1. Pestaña Desarrollador en PowerPoint 2010
Problemas de seguridad
Haga clic en el botón Seguridad de macros para especificar qué macros se pueden ejecutar y en qué condiciones. Si bien el código de macro no autorizado puede dañar gravemente su equipo, las condiciones de seguridad que impiden la ejecución de macros útiles pueden limitar su productividad. La seguridad de macros es un tema bastante complejo y complicado que debe estudiar y comprender si trabaja con las macros de PowerPoint.
Para los fines de este artículo, tenga en cuenta que si la barra Advertencia de seguridad: Las macros se han deshabilitado aparece entre la cinta de opciones y la hoja de cálculo cuando se abre un libro que contiene una macro, puede hacer clic en el botón Habilitar contenido para habilitar las macros.
Además, tenga en cuenta que, como medida de seguridad, no se puede guardar una macro en el formato de presentación de PowerPoint predeterminado (.pptx); en su lugar, debe guardar la macro en un archivo con una extensión especial, .pptm.
El editor de Visual Basic
Después de mostrar la pestaña Desarrollador puede abrir el editor de Visual Basic, que es la herramienta integrada que se usa para escribir y editar código VBA para PowerPoint.
Para crear una nueva macro en el editor de Visual Basic
Haga clic en el botón Macros de la pestaña Desarrollador.
En el cuadro de diálogo Macro que aparece, escriba Hola en Nombre de la macro.
Haga clic en el botón Crear para abrir el editor de Visual Basic con los esquemas de una nueva macro ya escrita.
VBA es un lenguaje de programación completo con el correspondiente entorno de programación. Este artículo examina solo las herramientas que se usan para empezar a usar la programación y excluye la mayoría de las herramientas del editor de Visual Basic. Cierre la ventana Propiedades en el lado izquierdo del editor de Visual Basic e ignore las dos listas desplegables que aparecen arriba del código.
Figura 2. Editor de Visual Basic
El editor de Visual Basic tiene el siguiente código.
Sub Hello()
End Sub
Sub significa Subrutina, que puede definir por ahora como "macro." Si ejecuta la macro Hola, se ejecuta cualquier código que esté entre Sub Hola() y End Sub.
Ahora edite la macro si quiere que se parezca al siguiente código.
Sub Hello()
MsgBox("Hello world")
End Sub
Vuelva a la pestaña Desarrollador en PowerPoint y, a continuación, haga clic en el botón Macros nuevamente. Seleccione la macro Hola de la lista que aparece y, a continuación, haga clic en Ejecutar para mostrar un cuadro de mensaje pequeño que contiene el texto, "Hello world".
¡Acaba de crear e implementar código VBA personalizado en PowerPoint! Haga clic en Aceptar en el cuadro de mensaje para cerrarlo y terminar de ejecutar la macro.
Si no aparece el cuadro de mensaje, compruebe la configuración de seguridad de macros y reinicie PowerPoint.
Hacer que las macros estén más accesibles
También puede ir al cuadro de diálogo Macros desde la pestaña Vista , pero si usa una macro con frecuencia, puede que le resulte más conveniente acceder a ella con un método abreviado de teclado o desde un botón de la Barra de herramientas de acceso rápido.
Para crear un botón para la macro Hola en la Barra de herramientas de acceso rápido, siga estos pasos:
Para crear un botón de macro en la barra de herramientas de acceso rápido
Haga clic en la pestaña Archivo.
Haga clic en Opciones para abrir el cuadro de diálogo Opciones de PowerPoint y haga clic en Barra de herramientas de acceso rápido .
En la lista debajo de Comandos disponibles en:, elija Macros. Busque el texto que se parece a Presentation1!Hello en la lista que aparece y seleccione el texto.
Haga clic en el botón Agregar >> para agregar la macro a la lista en el lado derecho y, a continuación, haga clic en el botón Modificar… para seleccionar una imagen de botón para asociar la macro.
Haga clic en Aceptar. Debe poder ver el nuevo botón en la Barra de herramientas de acceso rápido encima de la pestaña Archivo .
Ahora puede ejecutar la macro en cualquier momento sin usar la pestaña Desarrollador, pruébelo.
Una macro para resolver el desorden
A veces, una presentación en la que trabajó por un tiempo contiene cuadros de texto vacíos que no son necesarios. Por ejemplo, puede que los haya agregado porque pensaba que los iba a usar, pero después no lo hizo. Además, puede haberlos agregado sin querer.
Para quitar los cuadros de texto vacíos, puede eliminarlos manualmente o puede escribir una macro que lo haga por usted. Una macro también puede quitar cuadros de texto ocultos vacíos.
Las siguientes secciones lo guiarán a través del proceso que se puede llevar a cabo para crear e implementar la macro.
Encontrar objetos
El mejor lugar para empezar cuando desea crear una nueva macro de PowerPoint es la Referencia de modelos de objeto de PowerPoint, que forma parte de la referencia del desarrollador de PowerPoint 2007 en Microsoft Developer Network (MSDN). La referencia del modelo de objetos describe los objetos, las propiedades y los métodos que están disponibles y ofrece muchos ejemplos de uso.
Figura 3. Referencia de modelos de objeto de PowerPoint
Estos materiales de referencia se actualizarán para PowerPoint 2010 cuando se haya lanzado, pero la referencia del desarrollador de PowerPoint 2007 es adecuada para la mayoría de los usos de PowerPoint 2010. Tenga en cuenta que existe otro recurso clave: la referencia sobre el lenguaje Visual Basic para Aplicaciones, al que puede tener acceso desde la referencia del desarrollador de PowerPoint 2007.
Para quitar los cuadros de texto vacíos de la presentación, la primera tarea es averiguar si hay un objeto TextBox en el modelo de objetos de PowerPoint. Haga clic en la referencia de modelos de objeto de PowerPoint para ver una larga lista de todos los objetos de PowerPoint.
No hay ningún objeto TextBox, pero hay algo llamado objeto TextFrame. El tema TextFrame indica que el objeto TextFrame "representa el marco de texto de un objeto Shape", quizás el objeto Shape es el punto de partida.
Si se desplaza más abajo en el tema TextFrame, este indica que es posible, "usar la propiedad HasText para determinar si el marco de texto contiene texto", que parece ser algo que puede usar para encontrar los cuadros de texto vacíos para eliminar. Tome note y vea qué más puede averiguar sobre Shapes.
Haga clic en el tema Shape Object, luego en el subtema Shape Object Members. Intente encontrar alguna información de que puede usar una Shape como un cuadro de texto. Los métodos son cosas que una Shape puede hacer, pero usted desea buscar cosas que una Shape pueda ser, por lo tanto, desplácese hacia abajo hasta Properties.
Tenga en cuenta que un objeto Shape tiene una Property denominada Type; haga clic en el vínculo Type para ver una lista de constantes que representan los distintos tipos de Shapes. Entre otras, la lista incluye msoTextBox. (El prefijo mso indica que se trata de tipos de Microsoft Office, disponibles en cualquier aplicación de Office, no solo en PowerPoint).
Desplácese hacia abajo hasta la parte inferior del tema Shape.Type Property para obtener un ejemplo de cómo usar la Property.
For Each sld In ActivePresentation.Slides
For Each sh In sld.Shapes
If sh.Type = msoLinkedOLEObject Then
If sh.OLEFormat.ProgID = "Excel.Sheet" Then
sh.LinkFormat.AutoUpdate = ppUpdateOptionManual
End If
End If
Next
Next
Aprender del ejemplo
El tema Shape.Type indica que "Este ejemplo recorre en forma de bucle todas las formas de todas las diapositivas de la presentación activa y establece que todas las hojas de cálculo de Microsoft Office Excel vinculadas se actualicen manualmente."
Esta sección explica cómo realiza esta tarea el código.
If…Then
Mire más de cerca la siguiente línea de código que usa Type.
If sh.Type = msoLinkedOLEObject Then
Unas líneas hacia abajo, con sangría en el mismo nivel, está el siguiente código.
End If
Este es un ejemplo de una instrucción If…Then, una de las construcciones de programación más importante y, por suerte, una de las más fáciles de comprender. La instrucción If…Then le indica a PowerPoint hacer lo que esté en las líneas entre las líneas If y End If, pero solo si la condición en la línea If es verdadera. En el ejemplo, esta condición es el siguiente código.
sh.Type = msoLinkedOLEObject
Con ese código como guía, entonces, la condición para que la macro elimine los cuadros de texto de la presentación es probablemente algo como lo siguiente.
sh.Type = msoTextBox
Para obtener más información acerca de la instrucción If…Then, consulte la sección de temas conceptuales de Visual Basic de la referencia del lenguaje VBA. (El nombre completo es instrucción If…Then…Else; Else es un componente opcional que no es necesario aquí).
For Each…Next
El código de ejemplo también muestra un modelo común en el lenguaje VBA de PowerPoint, especialmente cuando se trabaja con Shapes. En concreto, "recorre en forma de bucle todas las formas de todas las diapositivas de la presentación activa". Bucle significa repetir una acción y aquí, el tipo concreto de bucle es For Each…Next.
For Each sld In ActivePresentation.Slides
For Each sh In sld.Shapes
Next
Next
El bucle For Each…Next es otra construcción que es importante en programación y fácil de comprender. Ambos bucles en el código comienzan con las palabras "For Each" y terminan con la palabra "Next". Tenga en cuenta que uno de los bucles For Each…Next se encuentra dentro del otro, o anidado , en jerga de programación. En el siguiente código, el bucle exterior examina cada diapositiva de la presentación.
For Each sld In ActivePresentation.Slides
En este caso, sld es una variable ; es decir, un marcador de posición para cualquier diapositiva que el bucle esté examinando. ActivePresentation es un objeto que representa la presentación de PowerPoint activa y Slides es un objeto de colección que aquí representa todas las diapositivas de la presentación activa.
A continuación, el bucle interno examina cada forma de la diapositiva mediante el siguiente código.
For Each sh In sld.Shapes
sh es otra variable, pero su rol es servir como un marcador de posición de la forma que el bucle está examinando. La variable sld es la misma que antes; representa la diapositiva actual, y Shapes es otro objeto de colección que aquí representa todas las Shapes de la diapositiva actual.
No siempre va a encontrar código de ejemplo que haga algo parecido a lo que desea hacer, pero a menudo sucede, y la referencia de modelos de objeto es uno de los mejores lugares para buscar. Como ya se dijo anteriormente, use la referencia de modelo de objetos para averiguar qué cosas se llaman y también cómo se usan. Si desea usar algo (como la propiedad Type) de una manera determinada (por ejemplo, para comprobar el Type de cada Shape en cada Slide), entonces hay buenas probabilidades de que otra persona haya hecho lo mismo y que se haya documentado en la referencia de modelos de objeto.
Crear la macro
Inicie PowerPoint y guarde la nueva presentación como una presentación de PowerPoint habilitada para macros (*.pptm). Cree una nueva macro llamada EliminarDesorden y escriba el código siguiente.
For Each SlideToCheck In ActivePresentation.Slides
For Each ShapeToCheck In SlideToCheck.Shapes
ShapeToCheck.Delete
Next
Next
Tenga en cuenta que cuando se escribe un punto después de ActivePresentation, el editor de Visual Basic muestra una ventana emergente que muestra todas las propiedades y los métodos que están disponibles para el objeto ActivePresentation. Ese es un ejemplo de la tecnología IntelliSense; es decir, el editor de Visual Basic responde a lo que determina que usted está intentando hacer y ofrece una lista de las opciones adecuadas. Puede seleccionar una opción de la lista o continuar escribiendo.
Mire más de cerca el código que acaba de escribir. Configuró los bucles anidados de forma similar a los del ejemplo, pero en lugar de sld y sh, tiene nombres de variables más largos que lo ayudan a recordar qué desea hacer en el código. Algunos programadores prefieren nombres de variables cortos y otros prefieren nombres más largos, más explícitos, que faciliten ver lo que representa la variable. La última opción hace que el código sea más fácil de entender y normalmente es mejor para cuando se está aprendiendo.
Dentro de los bucles, la macro hasta ahora tiene el siguiente código.
ShapeToCheck.Delete
¿Por qué Delete, en lugar de, por ejemplo, .Remove o .GetRidOf?. Porque eliminar un cuadro de texto de un objeto Shape es una acción, busque el objeto Shape en la referencia de modelos de objeto y mire en Métodos. Cut y Delete son las dos posibilidades, y como no necesita poner las Shapes eliminadas en el Portapapeles, Delete es la opción lógica.
No agregue la instrucción If…Then todavía. En primer lugar, compruebe que sabe cómo eliminar formas. En programación, es mejor no intentar hacer muchas cosas al mismo tiempo. Ya tiene que comprobar los bucles anidados For Each; si intenta también hacer funcionar la instrucción If al mismo tiempo, aumenta el riesgo de crear un error al que después no va a poder realizarle un seguimiento. La línea ShapeToCheck.Delete es una forma sencilla de hacer que los bucles hagan algo que usted puede ver y, por lo tanto, probar. Cuando haya comprobado que los bucles funcionan, puede agregar una condición If para que se eliminen únicamente los cuadros de texto vacíos.
Haga clic en el botón Guardar y cierre el editor de Visual Basic. Elimine la diapositiva de título predeterminada de PowerPoint y agregue dos diapositivas en blanco. Coloque cuatro formas en cada diapositiva. (Ya que todavía no va a comprobar el tipo, cualquier forma sirve, íconos gestuales, rayos, lo que desee). Vuelva a ejecutar la macro EliminarDesorden.
Un error
¿Qué pasó? Todavía hay dos formas en cada diapositiva. Vuelva a intentarlo y verá que hay una en cada diapositiva. A continuación, vuelva a repetir la acción para eliminarlas a todas. ¿Qué sucede?
El problema es que la colección reinicia la numeración cada vez que se elimina un elemento. Considere una situación donde recorre en forma de bucle una colección de elementos y elimina el primero de ellos. El bucle comienza en el elemento 1 y lo elimina. Ahora el elemento que originalmente era el elemento 2 es el elemento 1, el elemento que originalmente era 3 es ahora el 2 y así sucesivamente. Cuando el bucle se mueve al nuevo elemento 2, en realidad omitió el elemento original 2.
El ejemplo de código de la referencia de modelos de objeto no tiene este problema porque no elimina los elementos que los bucles examinan. Este problema muestra un punto importante sobre el código de ejemplo: es fácil encontrar código similar a lo que necesita, pero no espere que sea exactamente lo que necesita. Pruebe y esté preparado para realizar cambios que no esperaba.
Corregir un error
Puede impedir que el código omita elementos contando hacia abajo en lugar de hacia arriba. Por ejemplo, supongamos que elimina el elemento 3 de cuatro elementos. Si bien el elemento 4 pasará a ser el 3, está bien porque si el bucle cuenta hacia abajo en lugar de arriba, el bucle avanza hacia el elemento 2 y no al 4.
Para crear un bucle que cuente hacia abajo, necesita una construcción de programación ligeramente distinta, denominada bucle For…Next. Cada miembro de una colección tiene un número, que se denomina índice. Donde el bucle For Each…Next solo examina cada miembro de una colección y le permite a VBA controlar los índices, el bucle For... Next especifica explícitamente los índices. Un mayor control es exactamente lo que necesita para corregir el error.
Abra la macro EliminarDesorden en el editor de Visual Basic y cambie el código como se muestra a continuación.
For Each SlideToCheck In ActivePresentation.Slides
For ShapeIndex = SlideToCheck.Shapes.Count To 1 Step -1
SlideToCheck.Shapes(ShapeIndex).Delete
Next
Next
Tenga en cuenta que la segunda línea ya no tiene el siguiente código For Each.
For Each ShapeToCheck In SlideToCheck.Shapes
En su lugar, usa el siguiente código For...Next.
For ShapeIndex = SlideToCheck.Shapes.Count To 1 Step -1
El nuevo código especifica explícitamente cómo recorrer en forma de bucle los miembros de la colección Shapes. ShapeIndex es una variable que contiene el índice actual; es decir, el número de la Shape que actualmente está examinando el bucle. SlideToCheck.Shapes.Count especifica el número total de miembros que tiene la colección Shapes; el bucle cuenta hacia abajo desde este número al 1. "To 1" le indica a VBA que cuente hacia el primer miembro de la colección y "Step -1" indica que se cuente hacia abajo en lugar de hacia arriba.
La nueva variable ShapeIndex toma el lugar de la anterior variable ShapeToCheck para hacer referencia a las Shapes dentro del bucle. Esto significa que el código siguiente ya no existe.
ShapeToCheck.Delete
Se reemplazó por la tercera línea nueva de código.
SlideToCheck.Shapes(ShapeIndex).Delete
El código usa la variable ShapeIndex para indexar la colección SlideToCheck.Shapes y usa el método Delete como antes.
El código en el bucle For Each externo es el mismo ya que no se elimina ninguna diapositiva. Si necesitara eliminar diapositivas, podría usar un bucle For que contase hacia abajo en el bucle externo también.
Configure la prueba de nuevo y ejecute la nueva versión de la macro. Esta vez la macro debe eliminar todas las Shapes en el primer intento.
Buenas prácticas de programación
Dos cosas que no son estrictamente necesarias en VBA, pero se recomiendan encarecidamente, son los comentarios y las declaraciones de variables.
Cualquier línea de código que comienza con un apóstrofe es un comentario y no afecta lo que hace la macro. Los usos principales de los comentarios son los siguientes:
hacer que el código sea más fácil de entender, no solo para usted, sino para cualquier persona que quizás tenga que modificarlo más adelante.
deshabilitar temporalmente una línea de código (conocido como marcar como comentario).
Aquí está la macro con algunos comentarios agregados.
' Visit each slide
For Each SlideToCheck In ActivePresentation.Slides
' On each slide, count down through the shapes
For ShapeIndex = SlideToCheck.Shapes.Count To 1 Step -1
' Delete all shapes
SlideToCheck.Shapes(ShapeIndex).Delete
Next
Next
También es una buena idea agregar declaraciones de variables al principio de la macro. Una declaración de variable especifica el tipo de entidad que representa la variable. Las declaraciones de variables no son necesarias en VBA, pero usarlas hace mucho más fácil hacer un seguimiento de las variables y realizar un seguimiento de los errores en el código.
Dim SlideToCheck As Slide
Dim ShapeIndex As Integer
Dim es una abreviatura de "Dimensión" y Slide y Integer son los tipos de datos que representan estas variables concretas. Tenga en cuenta que después de escribir As, el editor de Visual Basic muestra una ventana emergente con todos los tipos de datos disponibles. Este es otro ejemplo de la tecnología IntelliSense; es decir, el editor de Visual Basic responde a lo que determina que usted está intentando hacer y ofrece una lista de las opciones adecuadas. Puede elegir una opción de la lista o continuar escribiendo. Además, tenga en cuenta que si declara una variable con un tipo de objeto (como Slide), IntelliSense muestra una lista de propiedades y métodos asociados con el objeto cuando se usa la variable de objeto más adelante en la macro.
Construir la condición If
Para completar la macro EliminarDesorden, la última tarea es averiguar cómo eliminar solo los cuadros de texto vacíos en lugar de eliminar todas las Shapes. Hay dos condiciones que una Shape debe cumplir para ser eliminada: debe ser un cuadro de texto y debe estar vacío.
Como se explicó anteriormente en este artículo, puede usar la propiedad .Type para determinar si una Shape es un cuadro de texto. Esa información proporciona el siguiente código.
SlideToCheck.Shapes(ShapeIndex).Type = msoTextBox
También descubrimos que se puede usar la propiedad .HasText del objeto TextFrame para buscar texto.
SlideToCheck.Shapes(ShapeIndex).TextFrame.HasText
Como desea que la condición If se detenga solo si el marco de texto de la Shapeno contiene texto, agregue la palabra clave Not al código.
Not SlideToCheck.Shapes(ShapeIndex).TextFrame.HasText
Ahora combine las dos condiciones en una sola mediante la palabra clave And. (Para obtener más información acerca de Not, And y otros operadores lógicos, consulte la referencia del lenguaje VBA).
SlideToCheck.Shapes(ShapeIndex).Type = msoTextBox And _
Not SlideToCheck.Shapes(ShapeIndex).TextFrame.HasText
El carácter de subrayado le permite a una línea lógica de código ampliarse a través de más de una línea física en el editor de Visual Basic.
Por último, agregue un If al principio de la línea lógica, un Then al final y un comentario para explicar el código.
' If the shape IS a text box and DOES NOT have text
If SlideToCheck.Shapes(ShapeIndex).Type = msoTextBox And _
Not SlideToCheck.Shapes(ShapeIndex).TextFrame.HasText Then
Todo en conjunto
La macro terminada debe parecerse el código siguiente.
Dim SlideToCheck As Slide
Dim ShapeIndex As Integer
' Visit each slide
For Each SlideToCheck In ActivePresentation.Slides
' On each slide, count down through the shapes
For ShapeIndex = SlideToCheck.Shapes.Count To 1 Step -1
' If the shape IS a text box and DOES NOT have text
If SlideToCheck.Shapes(ShapeIndex).Type = msoTextBox And _
Not SlideToCheck.Shapes(ShapeIndex).TextFrame.HasText Then
' Delete the shape
SlideToCheck.Shapes(ShapeIndex).Delete
End If
Next
Next
Elimine todas las diapositivas de la presentación y, a continuación, inserte una diapositiva de título y dos diapositivas en blanco. Inserte cuatro cuadros de texto en cada una de las dos diapositivas en blanco; aplíquele a los cuadros de texto un relleno o contorno visible. A continuación, escriba en algunos, pero no todos, cuadros de texto. Ejecute la macro. Deberían desaparecer los cuadros de texto vacíos, pero deben quedar los que no están vacíos, junto con los cuadros de marcador de posición vacíos de la diapositiva de título.
La macro lleva a cabo su tarea con cualquier número de cuadros de texto en cualquier número de diapositivas.
¿Qué hacer a continuación?
Es posible que le parezca que el material que ofrece este artículo, acompañado de un poco de experimentación y tiempo de calidad de estudio de la referencia de modelos de objeto y la referencia del lenguaje VBA, proporciona suficiente información para realizar cualquier tarea que lo haya motivado a aprender VBA. Si es así, ¡excelente! Si no lo es, el siguiente paso es ampliar el alcance hacia una comprensión más general de VBA.
Una forma de aprender más sobre VBA es estudiar el código de trabajo. Además de los ejemplos de la referencia de modelos de objetos y la referencia del lenguaje VBA, hay una gran cantidad de código VBA de PowerPoint en varias fuentes en línea, incluidos artículos de MSDN, sitios web que mantienen los profesionales más valiosos de Microsoft (MVP) especializados en PowerPoint y otros que pueden encontrarse con una búsqueda rápida en la Web.
El código de esos recursos puede ayudarlo a solucionar problemas de codificación inmediatos y obtener ideas para proyectos en los que aún no había pensado.
Si prefiere realizar un estudio más sistemático de VBA, hay varios libros buenos sobre VBA y varias revisiones buenas de cada uno de los libros en la Web que pueden ayudarlo a decidir cuáles son los mejores para su estilo de aprendizaje.