Controles ActiveX en Excel

Los controles ActiveX son un tipo de controles que nos permiten agregar funcionalidad de formularios a nuestros libros de Excel. Existe otro tipo de controles que es conocido como Controles de formulario y que tienen una funcionalidad similar, sin embargo existen algunas diferencias entre ambos tipos.

Controles ActiveX y controles de formulario

Los controles de formulario fueron introducidos desde la versión 4 de Excel y por lo tanto han estado presentes en la aplicación por más tiempo que los controles ActiveX los cuales comenzaron a ser utilizados a partir de Excel 97. Ya que los controles ActiveX fueron introducidos posteriormente ofrecen más posibilidades de configuración y formato que los controles de formulario.  Ambos tipos de controles se encuentran en la ficha Programador.

Controles ActiveX en Excel 2010

La diferencia más significativa entre ambos es la manera en como podemos obtener información de los controles al momento de interactuar con el usuario. Los controles de formulario solamente responderán después de que el usuario ha interactuado con ellos, como después de haber pulsado el botón. Por el contrario, los controles ActiveX responden de manera continua a las acciones del usuario lo cual nos permite realizar acciones como cambiar el tipo de puntero del mouse que se muestra al colocar el puntero del ratón sobre el botón.

Propiedades de los controles ActiveX

A diferencia de los controles de formulario, los controles ActiveX tienen una serie de propiedades que podemos configurar pulsando el botón Propiedades que se encuentra dentro del grupo Controles de la ficha Programador.

Propiedades de un control ActiveX en Excel

Antes de poder ver las propiedades de un control ActiveX debemos pulsar el botón Modo Diseño el cual nos permitirá seleccionar el control y posteriormente ver sus propiedades. Cada tipo de control ActiveX mostrará una ventana de Propiedades con sus propias características. A continuación un ejemplo de la ventana Propiedades para un botón de comando ActiveX:

Propiedades de un botón ActiveX en Excel

Controles ActiveX con subrutinas VBA

Otra diferencia entre los controles de formulario y los controles ActiveX es que los primeros pueden tener asignada una macro y al hacer clic sobre el control de formulario se iniciará la ejecución de dicha macro.

Los controles ActiveX no tienen asignada una macro explícitamente sino que podemos asignar código VBA para cada evento del control. Un evento de un control ActiveX puede ser el evento de hacer clic sobre el control, el evento de hacer doble clic, el evento de obtener el foco sobre el control ActiveX, entre otros eventos más. Para asignar código a uno de los eventos de un control ActiveX solamente debemos hacer clic derecho sobre él y seleccionar la opción Ver código.

Ver código de un control ActiveX en Excel

Esto mostrará el Editor de Visual Basic con una subrutina para el evento Click() donde podremos escribir nuestro código.

Subrutina VBA para el evento Click de un control ActiveX

En la lista desplegable de la derecha podemos observar la lista de eventos disponibles para nuestro control ActiveX y para los cuales podemos escribir código VBA. Al seleccionar cualquiera de dichos eventos se insertará una nueva subrutina que podremos utilizar. Son precisamente la gran cantidad de eventos disponibles para los controles ActiveX lo que los hace controles muy poderosos que podemos utilizar en nuestros formularios.

Otra ventaja de los controles ActiveX en Excel

En la versión de Excel 2010 algunos controles de formulario han dejado de ser soportados y no podemos utilizarlos más en nuestras hojas. Ese es el caso del control de formulario conocido como campo de texto. Sin embargo, dentro de la lista de controles ActiveX seguimos teniendo disponible el control llamado Cuadro de texto lo cual puede hacer atractiva la opción de utilizar controles ActiveX en Excel en lugar de controles de formulario.

Artículos relacionados
Controles de formulario en Excel
Formularios en Excel

