Aplicación en Microsoft Excel, descifrar fallos en registros

Hola Elsa.
He trabajado en esta rutina largo tiempo, aunque logre que encuentre el registro correcto a la hora de pedirle que grabe los datos nuevos me los guarda en otro registro.
En esta pequeña aplicación los registros se repirten por el número de siniestro pero tienen diferente rubro, así que si le pido el registro B4985369 con el rubro RDMque esta en A3 lo encuentra y me muestra la fecha de turnado.
Pero cuando le pido grabar el registro con los datos nuevo se va al renglón A7 (B4985369, ¿RGMO) y graba en la celdas especificadas así lo hace con todos los intentos me puede ayudar a descifrar donde esta la falla?
Private Sub CmbAceptar_Click()
 Sheets("BASE").Select
 ActiveSheet.Unprotect (14)
 Filalibre = Range("A3").End(xlDown).Offset(1, 0).Row 'la variable filalibre guarda el nro. De la primer celda vacía.
 Control = 0
 Dato = TxtSiniestro
 Dato2 = CboRubro
 Rango = "A3:A" & Filalibre
 ActiveSheet.Range("A3").Select
 While ActiveCell <> ""
  Set Midato = Sheets("Base").Range(Rango).Find(Dato, LookIn:=xlValues, lookat:=xlWhole)
   If Not Midato Is Nothing Then 'lo encontro
    NUEVO = Midato.Address
    Dato3 = ActiveCell.Offset(0, 1).Value
     Do
      If Dato2 = Dato3 Then
       MsgBox NUEVO
       Sheets("Base").Select
       Range(NUEVO).Offset(0, 30).Value = Format(TxtFechaIngreso.Value, "DD-MMM-YY") 'Diasin
       Range(NUEVO).Offset(0, 31).Value = TxtPagosAnte                                'Pagos
       Range(NUEVO).Offset(0, 32).Value = Format(TxtRecuperable.Value, "$###,###,###.00") 'Monto Recuperable
       Range(NUEVO).Offset(0, 33).Value = Format(TxtRecuperado.Value, "$###,###,###.00")  'Monto Recuperado
       Range(NUEVO).Offset(0, 34).Value = CboRubroRecup                                    'Rubro Recuperacion
       Range(NUEVO).Offset(0, 35).Value = CboAbogado                                       'Abogado Asignado
       Range(NUEVO).Offset(0, 36).Value = CboRubroRecup                                    'Rubro Recuperado
       Range(NUEVO).Offset(0, 37).Value = TxtRed                                           'Red
       Range(NUEVO).Offset(0, 38).Value = Format(TxtMontoTotal.Value, "$###,###,###.00")   'Monto Total de Deuda
       '================================================
       Range(NUEVO).Offset(0, 39).Value = "MAY"                                  'Bandera de mes
       Sheets("Principal").Select
      End If
      Set Midato = Sheets("Base").Range(Rango).FindNext(Midato)
       'el bucle continúa mientras se encuentre coincidencias y NO sea la primer celda encontrada
     Loop While Not Midato Is Nothing And Midato.Address <> NUEVO
   End If
   Set Midato = Nothing
   ActiveCell.Offset(1, 0).Select
 Wend
 Sheets("Principal").Select
 CmbAceptar.Enabled = True
 ActiveSheet.Protect Password:="14"
End Sub
Private Sub CmbBuscaraltas_Click()
 Sheets("BASE").Select
 Filalibre = Range("A3").End(xlDown).Offset(1, 0).Row 'la variable filalibre guarda el nro. De la primer celda vacía.
 Control = 0
 Dato = TxtSiniestro
 Dato2 = CboRubro
 Rango = "A3:A" & Filalibre
 ActiveSheet.Range("A3").Select
  If Dato2 = "" Then
   Sheets("Principal").Select
   MsgBox ("FALTA EL RUBRO"), vbCritical
   Set Midato = Nothing
   Exit Sub
  End If
 While ActiveCell <> ""
  Set Midato = Sheets("Base").Range(Rango).Find(Dato, LookIn:=xlValues, lookat:=xlWhole)
   If Not Midato Is Nothing Then 'lo encontro
    Ubica = Midato.Address
    Dato3 = ActiveCell.Offset(0, 1).Value
     Do
      If Dato2 = Dato3 Then
      MsgBox Ubica
       TxtFechaTurnado.Value = ActiveCell.Offset(0, 6).Value
       TxtPagosAnte.Value = ActiveCell.Offset(0, 31).Value
       Asistencia = ActiveCell.Offset(0, 12).Value
        If Asistencia = "SI" Then
         lblAsistencia.Font.Bold = True
         lblAsistencia.Enabled = True
         lblAsistencia.BackColor = &HFFFF&
        End If
       'TxtFechaIngreso.Value = ActiveCell.Offset(0, 6).Value 'Fecha Ingreso
       Sheets("Principal").Select
       MsgBox ("SINIESTRO ENCONTRADO PROCEDA A CAPTURAR LA RECUPERACION"), vbInformation
       DESBLOQUEO
       Exit Sub
      End If
       Set Midato = Sheets("Base").Range(Rango).FindNext(Midato)
       'el bucle continúa mientras se encuentre coincidencias y NO sea la primer celda encontrada
     Loop While Not Midato Is Nothing And Midato.Address <> Ubica
   End If
   Set Midato = Nothing
   ActiveCell.Offset(1,...

1 respuesta

Respuesta
1
Leyendo tu macro noté que estás guardando la fila antes del bucle DO, por lo que si encuentra el registro dentro del bucle lo coloca en la fila del primer encontrado.
Realizá este cambio que dejé en negrita.
Private Sub CmbAceptar_Click()
 Sheets("BASE").Select
 ActiveSheet.Unprotect (14)
 Filalibre = Range("A3").End(xlDown).Offset(1, 0).Row 'la variable filalibre guarda el nro. de la primer celda vacía.
 Control = 0
 Dato = TxtSiniestro
 Dato2 = CboRubro
 Rango = "A3:A" & Filalibre
 ActiveSheet.Range("A3").Select
 While ActiveCell <> ""
  Set Midato = Sheets("Base").Range(Rango).Find(Dato, LookIn:=xlValues, lookat:=xlWhole)
   If Not Midato Is Nothing Then 'lo encontro
    'NUEVO = Midato.Address     aquí no va
    Dato3 = ActiveCell.Offset(0, 1).Value
     Do
      If Dato2 = Dato3 Then
       MsgBox NUEVO
       NUEVO = Midato.Address
       Sheets("Base").Select
---------------
Lo mismo tenés que ajustar en la otra (Buscaraltas) que veo tiene el mismo problema.
Sdos
Elsa
http://aplicaexcel.galeon.com/manual_400.htm
Cielos no puedo cree que me lleve semanas viendo el código y siguiéndolo y nada más ni vi ese detalle, mil gracias Elsa, estamos en contacto.
Eres lo máximo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas