El problema es que el ListBox solo reconoce correctamente la referencia si la hoja del RowSource está activa. Por eso:
- Cuando estás en la hoja «BaseDeDatos», todo funciona perfecto.
- Pero cuando estás en otra hoja, el control no sabe interpretar correctamente =BaseDeDatos!A2:B100 desde otra hoja activa.
Soluciones: Aquí te van 3 opciones que puedes aplicar:
✅ Opción 1: Usar una tabla con nombre (rango nombrado dinámico)
- Ve a la hoja «BaseDeDatos«.
- Selecciona el rango con los datos (por ejemplo, A2:B100).
- Asigna un nombre al rango:
- En la barra de nombres, escribe algo como: miLista
- En el formulario, en la propiedad RowSource del ListBox, escribe: =miLista
➡️ Esto funciona desde cualquier hoja, porque miLista es un nombre global.
✅ Opción 2: Usa INDIRECTO con Validación de Datos (para listas simples)
Si tu lista es de una sola columna, puedes usar INDIRECTO(«BaseDeDatos!A2:A100») dentro de un rango auxiliar, y enlazar el ListBox a ese rango auxiliar.
✅ Opción 3: Crea un helper oculto con fórmula que refleje los datos
1. En cada hoja donde uses el formulario, crea un rango oculto que hace referencia a los datos de la hoja base.
Ejemplo:
=BaseDeDatos!A2
=BaseDeDatos!A3
2. Nombra ese rango como ListaActiva y usa =ListaActiva como RowSource.