Traer cabeceras de una base de datos a un listbox en excel

Como ya lo indica el tema, como puedo traer a un listbox en excel los encabezados de una tablasea esta desde access o sql server, que cargue al listbox no solo los datos sino también las cabeceras, a través de este código he logrado hacerlo en excel pero esta vez quiero traer los encabezados a un listbox y no a una hoja de excel muchos saludos y gracias de antemano

Sub ABONO()

Dim I As Integer
Conectar
Call PRUEBA

With Hoja1
If Rs.RecordCount > 0 Then

For I = 0 To Rs.Fields.Count - 1

.Cells(6, 1 + I) = Rs.Fields(I).Name

Next I

.Cells(7, 1).CopyFromRecordset Rs

End If

End With

CONEXION_ACCES.Cerrar_Rs

End Sub

Sub PRUEBA()

Set Rs = New ADODB.Recordset

SQL = " select AB.ID AS [REG N°],A.CEDULA,A.NOMBRES,C.CURSO,C.COSTO,Sum(AB.MONTO) AS ABONO,C.COSTO-ABONO AS SALDO from (TB_ABONOS AB" & _
" inner join TB_ALUMNOS A on AB.ID_A=A.ID) inner join TB_CURSOS C on AB.ID_C=C.ID group by AB.ID,A.CEDULA,A.NOMBRES,C.CURSO,C.COSTO"

Rs.Open SQL, Cnn, 1, 1

End Sub

2 Respuestas

Respuesta
1

Ya que tienes los datos en la hoja1, carga los datos en el listbox utilizando la propiedad rowsourse del listbox

También tienes que poner la propiedad del listbox de columnheads = true

Por ejemplo en el evento activate de tu userform:

uf = hoja1.range("A" & rows.count).end(xlup).row

uc = hoja1.cells(6, columns.count).end(xltoleft).column

Rango = hoja1.range("A7", hoja1.cells(uf, uc)).address

listbox1.columnheads = true

Listbox1.rowsource = hoja1.name & "!" & rango

----

En el ejemplo, el rango empieza en la fila 7, según tu código en la fila 7 estás poniendo los datos y en la fila 6 los encabezados. Entonces al activar los encabezados, rowsource toma la fila anterior a la de la carga para ponerlos como encabezados.

Avísame cualquier duda, no olvides valorar la respuesta. Sal u dos

¡Gracias! señor dante,esta muy bueno el código ,lo que no quería es traer los datos a una hoja sino que cargara los datos directamente al listbox,por ejemplo si yo hago una consulta me cargue la cabecera de esos datos al listbox también,se puede hacer o la única manera es como usted lo sugiere muchos saludos

Puedes cargar los datos directamente al listbox pero solamente los datos, para cargar las cabeceras tendrás que utilizar la propiedad columnheads y ésta solamente se puede cargar desde una hoja.

Este es un ejemplo:

Private Sub UserForm_Activate()
    bd = ThisWorkbook.Path & "\base.xlsx"
    'Set conexion = New ADODB.Connection
    'Set datos = New ADODB.Recordset
    Set conexion = CreateObject("adodb.connection")
    Set datos = CreateObject("adodb.recordset")
    conexion.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & bd & "; Extended Properties=""Excel 12.0; HDR=YES"";"
    Sql = "SELECT * FROM [clientes$] order by [nombres]"
    datos.Open Sql, conexion
    With Me.LSTCLIENTES
        .Clear
        .ColumnCount = datos.Fields.Count
        .ColumnWidths = "390;70;225;50;50;50;65;50;50;50;50;50;50;50;50;50;50;50;"
        .Column = datos.GetRows
    End With
End Sub

En el ejemplo hago un select a una base datos y lo pongo en el objeto datos,  después cargo los registros de datos directamente en el listbox.


Pero solamente carga registros. Si quisieras cargar los encabezados, otra opción sería cargar los encabezados como un registro al inicio de tu base de datos y después cargar los registros en el listbox, los encabezados de aparecerían como un registro más al principio de todos los registros.

.

Otra opción es que en tu userform pongas un label por cada encabezado y después cargas los registros al listbox.

.

Lo más práctico y con encabezados es cargar los datos a la hoja y después cargar de la hoja al listbox.

Sal u dos

¡Gracias! Lo voy a poner en practica a ver cual de ellos es la mejor vía, estoy muy agradecido por su prestarme un poco de su tiempo y responder, saludos y bendiciones para usted también

Respuesta
1

Puedes usar la propiedad ROWSOURCE del listbox

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas