Solución:
No. Creo etiquetas sobre el cuadro de lista para que sirvan como encabezados. Podrías pensar que es una verdadera molestia cambiar las etiquetas cada vez que cambia tu lisbox. Tienes razón, es un dolor. Es un fastidio configurar la primera vez, y mucho menos cambios. Pero no he encontrado una mejor manera.
Aquí está mi enfoque para resolver el problema:
Esta solución requiere que agregue un segundo elemento ListBox y lo coloque encima del primero.
Como esto:
Luego, llama a la función CreateListBoxHeader para hacer que la alineación sea correcta y agregar elementos de encabezado.
Resultado:
Código:
Public Sub CreateListBoxHeader(body As MSForms.ListBox, header As MSForms.ListBox, arrHeaders)
' make column count match
header.ColumnCount = body.ColumnCount
header.ColumnWidths = body.ColumnWidths
' add header elements
header.Clear
header.AddItem
Dim i As Integer
For i = 0 To UBound(arrHeaders)
header.List(0, i) = arrHeaders(i)
Next i
' make it pretty
body.ZOrder (1)
header.ZOrder (0)
header.SpecialEffect = fmSpecialEffectFlat
header.BackColor = RGB(200, 200, 200)
header.Height = 10
' align header to body (should be done last!)
header.Width = body.Width
header.Left = body.Left
header.Top = body.Top - (header.Height - 1)
End Sub
Uso:
Private Sub UserForm_Activate()
Call CreateListBoxHeader(Me.listBox_Body, Me.listBox_Header, Array("Header 1", "Header 2"))
End Sub
Estaba viendo este problema en este momento y encontré esta solución. Si tu RowSource apunta a un rango de celdas, los encabezados de columna en un cuadro de lista de varias columnas se toman de las celdas inmediatamente encima de RowSource.
Usando el ejemplo que se muestra aquí, dentro del cuadro de lista, las palabras Símbolo y Nombre aparecen como títulos de título. Cuando cambié la palabra Nombre en la celda AB1, luego abrí el formulario en el VBE nuevamente, los encabezados de las columnas cambiaron.
El ejemplo provino de un libro de trabajo en VBA para modeladores de S. Christian Albright, y estaba tratando de averiguar cómo obtuvo los encabezados de columna en su cuadro de lista 🙂