Problema con listBox al consultar datos...

Tengo un inconveniente el cual no pude solucionar, debe ser una pavada, un pequeño error de código, pero no logre resolverlo.

Tengo una base de datos la cual con un combobox me llena una serie de ListBox, el problema es que el listBox no mantiene el tamaño definido, sino que se achica con cada consulta.

El Código que carga el ListBox es:

 Workbooks("dgr"). Activate
    Set l2 = Workbooks("dgr").Worksheets("ListadoDeudas")
    strTabla = "DeudaDGR"
    On Error Resume Next
    l2.Names("DeudaDGR").Delete
    s = Application.WorksheetFunction.CountA(l2.Range("A:A")) - 2
    Set rngMirango2 = l2.Range("A1").Offset(1, 0).Resize(Application.WorksheetFunction.CountA(l2.Range("A:A")) - 3, 4)
    rngMirango2.Name = strTabla
    intColumnas = rngMirango2.Columns.Count
    With UserForm3.ListBoxx1
        .ColumnCount = intColumnas
        .ColumnWidths = "70 pt;55 pt;60 pt;45 pt"
        .ColumnHeads = True
    End With
    UserForm3.ListBoxx1.RowSource = strTabla
    UserForm3.ListBoxx1.Height = 217.55
    On Error GoTo 0
UserForm3.ListBoxx1.Visible = True
UserForm3. LabelDGR. Visible = True

También sucede, que tengo todos los códigos y UserForm en un Archivo ("Control") y los datos en dos archivos separados de excel ("dgr") y ("renatea"), al cargar el ListBox, tengo que poner si o si "Workbooks("dgr").Activate" porque sino no me carga el ListBox.

1 respuesta

Respuesta
1

 H  o l a  :

Te anexo el código para que puedas consultar el rango sin activar el libro "dgr"

    Set l2 = Workbooks("dgr")                   'Establece libro en l2
    Set h2 = l2.Worksheets("ListadoDeudas")     'establece hoja de l2 en h2
    strTabla = "DeudaDGR"
    On Error Resume Next
    h2.Names(strTabla).Delete
    On Error GoTo 0
    '
    s = Application.WorksheetFunction.CountA(h2.Range("A:A")) - 3
    Set rngMirango2 = h2.Range("A1").Offset(1, 0).Resize(s, 4)
    rngMirango2.Name = strTabla
    With UserForm3.ListBoxx1
        .ColumnCount = rngMirango2.Columns.Count
        .ColumnWidths = "70 pt;55 pt;60 pt;45 pt"
        .ColumnHeads = True
        .RowSource = "[" & l2.Name & "]" & h2.Name & "!" & h2.Range(strTabla).Address
        .Height = 217.55
        .Visible = True
    End With
    UserForm3. LabelDGR. Visible = True

Hice varias pruebas y el listbox no se achica, tal ves debas establecer el tamaño del listbox al iniciar el formulario, por ejemplo :

Private Sub UserForm_Activate()
    With UserForm3.ListBoxx1
        .Height = 217.55
    End With
End Sub


'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

La verdad es que no se por que razón se achica el formulario, el tamaño del mismo es el que tiene desde la edición.

Solo los ListBox que se cargan los datos se achican, ya que hay otros que si no tienen datos se deshabilitan y esos no se modifica el tamaño, por alguna razón al cambiar de datos me cambia el tamaño del mismo, ignorando el tamaño que se le asigna en el código. ¿Por qué podría ser?

Dante Amor

Dante, descubrí el problema, resulta que seguido a ese código, cambio el color de fondo y del borde del listbox dependiendo del valor del mismo, y eso incurre en que me cambia el tamaño del listbox, o si le agrego al final del código, que me establezca el tamaño, no me cambia el tamaño del listbox pero si me agranda el tamaño del texto, no se a que se debe, el código es el siguiente:

    Set l2 = Workbooks("dgr")
    Set h2 = l2.Worksheets("ListadoDeudas")
        strTabla = "DeudaDGR"
    On Error Resume Next
        h2.Names(strTabla).Delete
    On Error GoTo 0
    Set rngMirango2 = h2.Range("A1").Offset(1, 0).Resize(Application.WorksheetFunction.CountA(h2.Range("A:A")), 4)
        rngMirango2.Name = strTabla
    With UserForm3.ListBoxx1
        .ColumnCount = 4
        .ColumnWidths = "70 pt;55 pt;60 pt;45 pt"
        .ColumnHeads = True
        .RowSource = "[" & l2.Name & "]" & h2.Name & "!" & h2.Range(strTabla).Address
        .Visible = True
    End With
    UserForm3.LabelDGR.Visible = True
'Inhabilita el control en caso de no poseer registros
    If h2.Range("A2") = "No Posee" Then
        UserForm3.ListBoxx1.Enabled = False
        UserForm3.LabelDGR.Enabled = False
        UserForm3.Label105.Enabled = False
        UserForm3.Label106.Enabled = False
        UserForm3.ListBoxx1.BackColor = RGB(222, 222, 222)
        UserForm3.Label105.BackColor = RGB(222, 222, 222)
        UserForm3.Label106.BackColor = RGB(222, 222, 222)
        UserForm3.ListBoxx1.BorderColor = RGB(222, 222, 222)
        UserForm3.Label105.BorderColor = RGB(222, 222, 222)
        UserForm3.Label106.BorderColor = RGB(222, 222, 222)
    Else
        UserForm3.ListBoxx1.Enabled = True
        UserForm3.LabelDGR.Enabled = True
        UserForm3.Label105.Enabled = True
        UserForm3.Label106.Enabled = True
        UserForm3.ListBoxx1.BackColor = RGB(255, 255, 255)
        UserForm3.Label105.BackColor = RGB(243, 243, 243)
        UserForm3.Label106.BackColor = RGB(243, 243, 243)
        UserForm3.Label105 = Format(h2.Range("R2"), "$ #,##0.00")
        If h2.Range("R2") < 0 Then
            UserForm3.ListBoxx1.BorderColor = RGB(251, 59, 59)
            UserForm3.Label105.BorderColor = RGB(251, 59, 59)
            UserForm3.Label106.BorderColor = RGB(251, 59, 59)
        Else
            UserForm3.ListBoxx1.BorderColor = RGB(1, 187, 19)
            UserForm3.Label105.BorderColor = RGB(1, 187, 19)
            UserForm3.Label106.BorderColor = RGB(1, 187, 19)
        End If
    End If

No se cual sera el problema, o que estoy haciendo mal.

Si no posee datos, me establece en gris para identificar que esta deshabilitado el listbox, pero si tiene, me establece en color blanco el listBox nuevamente con la siguiente línea "UserForm3.ListBoxx1.BackColor = RGB(255, 255, 255)"

Ya probé todas las posibilidades, si tiene datos, si no tiene datos, si R2 es menor a 0 ; y en ninguna se modifica el tamaño del listbox.

Te recomiendo que pruebes una por una, si cambiar el color, ya que todo te funcione bien, agregas un color, luego pruebas, luego otro color, y así sucesivamente, hasta que detectes en dónde tienes la falla.

Tal vez sea por la versión de excel, también puede ser por la configuración de colores que tienes en tu monitor, es probable que no detecte el color que quieres establecer, utiliza colores estándar.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Claro Dante, lo que pasa es que solo la línea "UserForm3.ListBoxx1.BackColor = RGB(255, 255, 255)" me tira error, y es que en esa línea establezco el color de fondo en blanco predeterminado.

Debido a que si no tiene datos, el código establece el color gris, pero si tiene datos y no agrego esa línea, no cambia el color gris al blanco predeterminado y entonces no se ve nada...

Entonces con esta línea le coloco el color blanco predeterminado.

No entiendo porque me tira errores esa línea, o como se puede hacer para cambiar el color a blanco de otra manera o establecer el color predeterminado.

Puntualmente esa línea me trae errores...

Cambia por esta, es el color predeterminado:

UserForm3.ListBoxx1.BackColor = &H80000005

Prueba también con esta:

UserForm3. ListBoxx1. BackColor = vbWhite

Si sigues con el problema tienes que poner el mensaje de error que te envía.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Mira, no se  cual era el problema, lo solucione colocando el código que me modifica el color al comienzo y después que me cargue el ListBox...Así que nunca sabre cual era realmente el problema!...Gracias Dante

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas