Ayuda codigo

BUENAS TARDES TEGO UN FORMULARIO EN UNA MACRO CON UN BOTON PARA MODIFICAR, EL BOTON SI ME TRAE EL DATO A MODIFICAR PRO RL PROBLEMA ES QUE ME LO GUARDA EN LA  CELDA SIGUIENTE Y NO DONDE DEVERIA QUE SERIA EN LA MISMA FILA EN LA QUE ESTOY MODIFICANDO
CODIGO COMPLETO
Dim valor1 As String
Dim VALOR2 As String
Dim SW As Boolean
Dim I As Integer
Private Sub bntEliminar_Click()
valor1 = InputBox("que registro desea eliminar")
eliminaRegistro
End Sub
Private Sub btnModificar_Click()
'
VALOR2 = InputBox("que registro desea modificar")
Sheets("Hoja1").Select
'
Dim J As Integer
'
'
 J = 20
For I = 1 To J
    If Range("A" + Trim(Str(I))).Value = VALOR2 Then
txtcedula.Text = Range("A" + Trim(Str(I))).Value
txtNombre.Text = Range("B" + Trim(Str(I))).Value
txtTelefono.Text = Range("C" + Trim(Str(I))).Value
txtDireccion.Text = Range("D" + Trim(Str(I))).Value
    J = 21
'
   End If
'
'
'
'
Next I
'
'
End Sub
Private Sub CommandButton1_Click()
    guardar
End Sub
Private Sub guardar()
'If SW = True Then
    If txtcedula.Text = "" Then
        MsgBox ("Por favor ingrese Cédula")
        txtcedula.SetFocus
    Else
            If txtNombre.Text = "" Then
                MsgBox ("Por favor ingrese Nombre")
                txtNombre.SetFocus
            Else
                If txtTelefono.Text = "" Then
                    MsgBox ("Por favor ingrese Telefono")
                    txtTelefono.SetFocus
                Else
                    If txtDireccion.Text = "" Then
                        MsgBox ("Por favor ingrese Dirección")
                        txtDireccion.SetFocus
                    Else
                        Sheets("HOJA1").Select
                        'seleccionamos la ceda donde se debe alojar el dato
                        Range("A1").Select
                        'guardamos el dato en la celda
                        Set ws = Worksheets("HOJA1")
                        iFila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                        ws.Cells(iFila, 1).Value = txtcedula.Value
                        txtcedula.Text = ""
                        Set ws = Worksheets("HOJA1")
                        iFila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                        ws.Cells(iFila - 1, 2).Value = txtNombre.Value
                        txtNombre.Text = ""
                        Set ws = Worksheets("HOJA1")
                        iFila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                        ws.Cells(iFila - 1, 3).Value = txtTelefono.Value
                        txtTelefono.Text = ""
                        Set ws = Worksheets("HOJA1")
                        iFila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                        ws.Cells(iFila - 1, 4).Value = txtDireccion.Value
                        txtDireccion.Text = ""
                        MsgBox ("GUARDADDO")
                    End If
                End If
            End If
    End If
'    Else
End Sub
Private Sub CommandButton2_Click()
Dim valaux As Integer
    If Not txtcedula.Text = "" Then
        valaux = MsgBox("Existen datos sin guardar, desea salir?...

1 respuesta

Respuesta
1
Comprenderás que solo puedo 'leer' tu código ya que para probarlo requiero de un libro con el mismo contenido.
En la rutina del botón MODIFICAR, fijate en esta línea:
iFila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Allí le estás diciendo que la fila es la última celda + 1 hacia abajo.
Si le quitas el Offset te quedarás en la última fila.
Pero tampoco creo que sea: '... ME LO GUARDA EN LA CELDA SIGUIENTE... eso si la celda a modificar es la última, sinó creo que no es así.
Lo ideal es que guardes en una variable la fila del registro encontrado:
If Range("A" + Trim(Str(I))).Value = VALOR2 Then
filax= Range("A" + Trim(Str(I))).Row
txtcedula.Text = Range("A" + Trim(Str(I))).Value
y luego al guardar hacés mención a esta fila
ws.Cells(filax, 1).Value = txtcedula.Value
Al inicio de todas las rutinas tenés que declarar esta variable como pública:
Public filax as Integer

REalizá estos cambios y luego me comentás si el tema queda resuelto
BUENAS TARDES TEGO UN FORMULARIO EN UNA MACRO CON UN BOTON PARA MODIFICAR, EL BOTON SI ME TRAE EL DATO A MODIFICAR PRO RL PROBLEMA ES QUE ME LO GUARDA EN LA  CELDA SIGUIENTE Y NO DONDE DEVERIA QUE SERIA EN LA MISMA FILA EN LA QUE ESTOY MODIFICANDO
CODIGO COMPLETO
Dim valor1 As String
Dim VALOR2 As String
Dim SW As Boolean
Dim I As Integer
Private Sub bntEliminar_Click()
valor1 = InputBox("que registro desea eliminar")
eliminaRegistro
End Sub
Private Sub btnModificar_Click()
'
VALOR2 = InputBox("que registro desea modificar")
Sheets("Hoja1").Select
'
Dim J As Integer
'
'
 J = 20
For I = 1 To J
    If Range("A" + Trim(Str(I))).Value = VALOR2 Then
txtcedula.Text = Range("A" + Trim(Str(I))).Value
txtNombre.Text = Range("B" + Trim(Str(I))).Value
txtTelefono.Text = Range("C" + Trim(Str(I))).Value
txtDireccion.Text = Range("D" + Trim(Str(I))).Value
    J = 21
'
   End If
'
'
'
'
Next I
'
'
End Sub
Private Sub CommandButton1_Click()
    guardar
End Sub
Private Sub guardar()
'If SW = True Then
    If txtcedula.Text = "" Then
        MsgBox ("Por favor ingrese Cédula")
        txtcedula.SetFocus
    Else
            If txtNombre.Text = "" Then
                MsgBox ("Por favor ingrese Nombre")
                txtNombre.SetFocus
            Else
                If txtTelefono.Text = "" Then
                    MsgBox ("Por favor ingrese Telefono")
                    txtTelefono.SetFocus
                Else
                    If txtDireccion.Text = "" Then
                        MsgBox ("Por favor ingrese Dirección")
                        txtDireccion.SetFocus
                    Else
                        Sheets("HOJA1").Select
                        'seleccionamos la ceda donde se debe alojar el dato
                        Range("A1").Select
                        'guardamos el dato en la celda
                        Set ws = Worksheets("HOJA1")
                        iFila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                        ws.Cells(iFila, 1).Value = txtcedula.Value
                        txtcedula.Text = ""
                        Set ws = Worksheets("HOJA1")
                        iFila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                        ws.Cells(iFila - 1, 2).Value = txtNombre.Value
                        txtNombre.Text = ""
                        Set ws = Worksheets("HOJA1")
                        iFila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                        ws.Cells(iFila - 1, 3).Value = txtTelefono.Value
                        txtTelefono.Text = ""
                        Set ws = Worksheets("HOJA1")
                        iFila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                        ws.Cells(iFila - 1, 4).Value = txtDireccion.Value
                        txtDireccion.Text = ""
                        MsgBox ("GUARDADDO")
                    End If
                End If
            End If
    End If
'    Else
End Sub
Private Sub CommandButton2_Click()
Dim valaux As Integer
    If Not txtcedula.Text = "" Then
        valaux = MsgBox("Existen datos sin guardar, desea salir? ", 1, "AVISO")
        ejemplo
        If valaux = 1 Then
         Application.Quit
        End If
    Else
        If Not txtNombre.Text = "" Then
            valaux = MsgBox("Existen datos sin guardar, desea salir? ", 1, "AVISO")
            ejemplo
            If valaux = 1 Then
             Application.Quit
            End If
        Else
            If Not txtTelefono.Text = "" Then
                valaux = MsgBox("Existen datos sin guardar, desea salir? ", 1, "AVISO")
                 ejemplo
                If valaux = 1 Then
                    Application.Quit
                End If
            Else
                 If Not txtDireccion.Text = "" Then
                   valaux = MsgBox("Existen datos sin guardar, desea salir? ", 1, "AVISO")
                        ejemplo
                   If valaux = 1 Then
                       Application.Quit
                   End If
                    Else
                       Application.Quit
                End If
            End If
        End If
    End If
End Sub
Private Sub txtcedula_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = SoloNumeros(KeyAscii)
End Sub
Function SoloNumeros(ByVal KeyAscii As Integer) As Integer
    'permite que solo sean ingresados los numeros, el ENTER y el RETROCESO
    If InStr("0123456789/-", Chr(KeyAscii)) = 0 Then
    SoloNumeros = 0
    MsgBox "PENDEJO SOLO NUMEROS"
    Else
    SoloNumeros = KeyAscii
    End If
    ' teclas especiales permitidas
    If KeyAscii = 8 Then SoloNumeros = KeyAscii ' borrado atras
    If KeyAscii = 13 Then SoloNumeros = KeyAscii 'Enter
End Function
Private Sub txtDireccion_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 KeyAscii = Asc(StrConv(Chr(KeyAscii), vbUpperCase))
End Sub
Private Sub txtNombre_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0
    KeyAscii = Asc(StrConv(Chr(KeyAscii), vbUpperCase))
End Sub
Private Sub txtTelefono_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = SoloNumeros(KeyAscii)
End Sub
Private Sub UserForm_Load()
    Me.keypreview = True
End Sub
Private Sub UserForm_Click()
SW = True
End Sub
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyF1 Then
        MsgBox "guardar"
    End If
End Sub
Public Sub ejemplo()
    If txtcedula.Text = "" Then
        txtcedula.SetFocus
    Else
      If txtNombre.Text = "" Then
           txtNombre.SetFocus
        Else
        If txtTelefono.Text = "" Then
                txtTelefono.SetFocus
            Else
                If txtDireccion.Text = "" Then
                    txtDireccion.SetFocus
                End If
            End If
        End If
    End If
End Sub
Sub eliminaRegistro()
    RangoCalif = "A1:A50"
    Set RangoCalif = Range(RangoCalif)
    For LaCelda = 1 To RangoCalif.Rows.Count
    If RangoCalif.Cells(LaCelda).Value = valor1 And Not IsEmpty(RangoCalif.Cells(LaCelda).Value) Then
    RangoCalif.Cells(LaCelda).EntireRow.Delete
    LaCelda = LaCelda - 1
    End If
    Next
End Sub
no me funciona sera que puedo mandarte la macro por correo y la revisas es que es para un proyecto universitario gracias
El correo lo encontrarás en mi sitio. No olvides recordarme el motivo de la consulta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas