Activar la Celda "A#" que contien el Dato buscado en un TextBox llamado TxtPlaca y que se encuentra guardado en "N#"

Tengo un formulario con un llamado FrmRegistro, el cual contiene un textbox llamdo "TxtPlaca", y un botón con el que ejecuto una búsqueda, lo que necesito, es que una vez, los datos que corresponden a la búsqueda hayan sido llamados y colocados en los textbox que contiene el formulario, se active la celda "A#" que los contiene, para poderlos cargar en otro formulario, editarlos si es el caso y devolverlos a la base de datos actualizados.

El formularo donde se cargarian esos datos se llama "FrmEditar" y esta compuesto por TextBox y ComboBox.

El proceso de busqueda de la informaciòn, ya lo puedo hacer sin problema, ahora necesito ayuda es con la forma de cargar la informacion del registro buscado en el FrmEditar, para modificarla.

Una vez se tenga la información buscada, se cargaría en el FrmEditar, mediante un boton llamado "Editar", la información del registro activo.

2 respuestas

Respuesta
1

Según recuerdo, puedes tener varios registros con el mismo código, si dices que tienes resuelto el problema de la búsqueda, entonces, en ese mismo proceso tienes que seleccionar la hoja y la celda.

Pon tu macro para revisar lo que tienes, o envíame tu archivo con el frmeditar para cargar la información.

Listo Dante, te acabé de enviar el archivo. Gracias

Hola Dante, buenos días, pudiste recibir el fichero?.

Sí, recibí 2 correos, los reviso y te envío una respuesta.

¡Gracias! 

Con lo siguiente la macro selecciona la celda A# de la hoja "BaseDeDatos", porque supongo que son los datos de la hoja "BaseDeDatos" los que quieres editar.

        Set H1 = Sheets("Registro")
        Set H2 = Sheets("BasedeDatos")
        Set b = H2.Columns("N").Find(TxtPlaca, lookat:=xlWhole)
        If Not b Is Nothing Then
            H2.Select
            Cells(b.Row, "A").Select
            H1.Select

No lo que no entiendo es cómo vas a presionar el botón editar, si el formulario lo haces pequeño y no se ve el botón editar.

Si con el código que te puse ya puedes editar la información, no olvides valorar la respuesta.

Saludos. Dante Amor

Gracias Dante, voy a implementar tu cambio y te comento. POr cierto, ¿en qué evento coloco este código?. ¿Se lo agrego al procedimiento Buscar?.

Mira, la idea, es que una vez ingresado el código y presionado Enter 1 vez, el formulario Registro, me muestre la información existene acerca de ese código. Si no existe, el formulario no se amplia y por lo tanto no me muestra nada, ya que no hay nada que editar y por ende me dará la opción de crear un nuevo usuario.

Así las cosas, si el código ya esta registrado, pues me mostrará la información en el formulario Registro (ampliado) y ahí, si podré ver el botón editar. Yo decidiré si edito o no la información existente y cuando presione el botón Enter por segunda vez, se ejecutará la acción que corresponda, ya sea una entrada o su respectiva salida.

Sin embargo, si tu conoces una forma más "profesional" de hacer esto, te agradezco tus sugerencias y recomendaciones, créeme que las implementaré, ya que deseo que esa "solucion", quede lo más profesional y útil posible .

Dante, he revisado el fichero, pero, sigo con el mismo problema, siempre que se inicia el Frm Editar, siempre me carga la información del Registro No. 1 y no la información del registro buscado mediante el código en el TxtPlaca.

Con esta macro, estoy realizando la busqueda: Private Sub CmdBuscar_Click()
Application.ScreenUpdating = False
Sheets("BaseDeDatos").Select
Dim Rango As Range
If TxtPlaca = "" Then
Unload Me
MsgBox "Dígita el N° de Cédula o Placa", vbOKOnly + vbInformation, "Sistema"
FrmRegistro.Show
Exit Sub
End If
Set Rango = Range("N:N").Find(what:=TxtPlaca, _
lookat:=xlWhole, LookIn:=xlValues)
If Rango Is Nothing Then
frmAlta.TxtPlaca = Me.TxtPlaca.Value
Unload Me
MsgBox "Su búsqueda <" & TxtPlaca & "> No produjo resultados." & vbNewLine & "Podrá crear el 'Nuevo Usuario' a contimuación.", vbOKOnly + vbInformation, "Sistema"

end sub

Pero no logro, que una vez encontrada la ifnormacion, se cargue en el Formulario Editar, para editar la información y devolverla a la base de datos actualizada.

Ya estoy confundido.

No entiendo qué información vas a editar. Tampoco entiendo en qué formulario vas a trabajar.

¿Puedes explicarme paso a paso qué quieres hacer? Con cuál formulario empiezo, qué dato capturo, en dónde lo capturo, en dónde lo busco, qué información quieres editar y en dónde quieres poner la información

Listo, gracias, mira:

La información a editar, es la que fue encontrada mediante la búsqueda que se ejecuta, una vez termino de escribir el código en TxtPlaca y pulso Enter una vez.

Notaras que si el código esta registrado en la b hace de datos, entonces, existirá información.

Esa información que puedes ver cuando el formulario se amplia, es la que quiero editar.

¿Cómo editarla?. Dando clic en el botón Editar que se encuentra en la parte de abajo de FrmRgistro.

¿En qué formulario voy a trabajar?. Inicialmente, si el código ya esta dado de alta, solo en el formulario FrmRegistro. Si hay que crear un nuevo, en el formulario FrmAlta, si de debe Editar, en el Formulario FrmEditar. Pero siempre será el principal el FrmRegitro.

Bien, con cual formulario empezar: Con el FrmRegistro, capturando el código en el TxtPlaca, como ves, todo esta programado, para ubicar si el registro existe o no en la base de datos.

Si existe, entonces te mostrara la información existente, se ampliará el FrmEditar y podrás ver el botón "Editar". Si no existe, te lo avisa y de abre el FrmAlta, donde podrás darlo de alta.

Para lo que me interesa arreglar en este momento, está en el FrmRegistro.

Cuando busco un registro, lo encuentro y me lo muestra, mediante la ampliación del FrmRegistro, habilitándose el botón Editar.

Si esa información que me presenta, ya no es vigente, necesitaré editarla, es ahí cuando necesito que la información que veo en el FrmRegistro (ampliado), se pase al FrmEditar y ahí pueda editarla y dvolverla actualizada a la base de datos.

Como te había dicho antes, el proceso de la búsqueda, ya está, lo que no logro es activar la celda que contien la información buscada para que al Inicializarse el formulario FrmEditar, esa información pase a llenar los campos de este formulario y así pueda editarla y volverla a dejar en la ubicación donde estaba.

Finalmente, la información, seguirá estando en la "BaseDeDatos", solo que actualizada.

Espero haberme hecho entender.

Gracias.

Agrega esta línea en el evento CmdBuscar_Click, del formulario FrmRegistro

Range("A" & Rango. Row).Select

También hay que dejar el siguiente evento de esta forma:

Private Sub TxtPlaca_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
    With Me.TxtPlaca
        .BackColor = RGB(255, 204, 0)
        .Font.Bold = False
        .BorderColor = RGB(105, 105, 105)
    End With
'Activar la celda del registro elegido
'Dim Fila As Integer
'Fila = 2
'Range("A" & Fila).Select
'    Range("A2").Activate
'    Cuenta = Me.ListBox1.ListCount
'    For i = 0 To Cuenta - 1
'        If Me.ListBox1.Selected(i) Then
'            Valor = Me.ListBox1.List(i)
'            Sheets("Personal").Range("A2:A65000").Find(What:=Valor, LookAt:=xlWhole, after:=ActiveCell).Activate
'        End If
'    Next i
'====
End Sub

Saludos.Dante amor

Respuesta
1

La verdad tendría que ver el formulario y el código para ayudarte y saber cómo estás realizando la búsqueda de la placa, en cuanto a la duda que tienes de seleccionar la celda A# cuando encuentres el dato en N#, puedes hacer lo siguiente:

Cuando selecciones el botón de búsqueda y encuentres el dato de la placa en N#, guardas la fila en una variable

Fila=activecell.row 

Para seleccionar la celda A#

Range ("A" & Fila).select

Para pasarlos datos al formulario y editarlos tendría que ver cómo lo construía te y ver la información en la base de datos para saber qué es lo que necesitas pasar.

Si gustas, puedo enviarte el archivo a un correo, para que lo veas.

A Dante, yo te lo envié por correo, mira que todo eso sucede en el evento KeyDown, al presionar enter, apenas termino de escribir el código.

Mira, esta es la macro que estoy utilizando:

Private Sub CmdBuscar_Click()
Application.ScreenUpdating = False
Sheets("BaseDeDatos").Select
Dim Rango As Range
If TxtPlaca = "" Then
Unload Me
MsgBox "Dígita el N° de Cédula o Placa", vbOKOnly + vbInformation, "Sistema"
FrmRegistro.Show
Exit Sub
End If
Set Rango = Range("N:N").Find(what:=TxtPlaca, _
lookat:=xlWhole, LookIn:=xlValues)
If Rango Is Nothing Then
frmAlta.TxtPlaca = Me.TxtPlaca.Value
Unload Me
MsgBox "Su búsqueda <" & TxtPlaca & "> No produjo resultados." & vbNewLine & "Podrá crear el 'Nuevo Usuario' a contimuación.", vbOKOnly + vbInformation, "Sistema"

Si quieres, puedo enviarte el fichero, para que lo veas.

Si envíamelo por favor, necesito ver el formulario y que me aclares en qué formulario y en qué parte deseas visualizar la información para editarla, mi correo es [email protected]

Bueno mas o menos entiendo lo que deseas hacer, te voy a explicar paso a paso lo que debes hacer:


1. Ve al modulo Funciones y define las variables encima del Sub para que sean públicas y las puedas utilizar en cualquier parte del código.

Dim registro As String, categoria As String, cuerpo As String, genero As String, grado As String, arma As String, apellidos As String, nombres As String, cedula As String, RH As String, cedula As String

Dim RH As String, Placa As String, Entrada As String, Hora As String, Salida As String, Hora As String, Tiempo As String, Teléfono As String, Celular As String, Vehículo As String, Color As String, Unidad As String
Dim Solo As String, Cantidad As String, Edades As String, Sección As String, Funcionario As String, Observaciones As String, Registrado As String

_

Sub Macro2()
FrmRegistro.Show
End Sub

'Sub Reloj()
'FrmRegistro.LblMensaje.Caption = Time
'Tiempo
'End Sub
'Sub Tiempo()
'Application.OnTime Now + TimeValue("00:00:01"), "Reloj"
'End Sub


2. En el código que me enviaste debes completarlo de la siguiente manera, para buscar la cédula y guardar todos los campos relacionados a la persona en las variables que se definieron públicas

Private Sub CmdBuscar_Click()
Application.ScreenUpdating = False
Sheets("BaseDeDatos").Select
Dim Rango As Range
If TxtPlaca = "" Then
Unload Me
MsgBox "Dígita el N° de Cédula o Placa", vbOKOnly + vbInformation, "Sistema"
FrmRegistro.Show
Exit Sub
End If
Set Rango = Range("N:N").Find(what:=TxtPlaca, _
lookat:=xlWhole, LookIn:=xlValues)
If Rango Is Nothing Then
frmAlta.TxtPlaca = Me.TxtPlaca.Value
Unload Me
MsgBox "Su búsqueda <" & TxtPlaca & "> No produjo resultados." & vbNewLine & "Podrá crear el 'Nuevo Usuario' a contimuación.", vbOKOnly + vbInformation, "Sistema"

Else

Range("N:N").select

Selection.Find(What:=TxtPlaca, After:=ActiveCell, LookIn:=xlFormulas, _

        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _

        MatchCase:=False, SearchFormat:=False).Activate

fila=activecell.row

Range(“A” & fila).select

registro = activecell

categoria = activecell.offset(0,1)

cuerpo= activecell.offset(0,2)

genero= activecell.offset(0,3)

grado = activecell.offset(0,4)

arma= activecell.offset(0,5)

apellidos= activecell.offset(0,6)

nombres= activecell.offset(0,7)

cedula = activecell.offset(0,8)

RH= activecell.offset(0,9)

telefono= activecell.offset(0,10)

celular= activecell.offset(0,11)

vehiculo= activecell.offset(0,12)

placa= activecell.offset(0,13)

color= activecell.offset(0,14)

unidad= activecell.offset(0,15)

solo= activecell.offset(0,16)

cantidad= activecell.offset(0,17)

edades= activecell.offset(0,18)

seccion= activecell.offset(0,19)

funcionario= activecell.offset(0,20)

observaciones= activecell.offset(0,21)

registrado= activecell.offset(0,22)

Endif


3. Para cargar los datos en el módulo FrmEditar, debes colocar lo siguiente cuando se carge el módulo, preferiblemente cambia los activecell. Offset por las variable publicas que definimos así no va a colocar lo que en ese momento tenga en la celda activa, sino lo que guardó en memoria en las variables

Private Sub UserForm_Activate()
Application.ScreenUpdating = False
TxtCantidad.Visible = False
ComboEdad.Visible = False
LblVacio15.Visible = False
LblVacio16.Visible = False
'====
ThisWorkbook.Sheets("BaseDeDatos").Activate
'Range("A2").Select
TxtId = registro
ComboCategoria = categoria
ComboCuerpo = cuerpo
ComboGenero = genero
ComboGrado = grado
ComboArma = arma
TxtApellidos = apellidos
TxtNombres = nombres
TxtCedula = cedula
ComboRH = RH

y así sucesivamente......


4. Para editar los datos, pienso que tienes bien el código en el botón commandbutton1, sólo no se te olvide seleccionar la hoja antes

Sheets("BaseDeDatos").Select

ActiveCell.Offset(0, 0).Value = TxtId.Value
ActiveCell.Offset(0, 1).Value = ComboCategoria.Value
ActiveCell.Offset(0, 2).Value = ComboCuerpo.Value
ActiveCell.Offset(0, 3).Value = ComboGenero.Value
ActiveCell.Offset(0, 4).Value = ComboGrado.Value
ActiveCell.Offset(0, 5).Value = ComboArma.Value
ActiveCell.Offset(0, 6).Value = TxtApellidos.Value
ActiveCell.Offset(0, 7).Value = TxtNombres.Value
ActiveCell.Offset(0, 8).Value = TxtCedula.Value
ActiveCell.Offset(0, 9).Value = ComboRH.Value
ActiveCell.Offset(0, 10).Value = ComboCompañia.Value
ActiveCell.Offset(0, 9).Value = Me.ComboRH.Value
ActiveCell.Offset(0, 10).Value = Me.TxtTelefono.Value
ActiveCell.Offset(0, 11).Value = Me.TxtCelular.Value
ActiveCell.Offset(0, 11).Value = TxtUnidad.Value
ActiveCell.Offset(0, 12).Value = Me.ComboVehículo.Value
ActiveCell.Offset(0, 13).Value = Me.TxtPlaca.Value
ActiveCell.Offset(0, 14).Value = Me.ComboCompañia.Value
ActiveCell.Offset(0, 15).Value = Me.TxtUnidad.Value
ActiveCell.Offset(0, 16).Value = Me.ComboMision.Value
ActiveCell.Offset(0, 17).Value = Me.TxtCantidad.Value
ActiveCell.Offset(0, 18).Value = Me.ComboEdad.Value
ActiveCell.Offset(0, 19).Value = Me.ComboSecciónVisitada.Value
ActiveCell.Offset(0, 20).Value = Me.ComboNovedad.Value
ActiveCell.Offset(0, 21).Value = Me.TxtObservaciones.Value
ActiveCell.Offset(0, 22).Value = Me.DTPicker1.Value

Vaya!, te cuento que ahora si quedé más perdido de no se quien.

Realice todos los cambios que me indicaste, pero cuando dígito algo en el TxtPlaca y se que ese registro tiene información, ya no se amplia el formulario, por lo tanto no puedo ver nada de la información relacionada con el y por ende, no puedo acceder al botón Editar.

Me parece buena idea lo de las varibales, pero siento que ese cambio, me puso a rehacer todo lo que había hecho.

Me disculparas, pero como lo había dicho, no soy bueno programando, de h echo no se, solo procuro aprender.

Así, que si no te molesta, te agradecería si continuamos trabajando de la forma que lo he venido haciendo. Más o menos estoy familizarizado así, porque con todos los cambios que me indicaste, no me funciona, al menos no logro hacerlo funcionar.

Amigo estoy probando el archivo que me enviaste, y ni siquiera está buscando las cédulas, ingreso una cédula que está en la base de datos y no la encuentra.

Por otro lado, el código que te dí no lo coloqué en la macro, sólo lo edité y sé que funciona, sin embargo tendría que ver en qué parte del código lo cambiaste, y si cambiaste sólo la parte que te envié o todo el código.

Buenas noches, gracias por responder.

¿Será qué se dañó el archivo que te envié?.

Yo se que tu código funciona de maravilla, lo que pasa es que no poseo la experiencia ni el conocimiento adecuado para hacer todos esos cambios. Lo siento, solo soy un aprendiz.

Perdón, no las cédulas sino las placas

Ah entiendo. ¿Quieres qué te lo reenvíe de nuevo?

Ya te envié el archivo a tu correo funcionando, revísalo y me comentas. Cualquier cosa estoy pendiente.

¡Gracias! Miguel, la macro funciona perfectamente!. He detectado otras fallas gracias al arreglo que le hiciste, pero voy a ver como las soluciono. Si no puedo, aquí estaré de nuevo molestando. Muchas gracias por tu valiosa colaboración.

Ok estoy pendiente, la verdad hice mas o menos lo que te entendí que necesitabas, sin embargo no conozco al 100% el funcionamiento o el fin de la macro, si necesitas otra cosa por favor coméntame, te voy a enviar al correo una macro con un formulario hecho manualmente para que reemplaces el DTPicker.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas