Corregir macro para que pegue los datos modificados en base de datos.

He tratado de buscarle el simple error a esta macro pero solo con el apoyo de expertos lograré la solución. Es una agenda de nombres y datos generales por municipio; uno en cada hoja. Con el CmdBtn1, ingresa perfectamente los datos y ordena por nombre; con el CmdBtn2, se consulta y carga bien los datos al formulario, y con el CmdBtn3, es para modificar algún dato. El apoyo es corregir esta última macro para que no repita el nombre En este caso se necesita que solo lo encime en la misma línea ya con él o los datos corregidos. Para mayor comprensión te anexo la macro para ingresar los datos y para modificar.

Muchas gracias por las atenciones.

Ref: 8-01-2015

Private Sub CommandButton1_Click() 'INGRESAR DATOS, YA QUEDÓ LISTA, NO MOVER

Application.ScreenUpdating = False

Dim Mp As String

Mp = ComboBox1.Value

'On Error GoTo sinhoja

Sheets(Mp).Unprotect   'DESPROTEGE LA HOJA

Sheets(Mp).Activate

Range("b65536").End(xlUp).Select

On Error GoTo 0

ActiveSheet.Range("a1").Select

Range("b1").Select

 Range("b" & Cells.Rows.Count).End(xlUp).Offset(1).Select

'xxxxxxxx

ActiveCell.Offset(0, 0).Select

 ActiveCell = ComboBox2      ' Nombre

 ActiveCell.Offset(0, 1).Select

 ActiveCell = TextBox1       ' Apellidos

 ActiveCell.Offset(0, 1).Select

 ActiveCell = TextBox2       ' Dirección

 ActiveCell.Offset(0, 1).Select

 ActiveCell = Val(TextBox3)  ' Telefono

 ActiveCell.Offset(0, 1).Select

 ActiveCell = TextBox8       ' Mail

 ActiveCell.Offset(0, 1).Select

 ActiveCell = ComboBox3      ' Proveedor de:

 ActiveCell.Offset(0, 1).Select

 ActiveCell = ComboBox4      ' Forma de pago

   ' ActiveCell.Offset(0, 1).Select

 ActiveCell.Offset(0, 1).Select

 ActiveCell = Val(TextBox4)  ' Dia

 ActiveCell.Offset(0, 1).Select

 ActiveCell = Val(TextBox5)  ' Mes

 ActiveCell.Offset(0, 1).Select

 ActiveCell = Val(TextBox6)  ' Año

 ActiveCell.Offset(0, 1).Select

 ActiveCell = TextBox7  ' Comentarios

TextBox1.Text = ""

TextBox2.Text = ""

TextBox3.Text = ""

ComboBox2 = ""

TextBox4.Text = ""

TextBox5.Text = ""

TextBox6.Text = ""

TextBox7.Text = ""

TextBox8.Text = ""

'TextBox9.Text = ""

ComboBox3 = ""

ComboBox4 = ""

  Call Ordenar 'con ésta instrucción, llamo a la macro para ordenar la agenda.

ComboBox1.SetFocus

Application.ScreenUpdating = True

Sheets(Mp).Protect

End Sub

Private Sub CommandButton3_Click()     'Modificar

Application.ScreenUpdating = False

'xxxxxxx

Dim Mp As String

Mp = ComboBox1.Value

Sheets(Mp).Unprotect   'DESPROTEGE LA HOJA

Sheets(Mp).Activate

On Error GoTo 0

Range("b" & Cells.Rows.Count).End(xlUp).Offset(1).Select

ComboBox2.Value = ComboBox2

ActiveCell.Offset(0, 0).Value = ComboBox2  ' nombre

ActiveCell.Offset(0, 1).Value = TextBox1  ' Apellidos

ActiveCell.Offset(0, 2).Value = TextBox2  ' Dirección

ActiveCell.Offset(0, 3).Value = TextBox3  ' Telefonos

ActiveCell.Offset(0, 4).Value = TextBox8  ' Mail

ActiveCell.Offset(0, 5).Value = ComboBox3

ActiveCell.Offset(0, 6).Value = ComboBox4

ActiveCell.Offset(0, 7).Value = Val(TextBox4)  ' Dia

ActiveCell.Offset(0, 8).Value = Val(TextBox5)  ' Mes

ActiveCell.Offset(0, 9).Value = Val(TextBox6)  ' Año

ActiveCell.Offset(0, 10).Value = TextBox7       ' Comentarios

'ActiveCell.Offset(0, 10).Value = TextBox9

Call Ordenar

ComboBox2 = ""               'Limpia el combobox2

Dim respuesta As Integer, ctr As Control

respuesta = MsgBox("Datos modificados", vbInformation, "AVISO")

If respuesta = vbOK Then

For Each ctr In Me.Controls

If TypeOf ctr Is MSForms.TextBox Then

ctr = ""

End If

Next ctr

ComboBox2.SetFocus

Exit Sub

End If

'Hoja1.Protect

Application.ScreenUpdating = True

'Hoja3.Select

'Mp.Protect

End Sub

1 Respuesta

Respuesta
1

Envíame tu archivo y me explicas con un ejemplo qué es lo que debo hacer y qué es lo que quieres que haga la macro.

Mil Disculpas... te envié el archivo el día 17 del presente... muchas gracias...

Te anexo la macro con los cambios

Private Sub CommandButton3_Click()     'Modificar
'Dim rango
Dim Mp As String
Mp = ComboBox1.Value
'On Error Resume Next
Application.ScreenUpdating = False
'Worksheets("Mp").Unprotect
'Mp = ComboBox1.Value
'Sheets("Mp").Activate
    Set h1 = Sheets(ComboBox1.Value)
    h1.Select
    Set b = h1.Columns("B").Find(ComboBox2, LookAt:=xlWhole)
    If Not b Is Nothing Then
        h1.Unprotect
        h1.Cells(b.Row, "C") = TextBox1  ' Apellidos
        h1.Cells(b.Row, "D") = TextBox2  ' Dirección
        h1.Cells(b.Row, "E") = TextBox3  ' Telefonos
        h1.Cells(b.Row, "F") = TextBox8  ' Mail
        h1.Cells(b.Row, "G") = ComboBox3
        h1.Cells(b.Row, "H") = ComboBox4
        h1.Cells(b.Row, "I") = Val(TextBox4)  ' Dia
        h1.Cells(b.Row, "J") = Val(TextBox5)  ' Mes
        h1.Cells(b.Row, "K") = Val(TextBox6) ' Año
        h1.Cells(b.Row, "L") = TextBox7       ' Comentarios
    'ActiveCell.Offset(0, 10).Value = TextBox9
        Call Ordenar
        ComboBox2 = ""               'Limpia el combobox2
        h1.Protect
    End If
    Dim respuesta As Integer, ctr As Control
    respuesta = MsgBox("Datos modificados", vbInformation, "AVISO")
    If respuesta = vbOK Then
        For Each ctr In Me.Controls
            If TypeOf ctr Is MSForms.TextBox Then
                ctr = ""
            End If
        Next ctr
        ComboBox2.SetFocus
        Exit Sub
    End If
    'Hoja1.Protect
    Worksheets("Mp").Protect
    Application.ScreenUpdating = True
    Hoja3.Select
    'h. Protect
    'Next
End Sub

Saludos.Dante Amor

No olvides valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas