Introducción a VBA en OfficeGetting started with VBA in Office

¿Tiene que realizar una limpieza repetitiva de 50 tablas en Word?Are you facing a repetitive clean up of fifty tables in Word? ¿Quiere que, al abrir un documento específico, se le pida información al usuario?Do you want a particular document to prompt the user for input when it opens? ¿Tiene dificultades para determinar cómo transferir sus contactos de Microsoft Outlook a una hoja de cálculo de Microsoft Excel de manera eficiente?Are you having difficulty figuring out how to get your contacts from Microsoft Outlook into a Microsoft Excel spreadsheet efficiently?

Puede realizar estas tareas y lograr mucho más con Visual Basic para Aplicaciones (VBA) para Office: un lenguaje de programación simple, pero efectivo, que le permite ampliar aplicaciones de Office.You can perform these tasks and accomplish a great deal more by using Visual Basic for Applications (VBA) for Office—a simple, but powerful programming language that you can use to extend Office applications.

Este artículo está destinado a usuarios experimentados de Office que desean obtener información sobre VBA y que quieren saber cómo les puede ayudar la programación a personalizar Office.This article is for experienced Office users who want to learn about VBA and who want some insight into how programming can help them to customize Office.

El conjunto de aplicaciones de Office tiene un conjunto muy completo de características.The Office suite of applications has a rich set of features. Hay muchas formas diferentes de crear, manipular y dar formato a documentos, correos electrónicos, bases de datos, formularios, hojas de cálculo y presentaciones.There are many different ways to author, format, and manipulate documents, email, databases, forms, spreadsheets, and presentations. La mayor potencia de la programación de VBA de Office es que casi todas las operaciones que puede realizar con un ratón, teclado o cuadro de diálogo también pueden hacerse mediante VBA.The great power of VBA programming in Office is that nearly every operation that you can perform with a mouse, keyboard, or a dialog box can also be done by using VBA. Además, si se puede realizar una vez con VBA, puede hacerse cien veces con la misma facilidad.Further, if it can be done once with VBA, it can be done just as easily a hundred times. (De hecho, la automatización de tareas repetitivas es uno de los usos más comunes de VBA de Office).(In fact, the automation of repetitive tasks is one of the most common uses of VBA in Office.)

Más allá de la potencia de scripting de VBA para acelerar las tareas de cada día, puede usar VBA para agregar nuevas funciones a las aplicaciones de Office o contactar e interactuar con el usuario de sus documentos de forma acorde a las necesidades de su empresa.Beyond the power of scripting VBA to accelerate every-day tasks, you can use VBA to add new functionality to Office applications or to prompt and interact with the user of your documents in ways that are specific to your business needs. Por ejemplo, podría escribir un código VBA que muestre un mensaje que recuerde a los usuarios guardar un documento en una unidad de la red en concreto la primera vez que intenten guardarlo.For example, you could write some VBA code that displays a pop up message that reminds users to save a document to a particular network drive the first time they try to save it.

Este artículo explora algunas de las razones principales para aprovechar las ventajas de la programación de VBA.This article explores some of the primary reasons to leverage the power of VBA programming. Explora el idioma VBA y las herramientas de fábrica que puede usar para trabajar con las soluciones.It explores the VBA language and the out-of-the-box tools that you can use to work with your solutions. Por último, incluye algunas sugerencias y formas para evitar algunos problemas o fallos comunes de programación.Finally, it includes some tips and ways to avoid some common programming frustrations and missteps.

Nota

¿Le interesa el desarrollo de soluciones que amplían la experiencia de Office en varias plataformas?Interested in developing solutions that extend the Office experience across multiple platforms? Vea el nuevo modelo de complementos de Office.Check out the new Office Add-ins model. Los complementos de Office tienen una huella pequeña en comparación con los complementos y soluciones de VSTO, y se pueden construir utilizando casi cualquier tecnología de programación web, como HTML5, JavaScript, CSS3 y XML.Office Add-ins have a small footprint compared to VSTO Add-ins and solutions, and you can build them by using almost any web programming technology, such as HTML5, JavaScript, CSS3, and XML.

Cuándo y por qué usar VBAWhen to use VBA and why

Existen varias razones principales para usar la programación de VBA en Office.There are several principal reasons to consider VBA programming in Office.

Automatización y repeticiónAutomation and repetition

VBA es eficaz cuando se trata de soluciones repetitivas para problemas de formato y corrección.VBA is effective and efficient when it comes to repetitive solutions to formatting or correction problems. Por ejemplo, ¿alguna vez ha cambiado el estilo del párrafo en la parte superior de cada página en Word?For example, have you ever changed the style of the paragraph at the top of each page in Word? ¿Alguna vez ha tenido que dar formato a varias tablas pegadas de Excel en un documento de Word o un correo electrónico de Outlook?Have you ever had to reformat multiple tables that were pasted from Excel into a Word document or an Outlook email? ¿Alguna vez ha tenido que realizar el mismo cambio en varios contactos de Outlook?Have you ever had to make the same change in multiple Outlook contacts?

Si tiene que realizar un cambio y repetirlo más de diez o veinte veces, sería conveniente automatizarlo con VBA.If you have a change that you have to make more than ten or twenty times, it may be worth automating it with VBA. Si es un cambio que debe realizar cientos de veces, desde luego es algo a tener en cuenta.If it is a change that you have to do hundreds of times, it certainly is worth considering. Casi cualquier cambio de formato o edición que pueda realizar a mano, puede hacerse en VBA.Almost any formatting or editing change that you can do by hand, can be done in VBA.

Mayor interacción con el usuarioExtensions to user interaction

Hay ocasiones en las que desea animar o incitar a los usuarios a interactuar con el documento o la aplicación de Office de una forma determinada que no forma parte de la aplicación estándar.There are times when you want to encourage or compel users to interact with the Office application or document in a particular way that is not part of the standard application. Por ejemplo, puede que quiera solicitar a los usuarios que realicen alguna acción particular al abrir, guardar o imprimir un documento.For example, you might want to prompt users to take some particular action when they open, save, or print a document.

Interacción entre las aplicaciones de OfficeInteraction between Office applications

¿Necesita copiar todos los contactos de Outlook en Word y después aplicar el formato de alguna manera específica?Do you need to copy all of your contacts from Outlook to Word and then format them in some particular way? O bien, ¿necesita mover datos de Excel a un conjunto de diapositivas de PowerPoint?Or, do you need to move data from Excel to a set of PowerPoint slides? A veces, la opción de copiar y pegar no vale para lo que quiere hacer o simplemente es demasiado lenta.Sometimes simple copy and paste does not do what you want it to do, or it is too slow. Puede usar la programación de VBA para interactuar con los detalles de dos o más aplicaciones de Office al mismo tiempo y después modificar el contenido de una aplicación en función del contenido de otra.You can use VBA programming to interact with the details of two or more Office applications at the same time and then modify the content in one application based on the content in another.

Otra forma de hacer las cosasDoing things another way

La programación de VBA es una solución eficaz, pero no siempre es el método óptimo.VBA programming is a powerful solution, but it is not always the optimal approach. A veces tiene sentido usar otras formas para alcanzar sus objetivos.Sometimes it makes sense to use other ways to achieve your aims.

La pregunta fundamental es si existe un método más sencillo.The critical question to ask is whether there is an easier way. Antes de empezar un proyecto de VBA, considere las funcionalidades estándares y de las herramientas integradas.Before you begin a VBA project, consider the built-in tools and standard functionalities. Por ejemplo, si tiene una tarea de edición o diseño que lleve mucho tiempo, considere la posibilidad de usar teclas de aceleración o estilos para resolver el problema.For example, if you have a time-consuming editing or layout task, consider using styles or accelerator keys to solve the problem. ¿Puede realizar la tarea una vez y, después, usar CTRL+Y (rehacer) para repetirla?Can you perform the task once and then use CTRL+Y (Redo) to repeat it? ¿Puede crear un nuevo documento con el formato o la plantilla correctos y después copiar el contenido en ese documento nuevo?Can you create a new document with the correct format or template, and then copy the content into that new document?

Las aplicaciones de Office son eficaces; puede que la solución que necesita ya esté allí.Office applications are powerful; the solution that you need may already be there. Tómese un tiempo para aprender más sobre Office antes de empezar con la programación.Take some time to learn more about Office before you jump into programming.

Antes de empezar un proyecto de VBA, asegúrese de que tiene el tiempo para trabajar con VBA.Before you begin a VBA project, ensure that you have the time to work with VBA. La programación requiere concentración y puede ser impredecible.Programming requires focus and can be unpredictable. Especialmente como principiante, nunca pase a la programación a menos que tenga el tiempo para trabajar en ello cuidadosamente.Especially as a beginner, never turn to programming unless you have time to work carefully. Intentar escribir un script con rapidez para resolver un problema cuando una fecha límite se acerca puede generar una situación verdaderamente estresante.Trying to write a "quick script" to solve a problem when a deadline looms can result in a very stressful situation. Si tiene prisa, es conveniente usar métodos convencionales, aunque sean monótonos y repetitivos.If you are in a rush, you might want to use conventional methods, even if they are monotonous and repetitive.

Iniciación a la programación de VBAVBA Programming 101

Usar código para que las aplicaciones realicen accionesUsing code to make applications do things

Puede que piense que escribir código es algo misterioso o difícil, pero los principios básicos usan razonamientos cotidianos y son bastante accesibles.You might think that writing code is mysterious or difficult, but the basic principles use every-day reasoning and are quite accessible. Las aplicaciones de Microsoft Office se crean de forma que exponen elementos, denominados objetos, que pueden recibir instrucciones, de forma muy similar a los botones de un teléfono, que sirven para interactuar con el teléfono.Microsoft Office applications are created in such a way that they expose things called objects that can receive instructions, in much the same way that a phone is designed with buttons that you use to interact with the phone. Al presionar un botón, el teléfono reconoce la instrucción e incluye el número correspondiente en la secuencia que marque.When you press a button, the phone recognizes the instruction and includes the corresponding number in the sequence that you are dialing. En programación, se interactúa con la aplicación al enviar instrucciones a diferentes objetos de la aplicación.In programming, you interact with the application by sending instructions to various objects in the application. Estos objetos se pueden expandir, pero tienen sus límites.These objects are expansive, but they have their limits. Solo pueden realizar las acciones para las que se diseñaron y solo realizarán las acciones para las que reciban instrucciones.They can only do what they are designed to do, and they will only do what you instruct them to do.

Por ejemplo, piense en el usuario que abre un documento en Word, realiza algunos cambios, guarda el documento y, a continuación, lo cierra.For example, consider the user who opens a document in Word, makes a few changes, saves the document, and then closes it. En el mundo de la programación VBA, Word expone un objeto Document.In the world of VBA programming, Word exposes a Document object. Al usar el código VBA, puede ordenar al objeto Document que realice acciones como Abrir, Guardar o Cerrar.By using VBA code, you can instruct the Document object to do things such as Open, Save, or Close.

En la siguiente sección se explica cómo se organizan y describen los objetos.The following section discusses how objects are organized and described.

El modelo de objetosThe Object Model

Los desarrolladores organizan los objetos de programación en una jerarquía, denominada el modelo de objetos de la aplicación.Developers organize programming objects in a hierarchy, and that hierarchy is called the object model of the application. Word, por ejemplo, tiene un objeto Application de nivel superior que contiene un objeto Document.Word, for example, has a top-level Application object that contains a Document object. El objeto Document contiene objetos de párrafo, etc.The Document object contains Paragraph objects and so on. Los modelos de objetos reflejan más o menos lo que se ve en la interfaz de usuario.Object models roughly mirror what you see in the user interface. Son un mapa conceptual de la aplicación y sus funciones.They are a conceptual map of the application and its capabilities.

La definición de un objeto se denomina clase y es posible que vea estos dos términos usados de forma intercambiable.The definition of an object is called a class, so you might see these two terms used interchangeably. Técnicamente, una clase es la descripción o plantilla que se usa para crear (o generar una instancia) de un objeto.Technically, a class is the description or template that is used to create, or instantiate, an object.

Cuando un objeto existe, puede manipularlo al configurar sus propiedades y realizar llamadas a sus métodos.Once an object exists, you can manipulate it by setting its properties and calling its methods. Si piensa en un objeto como un nombre, las propiedades son los adjetivos que describen el nombre, mientras que los métodos son los verbos que animan al nombre.If you think of the object as a noun, the properties are the adjectives that describe the noun and the methods are the verbs that animate the noun. Al cambiar una propiedad, se cambia parte de la calidad de la apariencia o el comportamiento del objeto.Changing a property changes some quality of appearance or behavior of the object. A realizar una llamada a uno de los métodos de objeto, el objeto realiza alguna acción.Calling one of the object methods causes the object to perform some action.

El código VBA de este artículo se ejecuta en una aplicación de Office abierta donde muchos de los objetos que manipula el código están ya en funcionamiento. Por ejemplo, la propia aplicación, la hoja de cálculo de Excel, el documento de Word, la presentación en PowerPoint, los objetos Explorador y Carpeta en Outlook.The VBA code in this article runs against an open Office application where many of the objects that the code manipulates are already up and running; for example, the Application itself, the Worksheet in Excel, the Document in Word, the Presentation in PowerPoint, the Explorer and Folder objects in Outlook. Una vez que conoce el diseño básico del modelo de objetos y algunas propiedades clave de la aplicación que proporciona acceso a su estado actual, puede empezar a ampliar y manipular esa aplicación de Office con VBA en Office.Once you know the basic layout of the object model and some key properties of the Application that give access to its current state, you can start to extend and manipulate that Office application with VBA in Office.

MétodosMethods

En Word, por ejemplo, puede cambiar las propiedades e invocar los métodos del documento de Word actual si usa la propiedad ActiveDocument del objeto Application.In Word, for example, you can change the properties and invoke the methods of the current Word document by using the ActiveDocument property of the Application object. La propiedad ActiveDocument devuelve una referencia al objeto Document que esté activo actualmente en la aplicación de Word.This ActiveDocument property returns a reference to the Document object that is currently active in the Word application. “Devuelve una referencia” quiere decir “le da acceso a”."Returns a reference to" means "gives you access to."

El código siguiente hace exactamente lo que dice (es decir, guarda el documento activo en la aplicación).The following code does exactly what it says; that is, it saves the active document in the application.

Application.ActiveDocument.Save

Lea el código de izquierda a derecha, “En esta aplicación, con el documento al que ActiveDocument hace referencia, se invoca el método Save”.Read the code from left to right, "In this Application, with the Document referenced by ActiveDocument, invoke the Save method." Tenga en cuenta que Save (guardar) es la forma más sencilla de un método (no necesita recibir instrucciones detalladas).Be aware that Save is the simplest form of method; it does not require any detailed instructions from you. Se instruye a un objeto Document que use Save para guardar los cambios y no necesita recibir información.You instruct a Document object to Save and it does not require any more input from you.

Si un método necesita más información, los detalles se denominan parámetros.If a method requires more information, those details are called parameters. El código siguiente ejecuta el método SaveAs, que necesita un nombre nuevo para el archivo.The following code runs the SaveAs method, which requires a new name for the file.

Application.ActiveDocument.SaveAs ("New Document Name.docx")

Los valores que aparecen entre paréntesis después del nombre de un método son los parámetros.Values listed in parentheses after a method name are the parameters. Aquí, el nuevo nombre del archivo es un parámetro para el método SaveAs.Here, the new name for the file is a parameter for the SaveAs method.

PropiedadesProperties

Utilice la misma sintaxis para definir una propiedad que la que utiliza para leer una propiedad.You use the same syntax to set a property that you use to read a property. El siguiente código ejecuta un método para seleccionar la celda A1 en Excel y, a continuación, definir una propiedad para colocar contenido en esa celda.The following code executes a method to select cell A1 in Excel and then to set a property to put something in that cell.

    Application.ActiveSheet.Range("A1").Select
    Application.Selection.Value = "Hello World"

El primer reto en la programación VBA es familiarizarse con el modelo de objetos de cada aplicación de Office y leer el objeto, método y sintaxis de propiedad.The first challenge in VBA programming is to get a feeling for the object model of each Office application and to read the object, method, and property syntax. Los modelos de objetos son similares en todas las aplicaciones de Office, pero cada uno es específico para el tipo de documentos y objetos que manipula.The object models are similar in all Office applications, but each is specific to the kind of documents and objects that it manipulates.

En la primera línea del fragmento de código, verá el objeto Application (esta vez, Excel) y, después, verá ActiveSheet, que proporciona acceso a la hoja de cálculo activa.In the first line of the code snippet, there is the Application object, Excel this time, and then the ActiveSheet, which provides access to the active worksheet. Después, verá un término no tan conocido (Range), que significa “definir un rango de celdas de esta forma”.After that is a term not as familiar, Range, which means "define a range of cells in this way." El código instruye a Range para que cree un rango solo con A1 como su conjunto definido de celdas.The code instructs Range to create itself with just A1 as its defined set of cells. Es decir, la primera línea de código define un objeto (Range) y ejecuta un método en el rango definido para seleccionarlo.In other words, the first line of code defines an object, the Range, and runs a method against it to select it. El resultado se almacena automáticamente en otra propiedad de Application denominada Selection.The result is automatically stored in another property of the Application called Selection.

La segunda línea de código establece la propiedad Value de Selection en el texto “Hola a todos” y ese valor aparece en la celda A1.The second line of code sets the Value property of Selection to the text "Hello World", and that value appears in cell A1.

El código VBA más sencillo que escribe podría obtener acceso simplemente a objetos en la aplicación de Office con la que está trabajando y definir propiedades.The simplest VBA code that you write might simply gain access to objects in the Office application that you are working with and set properties. Por ejemplo, podría obtener acceso a las filas de una tabla en Word y cambiar su formato en el script VBA.For example, you could get access to the rows in a table in Word and change their formatting in your VBA script.

Parece simple, pero puede ser increíblemente útil; una vez que pueda escribir el código, podrá emplear todo el potencial de programación para realizar los mismos cambios en varias tablas o documentos, o realizarlos atendiendo a alguna lógica o condición.That sounds simple, but it can be incredibly useful; once you can write that code, you can harness all of the power of programming to make those same changes in several tables or documents, or make them according to some logic or condition. Para un equipo, no existe diferencia alguna entre hacer 1000 cambios o hacer 10, así que se economiza con problemas y documentos más grandes, y es aquí donde puede destacar VBA realmente y ahorrar tiempo.For a computer, making 1000 changes is no different from making 10, so there is an economy of scale here with larger documents and problems, and that is where VBA can really shine and save you time.

Macros y el Editor de Visual BasicMacros and the Visual Basic Editor

Ahora que tiene información sobre cómo las aplicaciones de Office exponen sus modelos de objetos, probablemente estará deseando intentar invocar métodos de objetos, establecer propiedades de objetos y responder a eventos de objetos.Now that you know something about how Office applications expose their object models, you are probably eager to try calling object methods, setting object properties, and responding to object events. Para ello, debe escribir su código en un lugar y en una forma que Office pueda entender, normalmente, con el Editor de Visual Basic.To do so, you must write your code in a place and in a way that Office can understand; typically, by using the Visual Basic Editor. Aunque está instalado de forma predeterminada, muchos usuarios no saben que está disponible hasta que se habilita en la barra de herramientas.Although it is installed by default, many users do not know that it is even available until it is enabled on the ribbon.

Todas las aplicaciones de Office usan la cinta de opciones.All Office applications use the ribbon. Una de las pestañas de la cinta de opciones es la pestaña Desarrollador, donde puede obtener acceso al Editor de Visual Basic y otras herramientas de desarrollo.One tab on the ribbon is the Developer tab, where you access the Visual Basic Editor and other developer tools. Como en Office no se muestra la pestaña Desarrollador de forma predeterminada, tiene que seguir este procedimiento para habilitarla:Because Office does not display the Developer tab by default, you must enable it by using the following procedure:

Para habilitar la pestaña DesarrolladorTo enable the Developer tab

  1. En la pestaña Archivo, seleccione Opciones para abrir el cuadro de diálogo Opciones.On the File tab, choose Options to open the Options dialog box.

  2. Elija Personalizar cinta de opciones en la parte izquierda del cuadro de diálogo.Choose Customize Ribbon on the left side of the dialog box.

  3. En Comandos disponibles en:, en el lado izquierdo del cuadro de diálogo, seleccione Comandos más utilizados.Under Choose commands from on the left side of the dialog box, select Popular Commands.

  4. En Personalizar cinta de opciones en el lado derecho del cuadro de diálogo, seleccione Fichas principales en el cuadro de lista desplegable y, a continuación, active la casilla Programador.Under Customize the Ribbon on the right side of the dialog box, select Main Tabs in the drop down list box, and then select the Developer checkbox.

  5. Elija Aceptar.Choose OK.

Nota

En Office 2007, para que se muestre la ficha Programador haga clic en el botón de Office, en Opciones y, a continuación, active la casilla Mostrar ficha Programador en la Cinta en la categoría Más frecuentes del cuadro de diálogo Opciones.In Office 2007, you displayed the Developer tab by choosing the Office button, choosing Options, and then selecting the Show Developer tab in Ribbon check box in the Popular category of the Options dialog box.

Después de habilitar la ficha Programador, es fácil encontrar los botones de Visual Basic y Macros.After you enable the Developer tab, it is easy to find the Visual Basic and Macros buttons.

Ilustración 1: Botones de la pestaña DesarrolladorFigure 1. Buttons on the Developer tab

Botones de la pestaña Desarrollador

Problemas de seguridadSecurity issues

Para proteger a los usuarios de Office contra virus y código de macros peligrosas, no puede guardar el código de macro en un documento de Office estándar que utiliza una extensión de archivo estándar.To protect Office users against viruses and dangerous macro code, you cannot save macro code in a standard Office document that uses a standard file extension. En su lugar, debe guardar el código en un archivo con una extensión especial.Instead, you must save the code in a file with a special extension. Por ejemplo, no se pueden guardar las macros en un documento estándar de Word con la extensión .docx; en su lugar, debe utilizar un documento habilitado para macros de Word especial con una extensión .docm.For example you cannot save macros in a standard Word document with a .docx extension; instead, you must use a special Word Macro-Enabled Document with a .docm extension.

Cuando abre un archivo .docm, la seguridad de Office todavía podría impedir que se ejecuten las macros en el documento, con o sin aviso previo.When you open a .docm file, Office security might still prevent the macros in the document from running, with or without telling you. Examine la configuración y las opciones del Centro de confianza en todas las aplicaciones de Office.Examine the settings and options in the Trust Center on all Office applications. La configuración predeterminada deshabilita la ejecución de macros, pero le advierte de que se han deshabilitado las macros y le permite volver a activarlas para ese documento.The default setting disables macro from running, but warns you that macros have been disabled and gives you the option to turn them back on for that document.

Puede designar carpetas específicas, donde las macros se pueden ejecutar al crear Ubicaciones de confianza, Documentos confiables o Editores de confianza.You can designate specific folders where macros can run by creating Trusted Locations, Trusted Documents, or Trusted Publishers. La opción más portátil es Editores de confianza, que funciona con los documentos firmados digitalmente que distribuya.The most portable option is to use Trusted Publishers, which works with digitally signed documents that you distribute. Para obtener más información sobre la configuración de seguridad de una aplicación de Office específica, abra el cuadro de diálogo Opciones, haga clic en Centro de confianza y, después, seleccione Configuración del Centro de confianza.For more information about the security settings in a particular Office application, open the Options dialog box, choose Trust Center, and then choose Trust Center Settings.

Nota

Algunas aplicaciones de Office, como Outlook, guardan las macros de forma predeterminada en una plantilla maestra en el equipo local.Some Office applications, like Outlook, save macros by default in a master template on your local computer. Aunque esa estrategia reduce los problemas de seguridad locales en su propio equipo al ejecutar sus propias macros, necesitará una estrategia de implementación si quiere distribuir la macro.Although that strategy reduces the local security issues on your own computer when you run your own macros, it requires a deployment strategy if you want to distribute your macro.

Grabar una macroRecording a macro

Al hacer clic en el botón Macro de la pestaña Desarrollador, se abrirá el cuadro de diálogo Macros, que le proporciona acceso a macros o subrutinas de VBA disponibles de un documento o aplicación específicos.When you choose the Macro button on the Developer tab, it opens the Macros dialog box, which gives you access to VBA subroutines or macros that you can access from a particular document or application. El botón Visual Basic abre el Editor de Visual Basic, donde puede crear y editar código VBA.The Visual Basic button opens the Visual Basic Editor, where you create and edit VBA code.

Otro botón de la pestaña Desarrollador de Word y Excel es el botón Grabar macro, que genera automáticamente código VBA que puede reproducir las acciones que realice en la aplicación.Another button on the Developer tab in Word and Excel is the Record Macro button, which automatically generates VBA code that can reproduce the actions that you perform in the application. Grabar macro es una herramienta realmente útil que puede usar para obtener más información sobre VBA.Record Macro is a terrific tool that you can use to learn more about VBA. Si lee el código generado, podrá comprender en profundidad VBA y proporcionar un puente estable entre sus conocimientos de Office como usuario y sus conocimientos como programador.Reading the generated code can give you insight into VBA and provide a stable bridge between your knowledge of Office as a user and your knowledge as a programmer. La única advertencia es que el código generado puede resultar confuso, ya que el editor de macros tiene que realizar algunos supuestos en relación con sus intenciones, y esos supuestos no son necesariamente precisos.The only caveat is that the generated code can be confusing because the Macro editor must make some assumptions about your intentions, and those assumptions are not necessarily accurate.

Para grabar una macroTo record a macro

  1. Abra un nuevo libro en Excel y haga clic en la pestaña Desarrollador de la cinta de opciones.Open Excel to a new Workbook and choose the Developer tab in the ribbon. Haga clic en Grabar macro y acepte todas las opciones de configuración predeterminadas del cuadro de diálogo Grabar macro, incluyendo Macro1, el nombre de la macro y Este libro como la ubicación.Choose Record Macro and accept all of the default settings in the Record Macro dialog box, including Macro1 as the name of the macro and This Workbook as the location.

  2. Haga clic en Aceptar para empezar a grabar la macro.Choose OK to begin recording the macro. Como verá, el texto del botón cambiará a Detener grabación.Note how the button text changes to Stop Recording. Haga clic en ese botón en cuanto complete las acciones que quiera grabar.Choose that button the instant you complete the actions that you want to record.

  3. Haga clic en la celda B1 y escriba la primera cadena clásica del programador: Hola a todos.Choose cell B1 and type the programmer's classic first string: Hello World. Deje de escribir y observe el botón Detener grabación; como puede ver, está atenuado, ya que Excel está esperando a que termine de escribir el valor en la celda.Stop typing and look at the Stop Recording button; it is grayed out because Excel is waiting for you to finish typing the value in the cell.

  4. Haga clic en la celda B2 para completar la acción en la celda B1 y, después, haga clic en Detener grabación.Choose cell B2 to complete the action in cell B1, and then choose Stop Recording.

  5. Haga clic en Macros, en la pestaña Desarrollador, seleccione Macro1 si no está seleccionada y, después, haga clic en Editar para ver el código de Macro1 en el Editor de Visual Basic.Choose Macros on the Developer tab, select Macro1 if it is not selected, and then choose Edit to view the code from Macro1 in the Visual Basic Editor.

Ilustración 2: Código de macro en el Editor de Visual BasicFigure 2. Macro code in Visual Basic Editor

Código de macro en el Editor de Visual Basic

Analizar el códigoLooking at the code

La macro que creó debe tener una apariencia similar a la del siguiente código.The macro that you created should look similar to the following code.

Sub Macro1()
'
' Macro1 Macro
'
'
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Hello World"
    Range("B2").Select
End Sub

Observe las similitudes con respecto al fragmento de código anterior que seleccionó texto en la celda A1, así como las diferencias.Be aware of the similarities to the earlier code snippet that selected text in cell A1, and the differences. En este código, se selecciona la celda B1 y, a continuación, la cadena "Hello World" se aplica a la celda que se ha activado.In this code, cell B1 is selected, and then the string "Hello World" is applied to the cell that has been made active. Las comillas que delimitan el texto especifican un valor de cadena en oposición a un valor numérico.The quotes around the text specify a string value as opposed to a numeric value.

¿Recuerda cuando hizo clic en la celda B2 para volver a mostrar el botón Detener grabación?Remember how you chose cell B2 to display the Stop Recording button again? Esa acción también se muestra como una línea de código.That action shows up as a line of code as well. La grabadora de macros registra todas las pulsaciones de tecla.The macro recorder records every keystroke.

Las líneas de código que empiezan con un apóstrofe y que el Editor muestra en verde son comentarios que explican el código o que recuerdan los programadores el propósito del código.The lines of code that start with an apostrophe and colored green by the editor are comments that explain the code or remind you and other programmers the purpose of the code. VBA omite toda línea, o parte de una línea, que empieza con una comilla simple.VBA ignores any line, or portion of a line, that begins with a single quote. Escribir comentarios de forma clara y apropiada en el código es importante; sin embargo, esta discusión no pertenece al ámbito de este artículo.Writing clear and appropriate comments in your code is an important topic, but that discussion is out of the scope of this article. Las referencias subsiguientes a este código no incluyen esas cuatro líneas de comentario.Subsequent references to this code in the article do not include those four comment lines.

Cuando la grabadora de macros genera el código, usa un algoritmo complejo para determinar los métodos y las propiedades que tenía intención de usar.When the macro recorder generates the code, it uses a complex algorithm to determine the methods and the properties that you intended. Si no reconoce una propiedad específica, hay disponibles varios recursos que le pueden servir de ayuda.If you do not recognize a given property, there are many resources available to help you. Por ejemplo, en la macro que grabó, la grabadora de macros generó código que se refiere a la propiedad FormulaR1C1.For example, in the macro that you recorded, the macro recorder generated code that refers to the FormulaR1C1 property. ¿No está seguro de lo que eso significa?Not sure what that means?

Nota

Tenga en cuenta que el objeto Application está implícito en todas las macros de VBA.Be aware that Application object is implied in all VBA macros. El código que grabó funciona con Application.The code that you recorded works with Application. al principio de cada línea.at the beginning of each line.

Usar la ayuda para desarrolladoresUsing Developer Help

Seleccione FormulaR1C1 en la macro grabada y presione F1.Select FormulaR1C1 in the recorded macro and press F1. El sistema de ayuda ejecuta una búsqueda rápida, determina que los temas adecuados están en la sección Desarrollador de Excel de la Ayuda de Excel y muestra una lista de la propiedad FormulaR1C1.The Help system runs a quick search, determines that the appropriate subjects are in the Excel Developer section of the Excel Help, and lists the FormulaR1C1 property. Puede hacer clic en el vínculo para obtener más información sobre la propiedad; pero, antes de hacerlo, tenga en cuenta el vínculo Referencia del modelo de objetos de Excel próximo a la parte inferior de la ventana.You can choose the link to read more about the property, but before you do, be aware of the Excel Object Model Reference link near the bottom of the window. Haga clic en el vínculo para ver una lista larga de objetos que Excel usa en su modelo de objetos para describir las hojas de cálculo y sus componentes.Choose the link to view a long list of objects that Excel uses in its object model to describe the Worksheets and their components.

Haga clic en cualquiera de esos objetos para ver las propiedades y métodos válidos para ese objeto específico, además de referencias cruzadas a diferentes opciones relacionadas.Choose any one of those to see the properties and methods that apply to that particular object, along with cross references to different related options. En muchas de las entradas de la ayuda también se incluyen ejemplos de código breves que le pueden resultar útiles.Many Help entries also have brief code examples that can help you. Por ejemplo, puede seguir los vínculos del objeto Borders para ver cómo establecer un borde en VBA.For example, you can follow the links in the Borders object to see how to set a border in VBA.

Worksheets(1).Range("A1").Borders.LineStyle = xlDouble

Edición del códigoEditing the code

El código de bordes tiene una apariencia distinta del de la macro grabada.The Borders code looks different from the recorded macro. Lo que puede resultar confuso con un modelo de objetos es que hay más de una manera de dirigirse a un objeto dado, a la celda A1 en este ejemplo.One thing that can be confusing with an object model is that there is more than one way to address any given object, cell A1 in this example.

A veces la mejor manera de aprender programación es hacer pequeños cambios en algún código activo y ver qué resultado se obtiene.Sometimes the best way to learn programming is to make minor changes to some working code and see what happens as a result. Inténtelo ahora.Try it now. Abra Macro1 en el Editor de Visual Basic y modifique el código como se indica a continuación.Open Macro1 in the Visual Basic Editor and change the code to the following.

Sub Macro1()
    Worksheets(1).Range("A1").Value = "Wow!"
    Worksheets(1).Range("A1").Borders.LineStyle = xlDouble
End Sub

Sugerencia

Use Copiar y pegar todas las veces que sea posible cuando trabaje con código para evitar errores de escritura. Use Copy and Paste as much as possible when working with code to avoid typing errors.

No es necesario que guarde el código para probarlo; por lo tanto, para volver al documento de Excel, haga clic en Macros en la pestaña Desarrollador, seleccione Macro1 y, después, haga clic en Ejecutar.You do not need to save the code to try it out, so return to the Excel document, choose Macros on the Developer tab, choose Macro1, and then choose Run. La celda A1 contiene ahora el texto Wow!Cell A1 now contains the text Wow! y tiene un borde de línea doble a su alrededor.and has a double-line border around it.

Ilustración 3: Resultados de la primera macroFigure 3. Results of your first macro

Resultados de la primera macro

Grabó una macro, leyó la documentación del modelo de objetos y creó una programación simple para que un programa de VBA realice una tarea específica.You just combined macro recording, reading the object model documentation, and simple programming to make a VBA program that does something. ¡Enhorabuena!Congratulations!

¿No funciona?Did not work? Siga leyendo para obtener sugerencias de depuración en VBA.Read on for debugging suggestions in VBA.

Consejos y sugerencias de programaciónProgramming tips and tricks

Empezar con ejemplosStart with examples

La comunidad de VBA es muy amplia; una búsqueda en la Web casi siempre arroja como resultado un ejemplo de código de VBA que ejecuta una tarea similar a la que usted desea realizar.The VBA community is very large; a search on the Web can almost always yield an example of VBA code that does something similar to what you want to do. Si no puede encontrar un buen ejemplo, intente dividir la tarea en pequeñas unidades y realice una búsqueda de cada una de ellas, o bien intente pensar en un problema más común pero similar.If you cannot find a good example, try to break the task down into smaller units and search on each of those, or try to think of a more common, but similar problem. Comenzar con un ejemplo puede ahorrarle horas de tiempo.Starting with an example can save you hours of time.

Esto no quiere decir que haya código gratuito y bien elaborado esperándole en la Web.That does not mean that free and well-thought-out code is on the Web waiting for you to come along. De hecho, es posible que encuentre partes de código con errores.In fact, some of the code that you find might have bugs or mistakes. La idea es que los ejemplos que encuentre en línea o en la documentación de VBA sirvan como introducción. The idea is that the examples you find online or in VBA documentation give you a head start. Recuerde que aprender programación requiere tiempo y análisis.Remember that learning programming requires time and thought. Antes de verse apurado para usar otra solución para resolver un problema, pregúntese si VBA es la elección más adecuada para ese problema.Before you get in a big rush to use another solution to solve your problem, ask yourself whether VBA is the right choice for this problem.

Simplificar un problemaMake a simpler problem

La programación puede volverse compleja muy pronto.Programming can get complex quickly. Es esencial, especialmente para un principiante, dividir el problema en unidades lógicas tan pequeñas como sea posible y, a continuación, escribir y probar cada parte por separado.It is critical, especially as a beginner, that you break the problem down to the smallest possible logical units, then write and test each piece in isolation. Si está trabajando con un código muy extenso que le genera confusión, deténgase y deje de lado el problema.If you have too much code in front of you and you get confused or muddled, stop and set the problem aside. Cuando vuelva al problema, copie una pequeña parte del problema en un nuevo módulo, resuelva esa parte, active el código y pruébelo para ver si funciona.When you come back to the problem, copy out a small piece of the problem into a new module, solve that piece, get the code working, and test it to ensure that it works. Después, continúe con la siguiente parte.Then move on to the next part.

Errores y depuraciónBugs and debugging

Hay dos tipos de errores principales en la programación: errores de sintaxis, que no cumplen las reglas gramaticales del lenguaje de programación, y errores en tiempo de ejecución, que parecen ser sintácticamente correctos pero impiden efectuar la operación cuando VBA intenta ejecutar el código.There are two main types of programming errors: syntax errors, which violate the grammatical rules of the programming language, and run-time errors, which look syntactically correct, but fail when VBA attempts to execute the code.

Aunque pueda ser frustrante corregirlos, los errores de sintaxis son fáciles de detectar; el Editor de Visual Basic emite un aviso sonoro y un destello cuando se comete un error de este tipo al escribir el código.Although they can be frustrating to fix, syntax errors are easy to catch; the Visual Basic Editor beeps and flashes at you if you type a syntax error in your code.

Por ejemplo, es necesario delimitar con comillas dobles los valores de cadena en VBA.For example, string values must be surrounded by double quotes in VBA. Para conocer lo que ocurre al usar comillas simples en su lugar, vuelva al Editor de Visual Basic y reemplace la cadena "Wow!"To find out what happens when you use single quotes instead, return to the Visual Basic Editor and replace the "Wow!" del ejemplo de código por 'Wow!'string in the code example with 'Wow!' (es decir, la palabra Wow entre comillas simples).(that is, the word Wow enclosed in single quotes). Si hace clic en la línea siguiente, en el Editor de Visual Basic se mostrará un mensaje.If you choose the next line, the Visual Basic Editor reacts. El error “Error de compilación: se esperaba una expresión” no es muy útil, pero la línea que genera el error se volverá de color rojo para indicarle que tiene un error de sintaxis en esa línea y que, como resultado, el programa no se ejecutará.The error "Compile error: Expected: expression" is not that helpful, but the line that generates the error turns red to tell you that you have a syntax error in that line and as a result, this program will not run.

Haga clic en Aceptar y vuelva a cambiar el texto por "Wow!".Choose OK and change the text back to"Wow!".

Los errores en tiempo de ejecución son más difíciles de detectar porque la sintaxis de programación parece ser correcta, pero el código produce un error cuando VBA intenta ejecutarlo.Runtime errors are harder to catch because the programming syntax looks correct, but the code fails when VBA tries to execute it.

Por ejemplo, abra el Editor de Visual Basic y cambie el nombre de propiedad Value por ValueX en la Macro, introduciendo deliberadamente un error en tiempo de ejecución ya que el objeto Range no tiene una propiedad denominada ValueX.For example, open the Visual Basic Editor and change the Value property name to ValueX in your Macro, deliberately introducing a runtime error since the Range object does not have a property called ValueX. Vuelva al documento de Excel, abra el cuadro de diálogo Macros y vuelva a ejecutar Macro1.Go back to the Excel document, open the Macros dialog box and run Macro1 again. Verá un cuadro de mensaje de Visual Basic donde se explica el error en tiempo de ejecución con el texto “El objeto no admite esta propiedad del método”.You should see a Visual Basic message box that explains the run-time error with the text, "Object doesn't support this property of method." Aunque el texto se entiende fácilmente, haga clic en Depurar para obtener más información.Although that text is clear, choose Debug to find out more.

Cuando vuelve al Editor de Visual Basic, este se encuentra en un modo de depuración especial que usa el color amarillo para resaltar la línea de código incorrecta. When you return to the Visual Basic Editor, it is in a special debug mode that uses a yellow highlight to show you the line of code that failed. Como se esperaba, la línea que incluye la propiedad ValueX es la que está resaltada.As expected, the line that includes the ValueX property is highlighted.

Se pueden realizar cambios en el código VBA mientras se está ejecutando. Por lo tanto, vuelva a cambiar ValueX por Value y haga clic en el pequeño botón de reproducción verde que verá debajo del menú Depurar.You can make changes to VBA code that is running, so change ValueX back to Value and choose the little green play button underneath the Debug menu. El programa se volverá a ejecutar con normalidad.The program should run normally again.

Le recomendamos que obtenga información sobre cómo usar el depurador de una forma más específica para crear programas más complejos y largos.It is a good idea to learn how to use the debugger more deliberately for longer, more complex programs. Como mínimo, obtenga información sobre cómo establecer puntos de interrupción para detener la ejecución en un punto donde quiera analizar el código, como agregar relojes para ver los valores de diferentes variables y propiedades a medida que se ejecute el código, y cómo pasar por el código línea a línea.At a minimum, learn a how to set break-points to stop execution at a point where you want to take a look at the code, how to add watches to see the values of different variables and properties as the code runs, and how to step through the code line by line. Todas estas opciones están disponibles en el menú Depurar, y los usuarios avanzados del depurador suelen memorizar los métodos abreviados de teclado correspondientes.These options are all available in the Debug menu and serious debugger users typically memorize the accompanying keyboard shortcuts.

Uso correcto de los materiales de referenciaUsing reference materials well

Para abrir la Referencia para desarrolladores integrada en la Ayuda de Office, haga clic en el signo de interrogación de la cinta de opciones para abrir la referencia de la Ayuda desde cualquier aplicación de Office, o bien presione la tecla F1.To open the Developer Reference that is built into Office Help, open the Help reference from any Office application by choosing the question mark in the ribbon or by pressing F1. Después, a la derecha del botón Buscar, haga clic en la flecha desplegable para filtrar el contenido.Then, to the right of the Search button, choose the dropdown arrow to filter the contents. Haga clic en Referencia para desarrolladores.Choose Developer Reference. Si no ve la tabla de contenido en el panel izquierdo, haga clic en el pequeño icono del libro para abrirla y, después, expanda la referencia del modelo de objetos desde allí.If you do not see the table of contents in the left panel, choose the little book icon to open it, and then expand the Object Model Reference from there.

Ilustración 5: El filtrado que se realice en la Ayuda para desarrolladores se aplica a todas las aplicaciones de OfficeFigure 5. Filtering on developer Help applies to all Office applications

El filtrado que se realice en la Ayuda para desarrolladores se aplica a todas las aplicaciones de Office.

El tiempo dedicado a explorar la Referencia de modelos de objetos vale la pena.Time spent browsing the Object Model reference pays off. Después de conocer los principios básicos de la sintaxis VBA y de los modelos de objetos para la aplicación de Office con la que se está trabajando, avanzará de las conjeturas a la programación metódica.After you understand the basics of VBA syntax and the object model for the Office application that you are working with, you advance from guesswork to methodical programming.

Por supuesto, el Centro para desarrolladores de Microsoft Office es un portal excelente donde encontrará artículos, sugerencias e información de la comunidad.Of course the Microsoft Office Developer Center is an excellent portal for articles, tips, and community information.

Búsqueda de foros y gruposSearching forums and groups

Todos los programadores a veces se bloquean, incluso después de leer todos los artículos de referencia que pudieron encontrar y perder el sueño por pensar en distintas formas de resolver un problema.All programmers get stuck sometimes, even after reading every reference article they can find and losing sleep at night thinking about different ways to solve a problem. Afortunadamente, Internet ha fomentado una comunidad de programadores que se ayudan entre sí para resolver problemas de programación.Fortunately, the Internet has fostered a community of developers who help each other solve programming problems.

Toda búsqueda en la Web de "foro de desarrolladores de office" muestra varios grupos de discusión.Any search on the Web for "office developer forum" reveals several discussion groups. Puede buscar "desarrollo de office" o la descripción de un problema para encontrar foros, entradas de blog o artículos.You can search on "office development" or a description of your problem to discover forums, blog posts, and articles as well.

Si ya ha hecho todo lo posible para resolver un problema, no tenga miedo de exponer su consulta en un foro de programadores.If you have done everything that you can to solve a problem, do not be afraid to post your question to a developers forum. En estos foros son bienvenidos los mensajes de nuevos programadores y muchos de los programadores expertos se complacen en ayudar.These forums welcome posts from newer programmers and many of the experienced developers are glad to help.

A continuación, se explican algunas cuestiones de protocolo que se deben tener en cuenta a la hora de exponer una consulta en un foro de programadores:The following are a few points of etiquette to follow when you post to a developer forum:

  • Antes de publicar una consulta, busque en el sitio las preguntas más frecuentes o las pautas que los miembros desean que se cumplan.Before you post, look on the site for an FAQ or for guidelines that members want you to follow. Asegúrese de exponer contenido de forma coherente con esas pautas y en la sección correcta del foro.Ensure that you post content that is consistent with those guidelines and in the correct section of the forum.

  • Incluya un ejemplo de código claro y completo, y considere la posibilidad de editar su código de modo que sea más claro para otras personas cuando es parte de una sección más extensa del código.Include a clear and complete code sample, and consider editing your code to clarify it for others if it is part of a longer section of code.

  • Describa el problema de forma clara y concisa, y resuma cada uno de los pasos que llevó a cabo para resolverlo.Describe your problem clearly and concisely, and summarize any steps that you have taken to solve the problem. Dedique el tiempo necesario para escribir la pregunta de la mejor manera posible, especialmente si se siente inquieto o tiene prisa.Take the time to write your post as well as you can, especially if you are flustered or in a hurry. Presente la situación de modo que tenga sentido para los lectores la primera vez que leen la exposición del problema.Present the situation in a way that will make sense to readers the first time that they read the problem statement.

  • Sea amable y exprese su agradecimiento.Be polite and express your appreciation.

Acciones avanzadas de programaciónGoing further with programming

Aunque este artículo es breve y solo se explican brevemente los conceptos básicos de VBA y programación, esperamos que sea lo suficientemente útil a modo de introducción.Although this article is short and only scratches the surface of VBA and programming, it is hopefully enough to get you started.

En esta sección se explican brevemente algunos otros temas clave.This section briefly discusses a few more key topics.

VariablesVariables

En los ejemplos simples presentados en este artículo, ha manipulado objetos ya creados por la aplicación.In the simple examples in this article you manipulated objects that the application had already created. Es posible que desee crear sus propios objetos para almacenar valores o referencias a otros objetos para su uso temporal en la aplicación.You might want to create your own objects to store values or references to other objects for temporary use in your application. Estos se denominan variables.These are called variables.

Para usar una variable en VBA, tiene que indicar a VBA el tipo de objeto que representa la variable con la instrucción Dim.To use a variable in VBA, must tell VBA which type of object the variable represents by using the Dim statement. Después, configure su valor y úselo para establecer otras variables o propiedades.You then set its value and use it to set other variables or properties.

    Dim MyStringVariable As String
    MyStringVariable = "Wow!"
    Worksheets(1).Range("A1").Value = MyStringVariable

Bucles y bifurcacionesBranching and looping

Los programas simples de este artículo ejecutan una línea cada vez, empezando por arriba.The simple programs in this article execute one line at a time, from the top down. La verdadera eficacia de la programación radica en las opciones que ofrece para determinar qué líneas del código se deben ejecutar, de acuerdo con la condición o las condiciones que se especifiquen.The real power in programming comes from the options that you have to determine which lines of code to execute, based on one or more conditions that you specify. Es posible ampliar esas capacidades aún más al repetir una operación varias veces.You can extend those capabilities even further when you can repeat an operation many times. Por ejemplo, el siguiente código amplía Macro1. For example, the following code extends Macro1.

Sub Macro1()
    If Worksheets(1).Range("A1").Value = "Yes!" Then
        Dim i As Integer
        For i = 2 To 10
            Worksheets(1).Range("A" & i).Value = "OK! " & i
        Next i
    Else
        MsgBox "Put Yes! in cell A1"
    End If
End Sub

Escriba o pegue el código en el Editor de Visual Basic y, después, ejecútelo.Type or paste the code into the Visual Basic Editor and then run it. Siga las indicaciones del cuadro de mensaje que se muestre y cambie el texto de la celda A1 de Wow!Follow the directions in the message box that appears and change the text in cell A1 from Wow! a “Sí”to Yes! y vuelva a ejecutarlo para ver la utilidad de los bucles.and run it again to see the power of looping. En este fragmento de código se demuestra el uso de variables, bifurcaciones y bucles.This code snippet demonstrates variables, branching and looping. Léalo detenidamente después de verlo en acción e intente determinar lo que ocurre a medida que se ejecute cada línea.Read it carefully after you see it in action and try to determine what happens as each line executes.

Todas las aplicaciones de Mi Office: el código de ejemploAll of my Office applications: example code

Aquí encontrará algunos scripts que puede probar; cada una resuelve un problema real de Office.Here are a few scripts to try; each solves a real-world Office problem.

Crear un correo electrónico en OutlookCreate an email in Outlook

Sub MakeMessage()
    Dim OutlookMessage As Outlook.MailItem
    Set OutlookMessage = Application.CreateItem(olMailItem)
    OutlookMessage.Subject = "Hello World!"
    OutlookMessage.Display
    Set OutlookMessage = Nothing
End Sub

Tenga en cuenta que hay situaciones en las que puede desear automatizar el correo electrónico en Outlook; también puede utilizar plantillas.Be aware that there are situations in which you might want to automate email in Outlook; you can use templates as well.

Eliminar filas vacías de una hoja de cálculo de ExcelDelete empty rows in an Excel worksheet

Sub DeleteEmptyRows()
    SelectedRange = Selection.Rows.Count
    ActiveCell.Offset(0, 0).Select
    For i = 1 To SelectedRange
        If ActiveCell.Value = "" Then
            Selection.EntireRow.Delete
        Else
            ActiveCell.Offset(1, 0).Select
        End If
    Next i
End Sub

Tenga en cuenta que puede seleccionar una columna de celdas y ejecutar esta macro para eliminar todas las filas de la columna seleccionada que tienen celdas en blanco.Be aware that you can select a column of cells and run this macro to delete all rows in the selected column that have a blank cell.

Eliminar cuadros de texto vacíos en PowerPointDelete empty text boxes in PowerPoint

Sub RemoveEmptyTextBoxes()
    Dim SlideObj As Slide
    Dim ShapeObj As Shape
    Dim ShapeIndex As Integer
    For Each SlideObj In ActivePresentation.Slides
        For ShapeIndex = SlideObj.Shapes.Count To 1 Step -1
            Set ShapeObj = SlideObj.Shapes(ShapeIndex)
            If ShapeObj.Type = msoTextBox Then
                If Trim(ShapeObj.TextFrame.TextRange.Text) = "" Then
                    ShapeObj.Delete
                End If
            End If
        Next ShapeIndex
    Next SlideObj
End Sub

Tenga en cuenta que este código recorre en bucle todas las diapositivas y elimina todos los cuadros de texto que no tienen texto.Be aware that this code loops through all of the slides and deletes all text boxes that do not have any text. La variable de recuento disminuye en vez de aumentar porque cada vez que el código elimina un objeto, quita ese objeto de la colección, por lo tanto, el recuento disminuye.The count variable decrements instead of increments because each time the code deletes an object, it removes that object from the collection, which reduces the count.

Copiar un contacto de Outlook en WordCopy a contact from Outlook to Word

Sub CopyCurrentContact()
   Dim OutlookObj As Object
   Dim InspectorObj As Object
   Dim ItemObj As Object
   Set OutlookObj = CreateObject("Outlook.Application")
   Set InspectorObj = OutlookObj.ActiveInspector
   Set ItemObj = InspectorObj.CurrentItem
   Application.ActiveDocument.Range.InsertAfter (ItemObj.FullName & " from " & ItemObj.CompanyName)
End Sub

Tenga en cuenta que este código copia el contacto abierto actualmente en Outlook en el documento de Word abierto.Be aware that this code copies the currently open contact in Outlook into the open Word document. Este código solamente funciona si hay un contacto abierto actualmente para inspeccionar en Outlook.This code only works if there is a contact currently open for inspection in Outlook.

Soporte técnico y comentariosSupport and feedback

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación?Have questions or feedback about Office VBA or this documentation? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.