¿Cómo cargar datos correctamente en un form al seleccionar un registro desde un listbox para editarlo?

https://drive.google.com/file/d/1B_3b3DTUmH_XUDeIRxb813RWQRkqBNlg/view?usp=sharing 

Saludos expertos, hace algún tiempo "James Bond" me ayudó con el código para llenar un listbox de forma rápida, ahora solicito nuevamente su valioso apoyo para resolver lo siguiente:

Mi objetivo es editar registros directamente desde un listbox, pero al seleccionar el registro y dar click en el botón "modificar" el form (frmEditar) llena los campos con datos diferentes al registro seleccionado; me doy cuenta que ni siquiera pertenecen al criterio de búsqueda dentro del listbox, además de que los datos de los textbox no están en el orden de la tabla.

Nota1: Ya tengo listo los forms.

Nota2: La fila1 de mi hoja excel la intente eliminar por está de más, pero no puedo hacerlo porque me arroja un error que dice "Falta de memoria en su dispositivo", si pueden hacerlo se los agradezco.

Nota3: Adjunto al principio el enlace de mi archivo para su revisión.

1 Respuesta

Respuesta
1

De entrada tu archivo esta dañado, tarda demasiado en abrir, la macro que le anexe (que la he probado en archivos con más de 1000000 registros y funciona rápido) en tu caso es lentísima y encima hace que se cierre el Excel, cuando quiero copiar tu información a un nuevo archivo aparte que se tarda mucho al final no la copia y fuerza un cierre del excel, algo tiene que dificulta trabajar con el

Hola James Bond, sí,  la macro carga sin problemas todos los registros en el listbox y de forma muy rápida; ya he copiado los datos en un archivo nuevo, ojala puedas ayudarme con la carga de los datos en el frmEditar para poder modificar, comparto el enlace.

Gracias de antemano, saludos.

https://drive.google.com/file/d/15Ozz2In9PdJikQT03iSdRGNmRNZD720G/view?usp=sharing 

Este es el resultado de la macro, se tarda un poco tu archivo tiene algo que hace lenta la macro, supongo que son los NA, tecleas una letra y esta va filtrando conforme tecleas, como no mencionaste sobre que columna se hará el filtro incluí un combobox para seleccionar el campo sobre el que hará el filtro

esta otra pantalla es el resultado de la macro para modificar datos, una vez que selecciones un registro del listbox y abras el formulario 2 los datos se cargaran en automático y una vez que termines de modificar estos se copiaran a la fila asignada

estas son las macros para cargar datos

Option Base 1
Private Sub CC_Nombre_Change()
End Sub
Private Sub CommandButton1_Click()
frmEditar.Show
End Sub
Private Sub Label1_Click()
End Sub
Private Sub ListBox1_Click()
Set DATOS = Range("DATOS")
VALOR = ListBox1.Value + 1
DATOS.Rows(VALOR).Name = "SECUENCIA"
End Sub
Private Sub UserForm_Initialize()
Set DATOS = Sheets("datos").Range("A1").CurrentRegion
Set funcion = WorksheetFunction
With DATOS
    .Name = "datos"
    With ListBox1
        .ColumnCount = DATOS.Columns.Count
        .ColumnHeads = False
    End With
    matriz = .Rows(1)
    ComboBox1.List = funcion.Transpose(matriz)
End With
End Sub
Private Sub txtFiltro1_Change()
Dim funcion As WorksheetFunction
Set origen = Range("datos")
Set funcion = WorksheetFunction
VALOR = txtFiltro1
filas = origen.Rows.Count
columnas = origen.Columns.Count
col = ComboBox1.ListIndex + 1
If Trim(VALOR) = "" Then
    ListBox1.Clear
   Exit Sub
End If
cuenta = funcion.CountIf(origen.Columns(col), "*" & VALOR & "*")
ListBox1 = Clear
ReDim matriz(cuenta, columnas): X = 1
For I = 1 To filas
     strg = origen.Cells(I, col).Value:
   If UCase(strg) Like "*" & UCase(VALOR) & "*" Then
    For j = 2 To columnas
        matriz(X, j - 1) = origen.Cells(I, j - 1)
    Next j
    X = X + 1
    End If
Next I
With C
        With ListBox1
            .List = matriz
            Label3 = .ListCount & " COINCIDENCIAS ENCONTRADAS"
        End With
    End With
End Sub

y esta es la macro para el formulario 2

Private Sub CommandButton1_Click()
Set INFO = Range("SECUENCIA")
C = INFO.Columns.Count
For I = 2 To C
    INFO.Cells(1, I) = frmEditar.Controls("TEXTBOX" & I - 1)
Next I
End Sub
Private Sub CommandButton2_Click()
End
End Sub
Private Sub UserForm_Activate()
Set INFO = Range("SECUENCIA")
C = INFO.Columns.Count
For I = 2 To C
    DATO = INFO.Cells(1, I)
    On Error Resume Next
    frmEditar.Controls("TEXTBOX" & I - 1) = DATO
    On Error GoTo 0
Next I
End Sub
Private Sub UserForm_Click()
End Sub

Olvide mencionar tienes que ingresar un consecutivo insertando una columna en la celda A sino la macro te dará error, esto lo hice para ahorrarme líneas de programación a la hora cargar y modificar registros

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas