Según me contaron se puede con un Thisform.?

Hola, Fernando.
Así es, de nuevo me encuentro necesitado de tu ayuda espero sea como siempre de incondicional tu respuesta.
Ok, tengo una validación en Excel, me gustaría que no fuese desde el menú Data, si no que lo haga una secuencia de visual Basic,
Bueno, permitirme decirte que en una hoja dígito unos valores, luego en otra hoja dígito los mismo valores pero los tomo de otra persona, ( solo para confirmar que sean los mismo valores) cuando la validación me encuentra que lo estoy digitando no esta igual a lo tome de la otra persona me dice el mensaje de alerta que no esta dentro de la lista que tengo validado.
Ahí donde me gustaría que Excel me muestre una ventana y me diga los datos reales que están en la otra hoja -
Ejemplo
Lista de Batches :
RB090001
RB090002
RB090003
RB090004
RB090005
RB090006
Mil gracias de antemano.
jmnobody

1 respuesta

Respuesta
1
Sí, claro, es posible.
Pero personalmente me parece que la mejor opción sigue siendo la de Datos Validación y que el usuario elija de una lista las opciones disponibles.
Lo otro implica un paso más ya que debe tipear y si no está exactamente como en la lista recién aparece el menasje para que lo elija de una lista (!), cuando podría haberlo hecho desde un principio.
El hecho de que la lista esté en otra hoja, no es obstáculo ya que es posible usarla.
Para ello, define -previamente- un nombre de rango para la lista en la hoja donde se encuentre.
Ya sabes, seleccionas el rango y escribes el nombre que quieres en la casilla donde suele estar el nombre de la celda activa (la casilla que está a la izquierda en la barra de edición de fórmulas) o con las opciones de menú "Insertar" | "Nombre" | "Definir".
Luego bastará que ingreses este nombre de rango precedido por un signo =
ej =Batches
Asegúrate que esté tildada la casilla de "Celda con Lista desplegable" (suele estarlo normalmente).
Un par de solapas más te permitirán, si quieres, asignarle mensajes al usuario para que seleccione los datos o mensajes de error personalizados.
Click en Aceptar para activar esta función en esa celda.
---
Pero si quieres liarte con VBA, haz lo siguiente:
Crea un nombre de rango con la lista de batches, llamado por ejemplo "Batches" (¿ves? Igual que para la otra solución)
Luego en el editor de visual basic inserta un formulario con un listbox y dos botones de comandos.
En el área de códigos del formulario (doble click sobre él) borra lo que hyaa escrito y pega estos códigos:
Private Sub UserForm_Initialize()
'indica aquí el rango de la lista
NombRango = "Batches"
For Each dato In Range(NombRango)
ListBox1.AddItem dato.Value
Next dato
ListBox1.ListIndex = 1
End Sub
Private Sub CommandButton1_Click()
Application.EnableEvents = False
ActiveCell.Value = ListBox1.List(ListBox1.ListIndex)
Application.EnableEvents = True
Unload Me
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
---
Indica el nombre del rango creado, al inicio de estos códigos.
Esto cargargará las opciones en lcuador de lista y con el primer botón el usuario podrá pegar la selección en la celda donde había escrito mal la opción.
El segundo botón es para salir sin modificar la celda.
---
Ahora necesitas asociar la aparición de este formulario a un evento.
En la hoja donde está la celda en que se ingresa el batch pega el siguiente procedimiento:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
HojaLista = "Hoja1"
NombRango = "Batches"
Destino = "C8"
Set Destino = ActiveSheet.Range(Destino)
If Not Intersect(Target, Destino) Is Nothing Then
On Error Resume Next
Esta = Application.WorksheetFunction.Match(Target.Value, Sheets(HojaLista).Range(NombRango), 0)
If Err.Number <> 0 Then
Destino.Select
UserForm1.Show
End If
On Error GoTo 0
End If
Set Destino = Nothing
End Sub
Aquí tienes que indicarle cual es la celda que se modifica, la hoja y el nombre del rango donde están las opciones válidas.
Esta macro evelúa si hubo un cambio en la celda de ingreso. Luego busca lo ingresado en tal celda y si no coincide exactamente, dispara el formulario que armaste con la lista de opciones.
Graba el archivo e inténtalo.
Francamente, no encuentro ventaja alguna en este método cuando MS Excel resuelve el problema con una herramienta disponible desde el menú.
Pero, bueno, lo pediste, lo tienes...
Un abrazo!
Fernando
Gracias por responder tan rapido.!
Ahora con la pregunta anterior, estoy usando la lista del Menu Datos, pero me gustaría que después del error me diga los posibles batches.
Si me puedes ayudar.
Jorge Mendoza
Ups.!
Todo esto lo comprendo, pero no explique bien.
Cracias como siempre por tu ayuda incondicional.
Debe haber algo que no entiendo.
Si usas lista de validación del Menu Datos, como afirmas, no hay lugar al error. Simplemente se elige un batch del rango donde están los batchs. Por lo tanto no hay lugar al error.
En estos casos, Jorge, utilizas la tercera solapa del cuador de diálogo de configuración de "Datos" | "validación" donde puedes personalizar un mensaje de error en caso de que el usuario ingrese, escribiendo, un número que no esté en la lista indicada.
En tal caso, yo le colocaría un texto que diga: El número de batch ingresado no exista.
Elija los de la lista del menu decolgable presionando la flecha...
O algo por el estilo.
Haz un prueba, tal vez te satisfaga.
(Lamento el tiempo perdido en la macro del formulario)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas