Вы можете попробовать. Я новичок в форуме, но хотел предложить что-то, что сработало для меня, так как в прошлом я получал большую помощь от этого сайта. Это, по сути, вариант вышеупомянутого, но я нашел его проще.
Просто вставьте это в раздел Userform_Initialize вашего кода пользовательской формы. Обратите внимание, что у вас уже должен быть список в пользовательской форме или он был создан динамически над этим кодом. Также обратите внимание, что Массив - это список заголовков (ниже как «Заголовок1», «Заголовок2» и т. Д. Замените их собственными заголовками. Этот код затем установит полосу заголовка вверху на основе ширины столбцов списка). Извините, он не прокручивается - это фиксированные метки.
Более старшие программисты - пожалуйста, не стесняйтесь комментировать или улучшать это.
Dim Mywidths As String
Dim Arrwidths, Arrheaders As Variant
Dim ColCounter, Labelleft As Long
Dim theLabel As Object
[Other code here that you would already have in the Userform_Initialize section]
Set theLabel = Me.Controls.Add("Forms.Label.1", "Test" & ColCounter, True)
With theLabel
.Left = ListBox1.Left
.Top = ListBox1.Top - 10
.Width = ListBox1.Width - 1
.Height = 10
.BackColor = RGB(200, 200, 200)
End With
Arrheaders = Array("Header1", "Header2", "Header3", "Header4")
Mywidths = Me.ListBox1.ColumnWidths
Mywidths = Replace(Mywidths, " pt", "")
Arrwidths = Split(Mywidths, ";")
Labelleft = ListBox1.Left + 18
For ColCounter = LBound(Arrwidths) To UBound(Arrwidths)
If Arrwidths(ColCounter) > 0 Then
Header = Header + 1
Set theLabel = Me.Controls.Add("Forms.Label.1", "Test" & ColCounter, True)
With theLabel
.Caption = Arrheaders(Header - 1)
.Left = Labelleft
.Width = Arrwidths(ColCounter)
.Height = 10
.Top = ListBox1.Top - 10
.BackColor = RGB(200, 200, 200)
.Font.Bold = True
End With
Labelleft = Labelleft + Arrwidths(ColCounter)
End If
Next