21 comentarios en “Controles ActiveX en Excel

  1. Maximiliano

    Buenas antes que nada….

    Mi problema, hice un Excel con un botón al final de la planilla que imprime la planilla y algunos datos que están ocultos. Lo que me pasa es que por mas que bloquee la hoja y el libro pueden acceder a editar el botón donde hay información dentro del mismo (macro) que no me gustaría que vea el usuario final.

    Hay forma de bloquear un botón de control?

    Saludos…

    Maximiliano

  2. Moises

    Buen día, antes que nada una felicitación por tu página, en verdad nos hace la vida más sencilla a muchos de nosotros.
    Tengo una duda, cuando yo creo mi formulario en VBA, aplico todos los comando a todos los botones, a los cuadros de texto y le doy las ordenes para que hagan lo que les indico. ¿Cuál es el código o los pasos que tengo que seguir para que mi formulario se muestre en mi hoja de excel mediante un botón?
    Gracias

    1. Moisés Ortíz Autor

      Hola Moises! Si el formulario se llama UserForm1, entonces dentro del botón (ActiveX) debes colocar la instrucción UserForm1.Show y eso mostrará el formulario.

  3. alberto

    Muy buenas

    Tengo una pequeña duda, quiero bloquear un cuadro de texto. Como lo hago exactamente? Tengo bloqueada la hoja entera incluso permitido el acceso en algunas celdas que quiero que se pueda escribir sobre ellas. Pero en cuanto al cuadro de texto nada no hay manera se puede modificar y desplazar por completo incluso suprimierlo un saludo y muchas gracias

    1. Moisés Ortíz Autor

      Hola Alberto, los cuadros de texto solo se pueden desplazar o suprimir cuando estás en el Modo Diseño así que no me queda muy clara esa parte de la pregunta. ¿Quieres impedir que alguien tenga acceso al Modo Diseño?
      Por otro lado, si quieres bloquear el contenido de un TextBox (ActiveX) puedes utilizar la siguiente instrucción VBA:
      TextBox1.Enabled = False

  4. CarlosR2

    Baje unas Macros de la Web, pero al ejecutarlas en mi PC se sale un mensaje diciendome que debo adecuarlas para poder correr en version 64 bits, como hago para solucionar este impase.

    Muchas gracias por la respuesta

    1. Moisés Ortíz Autor

      Hola CarlosR2, es necesario utilizar la constante de compilación Win64 para permitir que la macro sea ejecutada en ambas versiones. No tengo material al respecto pero si haces una búsqueda en google sobre “vba Win64″ encontrarás artículos al respecto.

  5. McHigorre

    Buenas estimado Moisés estaba viendo tu pagina interesantes consejos, la verdad soy una persona que esta incursionando en esto de la programación, te agradecería si tuvieras algún pequeño manual por el cual empezar a entender el manejo de esta herramienta, en Excel.

  6. Thelma

    Hola, de antemano gracias son muy útiles tus consejos. Tengo un problema con botones ActiveX en una hoja de excel puse botones que haceb distintas tareas, estaban funcionando normal en la fase de pruebas, pero ahora que el usuario final los maneja (él no tiene menú de programador habilitado) les ha pasado esto: solos cambian su tamaño haciendo click crecen (ya lo corregí cambiando el tamaño usando- modo de diseño -) y también se modificó el tamaño de la fuente del Caption de los botones, la fuente es tan pequeña que no se puede leer a simple vista, los tengo en modo que no se puedan mover ni cambiar tamaño, pero no se a que se debe este comportamiento. Muchas gracias.

    1. Moisés Ortíz Autor

      Hola Thelma, ¿Existe alguna diferencia entre la versión de Excel que utilizas para crear los controles ActiveX y la versión del usuario final?

  7. Evert

    Buenas noches al crear los comandbutton y agregarles sub rutinas luego se bloquea y no me permite borrarlos ni modificar sus propiedades… como puedo hacer para borrarlo?

    1. Moisés Ortíz Autor

      Hola Evert, para poder eliminar un control debes asegurarte de pulsar el botón “Modo diseño” que se encuentra dentro de la ficha Programador. Eso te permitirá seleccionar el botón y eliminarlo.

  8. hilda

    Hola Moisés, fíjate que hice un formato con controles activex y utilize cuadro de texto, pero al escribir no me deja dar enter y me escribe de corrido….. como le hago?????

    gracias

    1. Moisés Ortíz Autor

      Hola Hila, dentro de las propiedades del TextBox modifica la el valor para EnterKeyBehavior el cual generalmente está en False pero si lo colocas en True podrás ingresar saltos de línea.

  9. Marco Bautista

    Felicidades al creador de está página, la verdad es que es de gran utilidad.
    Soy nuevo en esto, pero le he buscado y me las he ingeniado para hallarle.
    Tengo el siguiente problema:
    Al ejecutar un botón de comando, me abre un formulario, y hasta ahí todo esta bien. Lo que necesito es que con el mismo botón de comando pueda ejecutar una macro antes de que me abra el formulario.
    La macro crea una carpeta, y el formulario es para guardar el archivo en esa carpeta.
    Espero me puedan ayudar.

    1. Moisés Ortíz Autor

      Hola Marco, lo único que debes haces es llamar la función justo antes del comando Form.Show

  10. Sonia

    Hola Moisés, tengo el mismo problema que comenta Thelma más arriba, tengo unos botones de selección (activeX) que a veces, no siempre cambian de tamaño cuando se selección, lo pude arreglar ajustando el tamaño a través de código de VBA, pero de todas maneras a veces cambian de tamaño, y lo mismo me está pasando ahora con los botones. Lo que sí he notado es que cuando conecto a mi portátil (de 13”) una pantalla más grande el error deja de ocurrir, se te ocurre qué me puede estar pasando? ya lo he probado todo. muchas gracias por tu ayuda!!

    1. Moisés Ortíz Autor

      Hola Sonia, no mencionas la versión de Excel que tienes, pero me parece que este problema se presenta generalmente con las versiones 2003 y 2007. Las posibles soluciones que he visto son las siguientes:
      1) Cerrar Excel y eliminar el archivo Excel11 (o Excel12) que se encuentra en C:\Usuarios\[Usuario]\AppData\Roaming\Microsoft\Excel\.
      2) Modificar la propiedad Placement de los controles ActiveX para igualarla a 3.
      3) Controlar el tamaño de cada controlo por código VBA. Me parece que esta es la solución que has implementado.
      4) Aplicar cambios al registro de Windows que solucionan el problema en Excel 2003 de acuerdo al siguiente artículo publicado por Microsoft:
      http://support.microsoft.com/kb/976467

  11. Lorhy

    ESTAN GENIALES TUS EXPLICACIONES !!!! GRACIAS