ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   UserForm ListBox (https://www.excelbanter.com/excel-programming/426476-re-userform-listbox.html)

Steve Yandl[_2_]

UserForm ListBox
 
With any luck, this will post without breaking any of the lines.

To abbreviate a bit, I set up ListBox1 on UserForm1 but used the property
window for ListBox1 to set it for 2 columns that were 30pt and 70pt wide.
In my tests, this seemed to do what I think you want.

'---------------------------------------------

Private C As Long

Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As
Integer, _
ByVal X As Single, ByVal Y As Single)

C = ActiveSheet.UsedRange.Columns.Count

If ActiveSheet.Columns(ListBox1.ListIndex + 1).EntireColumn.Hidden = True
Then
ActiveSheet.Columns(ListBox1.ListIndex + 1).EntireColumn.Hidden = False
Else
ActiveSheet.Columns(ListBox1.ListIndex + 1).EntireColumn.Hidden = True
End If

With ListBox1
For X = 1 To C
If ActiveSheet.Columns(X).EntireColumn.Hidden Then
.Column(1, X - 1) = "hidden"
Else
.Column(1, X - 1) = "visible"
End If
Next X
End With
End Sub

Private Sub UserForm_Activate()

C = ActiveSheet.UsedRange.Columns.Count

With ListBox1
For X = 1 To C
.AddItem
.Column(0, X - 1) = ActiveSheet.Columns(X).Address(0, 0)
If ActiveSheet.Columns(X).EntireColumn.Hidden Then
.Column(1, X - 1) = "hidden"
Else
.Column(1, X - 1) = "visible"
End If
Next X
End With

End Sub

'---------------------------------------------

Steve Yandl




"jfcby" wrote in message
...
Hello,

I'm tring to create a userform that will list all columns in a
worksheet and if they are hidden or unhidden. Then when I click a
column in the listbox it will check the status and either hide or
uhide.

1. Problem One: is that when I make a selection the listbox is cleared
so that the status can be updated but the selection is not remembered.
How, after I make a selection and the listbox is updated it will be
remembered?

2. Problem 2: is that after I make a selection and the listbox is
updated if I reselect the same column it does nothing? How can the
code be modified so that after I make a selection and the listbox is
updated I will be able to reselect the same column again to either
hide or unhide the column?

<CODE BEGIN

Private Sub UserForm_Initialize()
'
Call ListBox1_Main

End Sub

Private Sub ListBox1_Main()
Dim i As Integer
Dim ch As Variant
Dim rng As Range

'1. Find last column with data
Set rng = Cells.Find(What:="*", After:=Range("IV65536"), _
LookIn:=xlFormulas, _
LookAt:=xlPart, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious)
colnum = rng.Column + 1
'2. Check if columns hidden or visible
With ListBox1
.ColumnCount = 2
.ColumnWidths = "100,75" '.Width - 1 & ";0"
For i = 1 To colnum
collet = Left(Range(Columns(i), Columns(i)).Address(0, 0),
1)
'rng = Range(collet & "1")
'MsgBox rng
ch = Columns(i).EntireColumn.Hidden
If ch = 0 Then
ch = "Visible"
Else 'If ch = -1 Then
ch = "Hidden"
End If
'3. Fill userform listbox all columns with data & if hidden or
visible
.AddItem
.AddItem
.List(i, 0) = Range(collet & 1) '.List(i, 0) = Range
(collet & 1)
.List(i, 1) = ch

Next

End With
'4. In userform select column then click button hide or unhide
'5. Update userform

End Sub

Private Sub ListBox4_MouseDown(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ListBox1.List = -1
End Sub

Private Sub ListBox1_MouseUp(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ListBox1.ListIndex = -1
End Sub

Private Sub ListBox1_Click()
'Hide or Unhide Column
With Me.ListBox1
If Columns(.ListIndex).EntireColumn.Hidden = True Then
Columns(.ListIndex).EntireColumn.Hidden = False
Else
Columns(.ListIndex).EntireColumn.Hidden = True
End If
.Clear
End With
Call ListBox1_Main
End Sub

<CODE END

Thank you for your help,
jfcby





All times are GMT +1. The time now is 05:44 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com