Необходимо создать исключительно програмно заголовок ListBox, где подписать названия столбцов "Фамилия", "Имя", "Отчество" и "Дата рождения", при этом нет возможности использовать RowSource. Есть ли возможность создать такой заголовок?
Необходимо создать исключительно програмно заголовок ListBox, где подписать названия столбцов "Фамилия", "Имя", "Отчество" и "Дата рождения", при этом нет возможности использовать RowSource. Есть ли возможность создать такой заголовок?Sashagor1982
Sashagor1982, Доброго времени суток. Вы бы по Аккуратнее со Старожилами данного форума. Ведь они не только на этом форуме обитают. Да и как-бы принято Здороваться и если вам помогли то тоже принято по благодарить тем кто вам помог. Покажите свои манеры приличия (если они есть). Как вариант через костыль и дополнительный ListBox. Код не мой (умею пользоваться поиском в тырнэте).
[vba]
Код
Option Explicit Dim objControlChecked As Object Dim aSource
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
Private Sub ListBox_Main_DblClick(ByVal Cancel As MSForms.ReturnBoolean) MsgBox ListBox_Main.List(ListBox_Main.ListIndex, 0) End Sub
Function GetTableBodyRange(aColumns, sh, TableNAme) Dim e Dim a Dim i, j a = sh.ListObjects(TableNAme).DataBodyRange.Value ReDim e(1 To UBound(a), 1 To UBound(aColumns) + 1)
For i = 1 To UBound(a)
For j = LBound(aColumns) To UBound(aColumns) e(i, j + 1) = a(i, aColumns(j)) Next
If TypeName(objControlChecked) = "ListBox" Then Me.ListBox_Main.ColumnCount = 5 ' Me.ListBox_Main.ColumnHeads = True Call CreateListBoxHeader(Me.ListBox_Main, Me.ListBox_Heads, Array("Категория", "Фамилия", "Имя", "Отчество", "Дата рождения")) Me.ListBox_Main.List = GetTableBodyRange(Array(8, 3, 4, 5, 6), Sheets("List"), "tblOrder") End If
Next
End Sub
[/vba]
Исходя из вашей прошлой темы адаптировал код.
Sashagor1982, Доброго времени суток. Вы бы по Аккуратнее со Старожилами данного форума. Ведь они не только на этом форуме обитают. Да и как-бы принято Здороваться и если вам помогли то тоже принято по благодарить тем кто вам помог. Покажите свои манеры приличия (если они есть). Как вариант через костыль и дополнительный ListBox. Код не мой (умею пользоваться поиском в тырнэте).
[vba]
Код
Option Explicit Dim objControlChecked As Object Dim aSource
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
Private Sub ListBox_Main_DblClick(ByVal Cancel As MSForms.ReturnBoolean) MsgBox ListBox_Main.List(ListBox_Main.ListIndex, 0) End Sub
Function GetTableBodyRange(aColumns, sh, TableNAme) Dim e Dim a Dim i, j a = sh.ListObjects(TableNAme).DataBodyRange.Value ReDim e(1 To UBound(a), 1 To UBound(aColumns) + 1)
For i = 1 To UBound(a)
For j = LBound(aColumns) To UBound(aColumns) e(i, j + 1) = a(i, aColumns(j)) Next