Modificar registro desde UserForm según fila en hoja

Tengo una hoja llamada "CONTABILIDAD", en la cual tengo miles de registros, los cuales corresponden a registros contables, en la columna B de dicha hoja se guarda el numero del documento, el cual se repite tantas filas como registros tenga el asiento contable; cuando necesito modificar un registro contable, lo hago mediante un UserForm, en el cual en una casilla indico el numero de documento que deseo modificar, y en un ListBox se me muestran filtrados los registros que tiene el documento indicado; al seleccionar el registro con doble clic en el ListBox, dicho registro pasa a unos TextBox, y ahí modifico el campo que necesito, y luego al guardar el cambio el registro en la hoja se debe modificar con el cambio hecho en el formulario, el problema que tengo es que si mi registro 4 tiene asientos contables, y yo modifico el ultimo, al guardar el cambio, este pasa a la fila No. 4 de la hoja, es decir no se ubica en el numero de fila en que realmente está en la hoja, y ello hace que el cambio modifique una fila que no corresponde, por ello no sé si me pueden colaborar indicándome como puedo incluir una instrucción que haga que la modificación se haga exactamente en la fila donde está guardado el registro seleccionado. La macro es la siguiente:

Private Sub cmdSeleccionarC_Click()

'guarda información en la hoja

'If COMBOBOX2 <> "" Then COMBOBOX3 = COMBOBOX2 & " " & TextBox9

If TextBox8 = "" Then

MsgBox "No puedes dejar el campo Cliente vacío"

CommandButton2.SetFocus

Exit Sub

End If

If TextBox19 > 0 And TextBox22 > 0 Then

MsgBox "No puede ingresar débitos y créditos a la vez"

End If

If clienvo = 1 Then

fincl = Sheets("CONTABILIDAD").Range("A1048576").End(xlUp).Row ' + 1      'ALTA

Sheets("CONTABILIDAD").Cells(fincl, 8) = Val(ComboBox3)        'cc

End If

Application.ScreenUpdating = False

Sheets("CONTABILIDAD").Select

ActiveSheet. Unprotect "MICLAVE"

'paso el combobox3 a la fila M1

Sheets("CONTABILIDAD").Range("M1") = ComboBox2

'pasar datos de los textbox a la hoja

'paso el dato fecha, y lo valido para que quede en formato correcto (textbox8)

Sheets("CONTABILIDAD").Cells(fincl, 1) = CDate(Format(TextBox8.Value, "dd/mm/yyyy"))       'fecha

Sheets("CONTABILIDAD").Cells(fincl, 2) = TextBox23       'documento No

Sheets("CONTABILIDAD").Cells(fincl, 6) = ComboBox2        'cuenta

Sheets("CONTABILIDAD").Cells(fincl, 7) = TextBox9        'concepto

Sheets("CONTABILIDAD").Cells(fincl, 8) = ComboBox3       'nit

Sheets("CONTABILIDAD").Cells(fincl, 9) = TextBox24       'tercero

Sheets("CONTABILIDAD").Cells(fincl, 10) = TextBox19 * 1     'debito

Sheets("CONTABILIDAD").Cells(fincl, 11) = TextBox22 * 1     'credito

'valido pesos

TextBox19 = Format(TextBox19, "$ #,##0")

TextBox22 = Format(TextBox22, "$ #,##0")

'ComboBox3 = Format(ComboBox3, "@")

'TextBox8 = Format(TextBox8, "dd/mm/yyyy;@")

'TextBox8 = CDate(Format(TextBox8.Value, "dd/mm/yyyy"))

'escribo formulas en celdas de cuentas

Sheets("CONTABILIDAD").Range("M2").Select

    ActiveCell.FormulaR1C1 = "=+CONCATENATE(R[-1]C[1],"" "",R[-1]C[4])"

    Range("N2").Select

    ActiveCell.FormulaR1C1 = "=+CONCATENATE(R[-1]C[1],"" "",R[-1]C[4])"

    Range("O2").Select

    ActiveCell.FormulaR1C1 = "=+CONCATENATE(R[-1]C[1],"" "",R[-1]C[4])"

'paso el dato de M2 a columna c

Sheets("CONTABILIDAD").Cells(fincl, 3) = Range("M2")       'clase

Sheets("CONTABILIDAD").Cells(fincl, 4) = Range("N2")       'grupo

Sheets("CONTABILIDAD").Cells(fincl, 5) = Range("O2")       'cuenta

Sheets("CONTABILIDAD").Select

ActiveSheet.Protect "MICLAVE"

'limpieza

Call limpiaform

ind = 0

Call llenalistas

ind = 0

ver = 0

TextBox8.Enabled = True

clienvo = 0

Unload Me

ActiveWorkbook.Save

Sheets("CONTABILIDAD").Select

End Sub

1 respuesta

Respuesta
1

Cuando haces el filtro, es decir, pusiste esto:

"y en un ListBox se me muestran filtrados los registros que tiene el documento indicado"

Cuando estás llenando el listbox, en una columna del listbox tienes que almacenar el número de fila del registro que estás cargando en el listbox.

Y cuando guardas cambios, tienes que obtener el número de fila del listbox.

Por ejemplo, buscas el número de documento 5000012345, ese número está en las filas 23, 24, 25, 26 y 27.

Entonces cuando cargas en el listbox, tienes algo como esto

Listbox1. Additem cells(fila, "A")
Listbox1. List(listbox1.listcount -1, 1) = cells(fila, "B")
Listbox1. List(listbox1.listcount -1, 2) = cells(fila, "C")
Listbox1. List(listbox1.listcount -1, 3) = cells(fila, "D")
listbox1.list(listbox1.listcount -1, 4) = fila  'aquí va la fila

Luego cuando vas a modificar en la hoja:

fila = listbox1.list(listbox1.listindex, 4)

Entonces ya tienes la fila para modificar los datos.


Si tienes dificultades, envíame tu archivo para actualizar el código.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “LORENA706” y el título de esta pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas