
Pregunté esto en StackOverflow y me redirigieron aquí. Disculpas por la redundancia.
Tengo una hoja de cálculo de Excel con un cuadro combinado en la Hoja1 que se completa a través de su propiedad Rango de entrada desde un Rango dinámico con nombre en la Hoja2. Funciona bien y no se requiere VBA.
Mis datos en la Hoja2 están en realidad en una tabla de Excel (todos los datos están en el archivo XLS, no hay fuentes de datos externas). Para mayor claridad, quería usar una referencia de tabla estructurada para el rango de entrada del cuadro combinado, pero parece que no puedo encontrar una sintaxis que funcione, por ejemplo, myTable[[#Data],[myColumn3]]
No puedo encontrar ninguna indicación de que el cuadro combinado ACEPTE referencias de tablas estructuradas, aunque no veo por qué no lo haría.
Entonces, pregunta de dos partes: 1. ¿Es posible usar una referencia de columna de tabla en la propiedad de rango de entrada del cuadro combinado (sin usar VBA) y 2. ¿CÓMO?
Respuesta1
Me doy cuenta de que esta es una pregunta bastante antigua, pero en caso de que alguien se tope con ella como lo hice yo tratando de resolver la misma pregunta... Al igual que ScottieB, yo tampoco pude hacer que la respuesta de Dav funcionara para mí. Así es como lo resolví en Excel 2013.
Cree su lista vertical de opciones para su cuadro combinado. No en una tabla (todavía) ni con un encabezado (todavía, pero deje espacio para uno), solo una columna de lo que necesite para su menú desplegable.
Cree/defina un nombre para su lista usando la notación Hoja1 normal!$A$1:$A$2.
Inserte su control de formulario Combo Box usando el nombre que acaba de crear para su Rango de entrada.
Hasta ahora, todo bien. El cuadro combinado funcionará, pero las nuevas opciones agregadas al final de la lista vertical (incluso inmediatamente debajo del rango nombrado) no se agregarán a la lista desplegable; el rango con nombre, en el que se basa el menú desplegable, no se expande dinámicamente.
Ahora lo bueno.
- Vuelva a su lista vertical (asegúrese de borrar todo lo que agregó alrededor del rango nombrado para que quede tal como lo dejó en el paso 2) y agregue un encabezado encima. Cualquier texto servirá, es sólo una etiqueta para identificar su lista de opciones.
(¡O no lo hagas! Excel agregará uno por ti en el siguiente paso de todos modos, si lo permites).
- Con el título seleccionado, use Ctrl+T o Insertar | Mesa. Acepte el rango que encuentra Excel y asegúrese de marcar la casilla "Mis tablas tienen encabezados" y luego haga clic en Aceptar. Puedes cambiar el nombre de la tabla si quieres: no importa.
(Nota: si no agregó un encabezado, no marque la casilla "Mi tabla tiene encabezados" para que Excel cree uno por usted).
Ahora, aparentemente porque el rango con nombre original ahora es parte de una definición de tabla, agregar una nueva fila al final de su lista vertical no solo expande la definición de la tabla automáticamente, sino también la del rango con nombre original. Por lo tanto, aparecerá la nueva opción. en la lista de opciones del cuadro combinado. ¡Magia!
Respuesta2
La respuesta de Nick con respecto a XL 2013 está bien si aún no ha creado la tabla.
Sin embargo, es más simple que eso. Usted define un nombre que apunta a la columna de la tabla. Luego cree otro nombre que apunte al nombre. Puede usar el segundo nombre en el rango de entrada y funciona bien.
Respuesta3
En Excel 2010 puedes hacer esto, pero es un proceso de dos pasos.
- Cree un rango con nombre utilizando la referencia estructurada de la tabla (por ejemplo, myrange=mytable[myColumn3].
- Utilice el rango nombrado como rango de entrada del control.
Y, como era de esperar, el campo de control se actualiza con los cambios en la lista. No estoy seguro de por qué no se puede utilizar la referencia directamente en el control, pero todavía hay muchas cosas sobre Excel que no entiendo.
EDITAR: No olvide eliminar el símbolo @ de la referencia de la tabla en el Administrador de nombres; de lo contrario, solo obtendrá el valor de la fila correspondiente para el conjunto de validación (por ejemplo, [myColumn3] no [@myColumn3]).