Mostrar MsgBox con datos de celda

Recurro de nuevo a su valiosa ayuda.

Gracias al experto "Aprendemos" pude dar con una respuesta interesante.

Por medio de un Formulario capturo un nombre ubicados un rango, si el valor no existe en el rango aparece un MsgBox "Número no encontrado". Si existe da acceso al libro.

Los datos ocupan progresivamente la última celda.

El problema es:

Quiero mostrar el valor de la celda ubicada al lado del valor introducido

Ejemplo:

Si introduzco mi número de empleado, este ocupa la celda A2 y mi nombre ubicado en B2, debe aparecer en el MsgBox.

2

2 respuestas

Respuesta
1

A ver si entendí:

Msgbox Range("A2") & " " & Range("B2") 'dejé un espacio entre los campos

Otro caso:

dato = Range("A2").Offset(0,1).value

Msgbox dato

¿Será esto?

Me explico mejor:

El TextBox me permite guardar progresivamente valores en la columna A.

1

2

3

...65500

Los números de la columna A dan el valor buscado en la Función BuscarV ubicada en la Columna B, por lo que se cargan progresivamente también.

A B

1 Manuel

2 Carlos

3 Elsa...

Deseo mostrar un mensaje con el nombre de la columna B a medida que se va cargando.

Ojalá me haya explicado.

Gracias

Si estás pensando en el ejemplo de la consulta anterior donde se evalúa el dato ingresado en un rango, la línea para mostrar el msgbox sería:

If RangoObj Is Nothing Then
MsgBox ("Nombre no existe")
ActiveWorkbook. Close

'agregar

Else
MsgBox RangoObj.Offset(0,1)

End if

PD) Lo que NO se puede obtener es el valor de una celda que se actualiza como resultado de una fórmula.

Sdos

Elsa

Ese era el problema, que yo quería mostrar que se actualiza con el resultado de una fórmula.
Te comento: Coloqué la función en de esta forma en la Columna B
=SI(A12="";"Buscar";BUSCARV(A12;datos2;2;1))
Esto me da lo que quiero, pero obligatoriamente se debe llenar la siguiente celda manual. Por lo que no me sirve.

Existe alguna Macro para llenar de manera automática esa última celda del rango?

Lo de la fórmula dejamos descartado ya que no podrás con eso.

Con macros sería como mi respuesta anterior. Si estamos trabajando con el ejemplo de tu consulta anterior, cuando desde el formulario enviás el dato a la celda de la col A en esa misma macro debes mostrar el mensaje.

En casos así donde te han dado instrucciones sueltas, debieras escribirnos cómo te ha quedado armada la macro para poder ajustarla.

Un ejemplo concreto sería así:

Considero que la tabla de 'autorizaciones' se encuentra en Hoja1 (de allí vas a mostrar el dato de la col B)

Y la tabla donde vas registrando las entradas está en Hoja2: col A con el usuario, B = fecha y C = hora.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

'x Elsamatilde

'si se deja el campo vacío se cancela el proceso permitiendo volver a intentarlo

If textbox1 = "" then

Ca

'evaluamos si el dato existe en el rango de la col A
Set buscoTxt = Sheets("Hoja1").Range("A:A").Find(TextBox1, LookIn:=xlValues, LookAt:=xlWhole)
'si el dato no existe cancelamos el proceso
If buscoTxt Is Nothing Then
MsgBox ("Nombre no existe")
ActiveWorkbook.Close
Exit Sub
End If
'mostramos el dato de la col B del dato encontrado
MsgBox buscoTxt.Offset(0, 1)
'si el dato existe encontramos la última fila para colocar el dato
'nos colocamos en la hoja donde se guarda la lista
Sheets("Hoja2").Select
ultima = ActiveSheet.Range("A65536").End(xlUp).Row + 1
ActiveSheet.Range("A" & ultima) = TextBox1 'guardamos el nombre en col A
ActiveSheet.Range("B" & ultima) = Date 'guardamos fecha
ActiveSheet.Range("C" & ultima) = Time 'guardamos hora
End Sub

Perdón se me escapó sin terminar:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'x Elsamatilde
'si se deja el campo vacío se cancela el proceso permitiendo volver a intentarlo
If TextBox1 = "" Then
Cancel = True
Exit Sub
End If
'evaluamos si el dato existe en el rango de la col A
Set buscoTxt = Sheets("Hoja1").Range("A:A").Find(TextBox1, LookIn:=xlValues, LookAt:=xlWhole)
'si el dato no existe cancelamos el proceso
If buscoTxt Is Nothing Then
MsgBox ("Nombre no existe")
ActiveWorkbook.Close
Exit Sub
End If
'mostramos el dato de la col B del dato encontrado
MsgBox buscoTxt.Offset(0, 1)
'si el dato existe encontramos la última fila para colocar el dato
'nos colocamos en la hoja donde se guarda la lista
Sheets("Hoja2").Select
ultima = ActiveSheet.Range("A65536").End(xlUp).Row + 1
ActiveSheet.Range("A" & ultima) = TextBox1 'guardamos el nombre en col A
ActiveSheet.Range("B" & ultima) = Date 'guardamos fecha
ActiveSheet.Range("C" & ultima) = Time 'guardamos hora
End Sub

Ajustá todas las referencias (Nombre de hojas, nombre del control, etc), pruébala y si todo quedó resuelto no olvides finalizar.

Hola Elsa. Disculpa la tardanza en responder. Intenté acoplar el código que me enviaste al mío y no pude. Te lo envío para que lo veas. Es que tengo algunas cosas interesantes que quiero mantener.

Private Sub cmdAceptar_Click()
 'aqui verificamos que los texts no esten vacios
 If Me.TextBox1.Text = "" Then MsgBox ("Introduzca su número de Carné"): Exit Sub
 'verificamos si el valor introducido está en la columna J
 Range("J:J").Select
 Set RangoObj = Selection.Find(What:=TextBox1, _
 After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
 xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
 MatchCase:=False, SearchFormat:=False)
 'Si el número no está dentro de la columna J
 If RangoObj Is Nothing Then
 'MsgBox "Número de carné no Registrado"
 TextBox1 = ""
 Cancel = True
 Worksheets("hoja2").Range("A1") = Worksheets("hoja2").Range("A1") + 1
 If Worksheets("hoja2").Range("A1") = 1 Then
 MsgBox "Número de carné no autorizado. Le quedan dos intentos", vbExclamation, "SAE"
 Me.TextBox1.SetFocus
 End If
 If Worksheets("hoja2").Range("A1") = 2 Then
 MsgBox "Número de carné no autorizado. Le queda un intento", vbExclamation, "SAE"
 Me.TextBox1.SetFocus
 End If
 If Worksheets("hoja2").Range("A1") = 3 Then
 MsgBox "El sistema se cerrará", vbExclamation, "SAE"
 Application.DisplayAlerts = False
 ActiveWorkbook.Close
 Application.DisplayAlerts = True
 End If
 Else
 Worksheets("hoja2").Range("A1") = ""
 Unload Me
 ' si todo esta bien entonces insertamos los datos en la hoja
 If Sheets("Hoja1").Range("A2").Value = "" Then
 ' si no hay ningun registro todavia
 Sheets("Hoja1").Range("A2").Value = Me.TextBox1.Text
 Else
 ' a partir del segundo registro
 Sheets("Hoja1").Range("A2").End(xlDown)(xlDropDown).Value = Me.TextBox1.Text
 'MsgBox ("Hola SES " & Sheets("Hoja1").Range("B2").End(xlDown).Value & " Bienvenido")
 MsgBox "Bienvenido Supervisor. Presione Aceptar para ingresar.", vbInformation, "SAE"
 'MsgBox buscoTxt.Offset(0, 1)
 End If
 End If
 ' limpiamos el formulario para la siguiente captura
 'Me.TextBox1.Text = ""
 ' ponemos el cursor en el primer campo de captura
 'Me.TextBox1.SetFocus
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
MsgBox "Debe introducir su Número de carné", vbInformation, "SAE"
Cancel = 1
CloseMode = 1
End If
End Sub
Private Sub cmdCancel_Click()
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub

Gracias.

Ha!! Tengo la macro de la fecha y hora en el código de una hoja, pero eso no me preocupa.

Lo que te faltó entre otras cosas es reemplazar el nombre de la variable por la tuya.

Otro detalle importante: tu rutina original no hace mención en qué hoja busca el dato, por lo que se supone que la lista de permisos en col J:K está en la hoja activa....

El código ajustado quedó a partir del Else ... pero también dejé comentarios en la primer parte.

Private Sub CommandButton1_Click()
'AJUSTADA X ELSAMATILDE
 'aqui verificamos que los texts no esten vacios
 If Me.TextBox1.Text = "" Then MsgBox ("Introduzca su número de Carné"): Exit Sub
'RECOMENDABLE SELECCIONAR LA HOJA DONDE SE HARÁ LA BÚSQUEDA
 'verificamos si el valor introducido está en la columna J
 Range("J:J").Select
 Set RangoObj = Selection.Find(What:=TextBox1, _
 After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
 xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
 MatchCase:=False, SearchFormat:=False)
 'Si el número no está dentro de la columna J
 If RangoObj Is Nothing Then
 'MsgBox "Número de carné no Registrado"
 TextBox1 = ""
 'Cancel = True
 Worksheets("hoja2").Range("A1") = Worksheets("hoja2").Range("A1") + 1
 If Worksheets("hoja2").Range("A1") = 1 Then
 MsgBox "Número de carné no autorizado. Le quedan dos intentos", vbExclamation, "SAE"
 Me.TextBox1.SetFocus
 End If
 If Worksheets("hoja2").Range("A1") = 2 Then
 MsgBox "Número de carné no autorizado. Le queda un intento", vbExclamation, "SAE"
 Me.TextBox1.SetFocus
 End If
 If Worksheets("hoja2").Range("A1") = 3 Then
 MsgBox "El sistema se cerrará", vbExclamation, "SAE"
 Application.DisplayAlerts = False
 ActiveWorkbook.Close
 Application.DisplayAlerts = True
 End If
 Else
Worksheets("hoja2"). Range("A1") = "" 'SE LIMPIA LA CELDA DEL CONTADOR DE INTENTOS
 ' si todo esta bien entonces insertamos los datos en la HOJA1
 If Sheets("Hoja1").Range("A2").Value = "" Then
 ' si no hay ningun registro todavia
 Sheets("Hoja1").Range("A2").Value = Me.TextBox1.Text
 Else
 ' a partir del segundo registro SE BUSCA LA PRIMER CELDA LIBRE
 Sheets("Hoja1").Range("A65536").End(xlUp).Offset(1, 0).Value = Me.TextBox1.Text
 End If
 'AQUÍ SE MUESTRA EL DATO DE LA CELDA DE AL LADO
 MsgBox "Bienvenido " & RangoObj.Offset(0, 1) & ". Presione Aceptar para ingresar.", vbInformation, "SAE"
 'RECIÉN AQUÍ CERRAMOS EL FORM
 Unload Me
 'RECOMENDABLE: SELECCIONAR LA HOJA DE INICIO
 End If
End Sub

Todo funciona bien, pero aún no me muestra la celda de al lado. je je!! que broma!!

MsgBox "Bienvenido " & RangoObj.Offset(0, 1) & ". Presione Aceptar para ingresar.", vbInformation, "SAE"
 'RECIÉN AQUÍ CERRAMOS EL FORM
 Unload Me
 Sheets("Hoja3").Range("A1").Select

Y tampoco me abre la hoja de inicio con la instrucción Select. No se por qué.

Reitero para que revises este pto:

Otro detalle importante: tu rutina original no hace mención en qué hoja busca el dato, por lo que se supone que la lista de permisos en col J:K está en la hoja activa....

La última línea, si intentan posicionarte en hoja 3 podes separarla (en algunos versiones dá error si queda todo en 1 sola línea)

Sheets("Hoja3").select

Activesheet.range("A1").select

¿La hoja está visible?

Lo de la búsqueda lo solucioné con esto:

'verificamos si el valor introducido está en la columna J de la hoja 1
Sheets("Hoja1").Range("J:J").Select
Set RangoObj = Selection.Find(What:=TextBox1, _
After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)

Pero lo del mensaje de la celda de al lado, nada todavía.

¿Te puedo enviar el ejemplo a algún correo? O escribime al mío que podes copiarlo de mi sitio que dejo al pie.

Sdos

Elsa

Muy bien. Te envié un ejemplo.

Recibido, mañana me ocupo. Sdos!

¿Por qué no utilizaste la macro que te envié en respuesta anterior?

Te marco tus problemas:

1- Al abrir el libro se abre el Uf, y comienza la búsqueda. En ningún momento le indicas de qué hoja. Si el libro se abre en la hoja2 busca allí, si se abre en la hoja3 busca allí

Solución: la instrucción Set indica Hoja y rango de búsqueda sin necesidad de activar esa hoja

2- No devuelve nada porque no hay nada... la celda 'de al lado' estaba vacía.

Solución: la enviada anteriormente. MsgBox buscoTxt.Offset(0, 1)

3- Agregué una línea para que en los reintentos se posicione nuevamente en el textbox

TextBox1. SetFocus

4- Al enviar mensaje de bienvenida, se cierra el UF ... nuevamente no indicas en qué hoja se debe posicionar. Tengamos presente que quizás el libro se abre con alguna hoja distinta a la Hoja1:

MsgBox "Bienvenido " & buscoTxt.Offset(0, 1) & ". Presione Aceptar para ingresar.", vbInformation, "SAE"
Sheets("Hoja1").Select

'RECIÉN AQUÍ CERRAMOS EL FORM
Unload Me

Ahora te envío el libro con la rutina explicada paso a paso.

Ja ja ja!! Elsa muchas gracias! No lo había colocado, porque temía a perder la que ya tenía montado, por lo que tomé sólo la parte del MsgBox.

Creo que si podré adaptarlo a mi libro real.

Mil Gracias. Por favor envíame la respuesta de los manuales.

Respuesta
1

Yo hize una busqueda asi:

Necesitaba saber si habia un registro en la columna C y si lo encontraba le pedia que me mostrara lo que tenia en la celda A y colo que este codigo

Dim rBuscado As Range
Dim strDato As String

dim Donde as string

Hoja2.Activate
Range("C2:C5000").Select
Set rBuscado1 = Cells.Find(What:=strDato, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)

aqui asigo el valor de la cela A que necesito

Donde = rBuscado1.Offset(0, -2)

y lego esto lo coloco en un msgbox

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas