Вот решение VBA.
Sub PopulateListBox()
Dim ListBox As MSForms.ListBox, columnHeaders As Range, header As Range
Set ListBox = Worksheets("Sheet1").ListBox1
Set columnHeaders = Worksheets("Sheet2").Range("A1:C1")
ListBox.Clear
For Each header In columnHeaders
ListBox.AddItem (header)
Next header
End Sub
Sub ListBox1_Click()
Dim headerIndex As Integer, selectedHeader As Integer
For headerIndex = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(headerIndex) = True Then
DeleteColumn ListBox1.List(headerIndex)
End If
Next headerIndex
PopulateListBox
End Sub
Sub DeleteColumn(headerId As String)
Dim ListBox As MSForms.ListBox, columnHeaders As Range, header As Range
Set columnHeaders = Worksheets("Sheet2").Range("A1:C1")
For Each header In columnHeaders
If header = headerId Then
header.EntireColumn.Delete
End If
Next header
End Sub
Примечания:
- Добавьте
Forms.ListBox
на свой лист (sheet1
в моем примере) и заполните его заголовками столбцов (в моем примере это sheet2
в A1:C1
)
- Когда пользователь щелкает заголовок в
ListBox
, столбец удаляется, и ListBox
обновляется, чтобы удалить этот столбец в качестве выделения
- Вам необходимо соответствующим образом настроить ссылки на диапазон.