¿Cambiar valor de Checkbox según me muevo en Listbox?

Quisiera pedir su valiosa colaboración, ya que tengo un problema con una macro que estoy intentando hacer en Excel.

El punto es que tengo un userform, el cual posee un listbox dicho listbox lo cargo cuando inicio el form con el rowsource de una hoja del mismo libro, ahora bien, abajo de ese mismo list tengo varios checkbox.

Lo que hago es que cada que me muevo, traigao automáticamente los valores (1 o 0) que tengo en unas columnas de mi hoja y cada que marco un checkbox cambio el estatus de esa celda.

El problema que tengo es que cada que hago esto, el valor me lo resetea solo... Es decir, si lo marco actualiza la celda, pero cuando pierde el foco la línea del listbox se resete otra vez a cero.

Voy a compartir el código por acá, para que se hagan una idea:

'-- Aquí cargo el source para mi listbox

Private Sub UserForm_Initialize()
 ListBox1.ColumnCount = 5
ListBox1.ColumnWidths = "170;80;80;80;80"
ListBox1.ColumnHeads = False
ListBox1.RowSource = "Datos"

'-- Enlisto mis los valores que tiene la hoja de Excel, para pasarlo al checkbox

Private Sub ListBox1_Click()
With Me.ListBox1
  Me.CheckBox5.Value = .List(.ListIndex, 9)
End With

'-- Cuando doy click en el checkbox hago el cambio en la celda

Private Sub CheckBox5_Click()

nFila = ListBox1.ListIndex + 1

  If CheckBox5.Value = True Then
    Worksheets("Pool").Range("J" & nFila).Value = 1
 End If
  If CheckBox5.Value = False Then
    Worksheets("Pool").Range("J" & nFila).Value = 0
  End If

NFila = me sirve para saber que celda de mi hoja voy a actualizar.

Igualmente no se por que no esta actualizandome los valores del check, es decir, si me muevo de un valor que tiene desmarcado el checkbox, y paso a otro que si lo tiene no hace el cambio, como que no refresca en el momento el listbox o el rawsource.

Podrían echarme la mano con esto.

Si tienen dudas, favor avisarme para ser más explicito.

1 respuesta

Respuesta
1

h o l a:

Envíame tu archivo para revisarlo.

Mi correo [email protected]

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

Hola, te acabo de enviar el Excel.

Cualquier duda, me avisas.

Gracias anticipadas.

Atentamente.

H o  l a:

Te anexo todo el código para prender y apagar los checks

Dim h2
Dim cargando
'
'Por.Dante Amor
Private Sub CheckBox1_Click()
    CambiarBox CheckBox1, "F"    'ENVIADA?...
End Sub
Private Sub CheckBox2_Click()
    CambiarBox CheckBox2, "G"    'RECIBIDA?...
End Sub
Private Sub CheckBox3_Click()
    CambiarBox CheckBox3, "H"    'ACEPTADA?...
End Sub
Private Sub CheckBox4_Click()
    CambiarBox CheckBox4, "I"    'PROGRAMADA?...
End Sub
Private Sub CheckBox5_Click()
    CambiarBox CheckBox5, "J"    'PAGADA?...
End Sub
'
Sub CambiarBox(nCheck As Object, col As String)
'Por.Dante Amor
    If cargando Then Exit Sub
    cargando = True
    If ListBox1.ListIndex < 0 Then
        If nCheck Then nCheck = False Else nCheck = True
        MsgBox "Selecciona un registro"
        cargando = False
        Exit Sub
    End If
    nFila = ListBox1.ListIndex + 2
    nReg = ListBox1.ListIndex
    If nCheck = False Then
        h2.Range(col & nFila).Value = 0
    Else
        h2.Range(col & nFila).Value = 1
    End If
    ListBox1.Selected(nReg) = True
    cargando = False
End Sub
'
Private Sub ListBox1_Click()
'Por.Dante Amor
    If cargando Then Exit Sub
    cargando = True
    With ListBox1
        CheckBox1.Value = .List(.ListIndex, 5)
        CheckBox2.Value = .List(.ListIndex, 6)
        CheckBox3.Value = .List(.ListIndex, 7)
        CheckBox4.Value = .List(.ListIndex, 8)
        CheckBox5.Value = .List(.ListIndex, 9)
    End With
    cargando = False
End Sub
'
Private Sub UserForm_Initialize()
    Application.ScreenUpdating = False
    '-- Copio las Data a otra pagina.
    'Sheets("Data").Select
    Set h1 = Sheets("Data")
    Set h2 = Sheets("Pool")
    u = h1.UsedRange.Rows(h1.UsedRange.Rows.Count).Row
    If u = 1 Then u = 2
    H2.Range("A2:E" & u). ClearContents
    H1.Range("E3:E" & u). Copy h2. Range("A2")
    H1.Range("H3:H" & u). Copy h2. Range("B2")
    H1.Range("R3:R" & u). Copy h2. Range("C2")
    H1.Range("S3:S" & u). Copy h2. Range("D2")
    H1.Range("T3:T" & u). Copy h2. Range("E2")
    'le decimos cuántas columnas tendrá
    ListBox1.ColumnCount = 10
    'que sí que tiene encabezado
    ListBox1.ColumnWidths = "170;80;80;80;80"
    ListBox1.ColumnHeads = True
    'ESTA ES EL CONJUNTO DE CELDAS CON EL NOMBRE DE "DATOS"
    u = h2.UsedRange.Rows(h1.UsedRange.Rows.Count).Row
    ListBox1.RowSource = h2.Name & "!A2:J" & u
    Application.ScreenUpdating = True
End Sub

':)
':)

¡Gracias!

Hola estimado Dante, quisiera decir que tu código me ha servido mucho y que era lo que andaba buscando.

Gracias por el apoyo y termino cerrando este post y agradeciendo la ayuda brindada.

Gracias nuevamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas