So I got to work with slightly modified version of DisplayName solution.
Instead of using button I had to use a combox instead:
Public Sub initComboBox()
Set Settings.filterArray = CreateObject("Scripting.Dictionary")
Settings.filterArray.CompareMode = vbTextCompare
Settings.filterArray.Add "MOM VIEW", Split("1,4,5,7,8", ",")
Settings.filterArray.Add "COST VIEW", Split("1,4,5,7,12", ",")
Settings.filterArray.Add "FILE VIEW", Split("1,4,5,7,18", ",")
Settings.filterArray.Add "ALL", ""
Dim cCont As control
Dim cName As String
Set cCont=MOM.ComboBox_FilterCol
cName = replace(cCont.name, "ComboBox", "Array")
cCont.List = Settings.comboBoxArray(cName)
cCont.listIndex = UBound(cCont.List)
End Sub
Then I create my listbox:
MOM.ListBox_Partslist.Clear
Settings.excelArray = xlApp.Sheets("List").UsedRange.value
MOM.ListBox_Partslist.ColumnCount = UBound(Settings.excelArray, 2)
MOM.ListBox_Partslist.List = Settings.excelArray
And then I do the hiding of columns:
Public Sub changeFilter()
Dim tempArray() As String
Dim tempArray2() As Integer
Dim width As Integer
Dim columnWidths As String
Dim i As Integer
width = 100
On Error Resume Next
If MOM.ListBox_Partslist = Null Then Exit Sub
ReDim tempArray2(UBound(MOM.ListBox_Partslist.List, 2)) As Integer
columnWidths = ""
With MOM.ComboBox_FilterCol
If .value = "ALL" Then
For i = LBound(tempArray2) To UBound(tempArray2)
columnWidths = columnWidths & width & ","
Next i
Else
tempArray = Settings.filterArray(.List(.listIndex))
For i = LBound(tempArray) To UBound(tempArray)
tempArray2(tempArray(i)) = width
Next i
For i = LBound(tempArray2) To UBound(tempArray2)
columnWidths = columnWidths & tempArray2(i) & ","
Next i
End If
MOM.ListBox_Partslist.columnWidths = Left(columnWidths, Len(columnWidths) - 1)
End With
End Sub