Macro con menú desplegable

Estuve leyendo algunas de tus respuestas a casos que te plantearon y aprendí bastante con ellas.
Leyéndolas pude hacer una macro que se activa automáticamente al seleccionar una hoja determinada de un archivo. La macro dispara un InputBox donde se solicita elegir alguno de los códigos que se enumeran en el mismo. Luego del titulo coloqué los 5 códigos posibles con su descripción usando & Chr(13) para que cada código se numerara en un renglón individual.
Hasta ahí todo bien, pero mis consultas son:
1) Si quisiera editar las características del cuadro del InputBox (es decir Tamaño, color, longitud del campo donde el usuario llena el dato requerido, etc) ¿Cómo puedo hacerlo?
2) Estuve buscando en tus respuestas una clave para hacer que esta macro automática dispare un cuadro como el InputBox, pero con un menú desplegable que el usuario pudiera seleccionar, en lugar de tener que tipear uno de los códigos que yo le numero, pero no conseguí hacerlo. Por ello te pedí un manual. Pero viendo la rapidez de tu respuesta te hago la consulta directamente, aunque siga interiorizándome en el tema.

1 Respuesta

Respuesta
1
Tus dos preguntas tienen una respuesta común:
Para hacer lo que pretendes en ambos casos, las funcionalidades de un InputBox son escasas.
Esta herramienta sólo pretende dar una boca de ingresos de datos rápida y de programación simple. De allí que no sea posible personalizarlo.
Desde luego, MS Excel cuenta con otros medios de mayor sofisticación para que puedas incluirle, por ejemplo un menú desplegable (ComboBox) y moldearlo en cuanto a sus características.
Este objeto se llama Formulario de Usuario o "UserForm".
Su ámbito de creación es el Editor de Visual Basic.
La primera etapa es la de diseño. Inserta un nuevo Userform dentro del Editor de VBA. Clickea en la opción "Insertar" del Menú principal y luego "Userform". Una área de diseño y una barra de la herramienta se desplegarán y allí, podrás seleccionar botones, el cajas de texto, casillas de selección, Botones de comando, etc.
Esto es simplemente una "máscara" de entrada, o sea que tendrás que programar las acciones para cada elemento, es decir: qué deberá hacer cuando se activó cada uno de ellos.
Obviamente, esto dependerá de tu tarea específica.
Diseñado el formulario, ajustadas las propiedades de cada elemento en él y escrito el código fuente, la línea siguiente -en otro macro- activará el formulario para la carga de datos:
UserForm1.Show
Pero supongo que tendrás un largo y pesado camino antes de que necesites escribir esta línea.
Insisto, no es una tarea menor. De hecho, yo mismo no tengo armada ninguna rutina de este tipo.
Un alternativa de menor nivel, que no demanda programación, es insertar la lista desplegable en la misma hoja.
Para esto necesitarás insertar en la hoja el combobox que se genera a partir de la barra de herramientas de Cuadro de Controles (no confundir con la de Formularios que también tiene un Combobox pero funciona distinto).
Selecciona el control "Cuadro Combinado" y dibújalo sobre la hoja donde deseas hacer la selección.
Notarás que la barra de herramienta que habilitaste (Cuadro de controles) tiene un primer ícono que representa un lápiz, una escuadra y una regla, mientras esté presionado estarás en modo de diseño y podrás configurar tu nuevo control.
Con botón derecho sobre él elige la opción "Propiedades". Busca aquella que dice: LinkedCell e ingresa en esa casilla la celda que recibirá la selección que hiciste. También coloca en el elemento ListFillRange el nombre del rango donde está la lista (ListVal, en nuestro ejemplo).
Puedes configurar otras propiedades aquí. Una vez que lo hayas hecho, presiona el ícono de Diseño para que el control empiece a funcionar. Puedes cerrar la barra de herramientas que usaste para insertar este control.
Pues bien, este cuadro combinado te permite también dejar una selección de la lista en una celda, con la ventaja de que puedes tipear los primeros caracteres y te mostrará los elementos que coincidan con tu entrada.
Puedes usar este código asociado al control en la hoja:
Private Sub ComboBox1_Change()
ActiveCell.Value = ComboBox1.Value
ActiveCell.Select
End Sub
Esto dejará tu selección en la celda que estuviera activa cuando hagas click en la lista del ComboBox.
Un abrazo!
Fernando
Pd: Disculpa la demora en responder pero he tenido un par de semanas de excesivo trabajo. Espero poder liberarme un poco en los próximos días. Mientras tanto, voy contestando las preguntas según hayan entrado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas