Mostrar cabeceras o títulos en ListBox con VBA Excel al cargar base datos externa mediante SQL y ADO

+ Dante Amor

Espero me puedan ayudar con la siguiente interrogante que tengo:

Con el código que se muestra en la parte inferior cargo en el listbox, donde activo las cabeceras y las dimensiones de cada columna que se muestran sin problemas, el problema radica en que no aparece los encabezados o títulos de cada uno ya que están blanco, ya lo he tratado con Rowsource pero no consigo hacerlo.

La pregunta es como puedo mostrar los títulos que están la base externa, o que me falta adicionar a este código para lograrlo.

Muchas gracias desde ya por su ayuda.

Set conexion = New ADODB.Connection
Set datos = New ADODB.Recordset
bd = ThisWorkbook.Path & Application.PathSeparator & "base.xlsx"
conexion.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & bd & "; Extended Properties=""Excel 12.0; HDR=YES"";"
sql = "SELECT * FROM [usuarios$]"
datos.Open sql, conexion, adOpenStatic
    With Me.LSTCLIENTES
        .Clear
        .ColumnCount = datos.Fields.Count
        .ColumnWidths = "390;70;225;50;50;50;"
        .Column = datos.GetRows
        .ColumnHeads = True
    End With
conexion.Close
datos.Close
Set datos = Nothing
Set conexion = Nothing

1 respuesta

Respuesta
1

H o l a:

Estuve revisando la documentación sobre la carga de los encabezados y al parecer solamente se puede con la propiedad RowSource. Lo intenté con el sql que pusiste pero sin éxito.

Te el código para que puedas cargar los encabezados:

 Workbooks.Open "base.xlsx"
    With LSTCLIENTES
        .ColumnHeads = True
        .ColumnWidths = "390;70;225;50;50;50;"
        .ColumnCount = 6
        .RowSource = "usuarios"
    End With

Entiendo que quieres cargar el listbox manteniendo tu libro base cerrado, pero quizás esa sea la razón por la que no se pueden cargar los encabezados, ya que los encabezados dependen del fuente, y la fuente debe permanecer en memoria.

Cuando termines de utilizar el formulario, puedes cerrar el libro:

Workbooks("base.xlsx").Close

Dante

Agradezco tu tiempo que le has dado a mi pregunta.

En cuanto a tu respuesta, se me ocurre una idea a ver que opinas:

1. Que pasaría si solo coloco solo los encabezados en una hoja del archivo principal para de ahí llamar con el Rowsource los encabezados y títulos y así mantener el archivo abierto siempre.

2. Al mismo tiempo se podría llamar la base externa con SQL y ahí no se si es posible las 2 cosas en el mismo Listbox . Siendo así cual sería el código final o de plano es imposible?

Quedo muy atento a tus comentarios, Saludos

Si utilizas RowSource para cargar los encabezados, no puedes utilizar las propiedades o métodos List, Column, Additem, clear, ya que con rowsource los datos los está leyendo de la hoja, los otros métodos se llevan la información a la memoria. En conclusión, o utilizas un método u otro.

¡Gracias!

Por tu tiempo nuevamente Dante, creo que al final omitiré los encabezados que son algo intuitivos de cierta forma.

Saludos

Puedes poner los encabezado con label fuera del listbox

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas