Re: Hide / Unhide Columns On Protected Sheet
Quote from Dave Hawley
If it's not being set, then that is the problem. Anyway, as I said, why not use;
With Sheet1
.Protect Password:=SpreadsheetPassword, UserInterfaceOnly:=True
.EnableOutlining = True
.Range("column_calories").EntireColumn.Hidden = ToggleButton1.Value
End With
Dave,
I presume that it's not being set because when I step through the macro and I hover over the "UserInterfaceOnly:=True" code I don't get any "pop-up" display. Maybe it is being set and I just am not sure how to verify it.
The code you suggested above does work but I don't think it works in spreadsheet logic. The ToggleValue1.value is set when a form is submitted. The form is a preferences form that allows the user to hide and display certain columns. So, the only time I adjust the ToggleButton values is when I am loading the form.
The Sheet protection is a default to go off when the spreadsheet opens (and the user enables Macros. If he/she doesn't enable macros then all sheets are hidden except a sheet displaying a warning). At no other time does the spreadsheet change the protection of a sheet.
So, does it make sense to set the togglebutton values on startup? I don't think so because everytime the user changes the 'preference' form the ToggleButton Value may change the next time the form is loaded (because they may have hidden a column). I think the code below won't work because it sets the ToggleButton value at startup when I need it to set when the form is loaded.
With Sheet1
.Protect Password:=SpreadsheetPassword, UserInterfaceOnly:=True
.EnableOutlining = True
.Range("column_calories").EntireColumn.Hidden = ToggleButton1.Value
End With
In any case it seems like the real problem is that the 'UserInterfaceOnly:=True' code is not going off. Any reason why this code would not work if it goes off every time the workbook starts?
With Sheet1
.Protect Password:=SpreadsheetPassword, UserInterfaceOnly:=True
.EnableOutlining = True
End With
Thank you for all your help. As you can tell I am just learning by the help of everyone here and by trial and error - mostly error.
Guy[hr]*[/hr] Auto Merged Post Until 24 Hrs Passes;[dl]*[/dl]I have adjusted the code of my spreadsheet but the reults are the same. When I try to hide/display columns I get the folloing error "Run-time error '1004': Unable to set Hidden property of the Range class". I thought I did this right, ensuring "UserInterfaceOnly:=True"
Here is the new code I have:
ThisWorkbook
Option Explicit
Private Sub Workbook_Open()
Dim wSht As Worksheet
Dim PW As String
PW = "*****"
'set protection using UserInterface to allow macros to work
For Each wSht In ActiveWorkbook.Worksheets
wSht.Protect _
Password:=PW, _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
UserInterfaceOnly:=True
Next wSht
Run "ShowAll"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
bIsClosing = True
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Cancel = True Or bIsClosing = False Then Exit Sub
Run "HideAll"
End Sub
Private Sub Workbook_Deactivate()
If bIsClosing = False Then Exit Sub
Run "HideAll"
End Sub
Display More
Sub ShowAll()
bIsClosing = False
Dim SpreadsheetPassword
For Each wsSheet In ThisWorkbook.Worksheets
If wsSheet.CodeName <> "Sheet6" Then
wsSheet.Visible = xlSheetVisible
End If
SpreadsheetPassword = "csstats"
Next wsSheet
Chart1.Visible = xlSheetVisible
Chart2.Visible = xlSheetVisible
Chart3.Visible = xlSheetVisible
Chart4.Visible = xlSheetVisible
Sheet6.Visible = xlSheetVeryHidden
Sheet1.Select
End Sub
Display More
Now, that code is used to start up the spreadsheet. The following code is where the error is. It is a 'Preferences' UserForm where the user can specify whether columns are hidden. Here is the full code from the UserForm.
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim wb As Workbook
Set wb = ThisWorkbook
Preferences.Hide
If ComboBox17.Value = "Hide" Then
'THIS IS WHERE THE ERROR OCCURS
Range("cloumn_elevation_per_mile").EntireColumn.Hidden = True
Else
Range("cloumn_elevation_per_mile").EntireColumn.Hidden = False
End If
If ComboBox18.Value = "Hide" Then
Range("column_calories").EntireColumn.Hidden = True
Else
Range("column_calories").EntireColumn.Hidden = False
End If
If ComboBox19.Value = "Hide" Then
Range("column_avg_hr").EntireColumn.Hidden = True
Else
Range("column_avg_hr").EntireColumn.Hidden = False
End If
If ComboBox20.Value = "Hide" Then
Range("column_max_hr").EntireColumn.Hidden = True
Else
Range("column_max_hr").EntireColumn.Hidden = False
End If
If ComboBox21.Value = "Hide" Then
Range("column_weight").EntireColumn.Hidden = True
Else
Range("column_weight").EntireColumn.Hidden = False
End If
If ComboBox22.Value = "Hide" Then
Range("column_fat").EntireColumn.Hidden = True
Else
Range("column_fat").EntireColumn.Hidden = False
End If
If ComboBox23.Value = "Hide" Then
Range("column_Custom_Number_1").EntireColumn.Hidden = True
wb.Worksheets("Admin").Range("Custom1_Attribute") = "Hide"
Else
Range("column_Custom_Number_1").EntireColumn.Hidden = False
wb.Worksheets("Admin").Range("Custom1_Attribute") = "Hide"
End If
If ComboBox24.Value = "Hide" Then
Range("column_Custom_Number_2").EntireColumn.Hidden = True
wb.Worksheets("Admin").Range("Custom2_Attribute") = "Hide"
Else
Range("column_Custom_Number_2").EntireColumn.Hidden = False
wb.Worksheets("Admin").Range("Custom2_Attribute") = "Hide"
End If
If ComboBox25.Value = "Hide" Then
Range("column_Custom_Number_3").EntireColumn.Hidden = True
wb.Worksheets("Admin").Range("Custom3_Attribute") = "Hide"
Else
Range("column_Custom_Number_3").EntireColumn.Hidden = False
wb.Worksheets("Admin").Range("Custom3_Attribute") = "Hide"
End If
If ComboBox26.Value = "Hide" Then
Range("column_Custom_Number_4").EntireColumn.Hidden = True
wb.Worksheets("Admin").Range("Custom4_Attribute") = "Hide"
Else
Range("column_Custom_Number_4").EntireColumn.Hidden = False
wb.Worksheets("Admin").Range("Custom4_Attribute") = "Hide"
End If
If ComboBox27.Value = "Hide" Then
Range("column_notes").EntireColumn.Hidden = True
Else
Range("column_notes").EntireColumn.Hidden = False
End If
If ComboBox28.Value = "Hide" Then
Range("column_custom1").EntireColumn.Hidden = True
Else
Range("column_custom1").EntireColumn.Hidden = False
End If
If ComboBox29.Value = "Hide" Then
Range("column_custom2").EntireColumn.Hidden = True
Else
Range("column_custom2").EntireColumn.Hidden = False
End If
If ComboBox30.Value = "Hide" Then
Range("column_custom3").EntireColumn.Hidden = True
Else
Range("column_custom3").EntireColumn.Hidden = False
End If
If ComboBox31.Value = "Hide" Then
Range("column_custom4").EntireColumn.Hidden = True
Else
Range("column_custom4").EntireColumn.Hidden = False
End If
'Chart Prefernce
If ComboBox1.Value = "Display" Then
Chart4.Visible = xlSheetVisible
wb.Worksheets("Admin").Range("admin_pref_chart_goalsvsactuals") = "Display"
ElseIf ComboBox1.Value = "Hide" Then
Chart4.Visible = xlSheetVeryHidden
wb.Worksheets("Admin").Range("admin_pref_chart_goalsvsactuals") = "Hide"
End If
If ComboBox2.Value = "Display" Then
Chart1.Visible = xlSheetVisible
wb.Worksheets("Admin").Range("admin_pref_chart_distance_avg") = "Display"
ElseIf ComboBox2.Value = "Hide" Then
Chart1.Visible = xlSheetVeryHidden
wb.Worksheets("Admin").Range("admin_pref_chart_distance_avg") = "Hide"
End If
If ComboBox3.Value = "Display" Then
Chart3.Visible = xlSheetVisible
wb.Worksheets("Admin").Range("admin_pref_chart_perc_goal") = "Display"
ElseIf ComboBox3.Value = "Hide" Then
Chart3.Visible = xlSheetVeryHidden
wb.Worksheets("Admin").Range("admin_pref_chart_perc_goal") = "Hide"
End If
If ComboBox4.Value = "Display" Then
Chart2.Visible = xlSheetVisible
wb.Worksheets("Admin").Range("admin_pref_chart_elevation") = "Display"
ElseIf ComboBox4.Value = "Hide" Then
Chart2.Visible = xlSheetVeryHidden
wb.Worksheets("Admin").Range("admin_pref_chart_elevation") = "Hide"
End If
If ComboBox6.Value = "Display" Then
Sheet8.Visible = xlSheetVisible
wb.Worksheets("Admin").Range("admin_pref_chart_weight") = "Display"
ElseIf ComboBox6.Value = "Hide" Then
Sheet8.Visible = xlSheetVeryHidden
wb.Worksheets("Admin").Range("admin_pref_chart_weight") = "Hide"
End If
'Formating of custom Fields
If ComboBox13.Value = "Numeric" Then
wb.Sheets(2).Range("column_Custom_Number_1").NumberFormat = "0.00"
ElseIf ComboBox13.Value = "Percentage" Then
wb.Sheets(2).Range("column_Custom_Number_1").NumberFormat = "0.00%"
ElseIf ComboBox13.Value = "None" Then
wb.Sheets(2).Range("column_Custom_Number_1").NumberFormat = "General"
End If
If ComboBox14.Value = "Numeric" Then
wb.Sheets(2).Range("column_Custom_Number_2").NumberFormat = "0.00"
ElseIf ComboBox14.Value = "Percentage" Then
wb.Sheets(2).Range("column_Custom_Number_2").NumberFormat = "0.00%"
ElseIf ComboBox14.Value = "None" Then
wb.Sheets(2).Range("column_Custom_Number_2").NumberFormat = "General"
End If
If ComboBox15.Value = "Numeric" Then
wb.Sheets(2).Range("column_Custom_Number_3").NumberFormat = "0.00"
ElseIf ComboBox15.Value = "Percentage" Then
wb.Sheets(2).Range("column_Custom_Number_3").NumberFormat = "0.00%"
ElseIf ComboBox15.Value = "None" Then
wb.Sheets(2).Range("column_Custom_Number_3").NumberFormat = "General"
End If
If ComboBox16.Value = "Numeric" Then
wb.Sheets(2).Range("column_Custom_Number_4").NumberFormat = "0.00"
ElseIf ComboBox16.Value = "Percentage" Then
wb.Sheets(2).Range("column_Custom_Number_4").NumberFormat = "0.00%"
ElseIf ComboBox16.Value = "None" Then
wb.Sheets(2).Range("column_Custom_Number_4").NumberFormat = "General"
End If
wb.Worksheets("Admin").Range("Miles_Kilos") = ComboBox7.Value
wb.Worksheets("Admin").Range("Miles_Kilo_elevation") = ComboBox8.Value
wb.Worksheets("Admin").Range("Custom1_Type") = ComboBox9.Value
wb.Worksheets("Admin").Range("Custom2_Type") = ComboBox10.Value
wb.Worksheets("Admin").Range("Custom3_Type") = ComboBox11.Value
wb.Worksheets("Admin").Range("Custom4_Type") = ComboBox12.Value
wb.Worksheets("Admin").Range("Custom1_Format") = ComboBox13.Value
wb.Worksheets("Admin").Range("Custom2_Format") = ComboBox14.Value
wb.Worksheets("Admin").Range("Custom3_Format") = ComboBox15.Value
wb.Worksheets("Admin").Range("Custom4_Format") = ComboBox16.Value
wb.Worksheets("Admin").Range("admin_custom1") = TextBox1.Value
wb.Worksheets("Admin").Range("admin_custom2") = TextBox2.Value
wb.Worksheets("Admin").Range("admin_custom3") = TextBox3.Value
wb.Worksheets("Admin").Range("admin_custom4") = TextBox4.Value
wb.Worksheets("Admin").Range("Custom1_Header") = TextBox5.Value
wb.Worksheets("Admin").Range("Custom2_Header") = TextBox6.Value
wb.Worksheets("Admin").Range("Custom3_Header") = TextBox7.Value
wb.Worksheets("Admin").Range("Custom4_Header") = TextBox8.Value
Unload Me
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton2_Click()
Preferences.Hide
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim wb As Workbook
Set wb = ThisWorkbook
TextBox1.Value = wb.Worksheets("Admin").Range("admin_custom1")
TextBox2.Value = wb.Worksheets("Admin").Range("admin_custom2")
TextBox3.Value = wb.Worksheets("Admin").Range("admin_custom3")
TextBox4.Value = wb.Worksheets("Admin").Range("admin_custom4")
TextBox5.Value = wb.Worksheets("Admin").Range("Custom1_Header")
TextBox6.Value = wb.Worksheets("Admin").Range("Custom2_Header")
TextBox7.Value = wb.Worksheets("Admin").Range("Custom3_Header")
TextBox8.Value = wb.Worksheets("Admin").Range("Custom4_Header")
ComboBox13.Value = wb.Worksheets("Admin").Range("Custom1_Format")
ComboBox14.Value = wb.Worksheets("Admin").Range("Custom2_Format")
ComboBox15.Value = wb.Worksheets("Admin").Range("Custom3_Format")
ComboBox16.Value = wb.Worksheets("Admin").Range("Custom4_Format")
'Custom Fields
'Chart Preference
ComboBox1.AddItem "Display"
ComboBox1.AddItem "Hide"
ComboBox2.AddItem "Display"
ComboBox2.AddItem "Hide"
ComboBox3.AddItem "Display"
ComboBox3.AddItem "Hide"
ComboBox4.AddItem "Display"
ComboBox4.AddItem "Hide"
ComboBox5.AddItem "Display"
ComboBox5.AddItem "Hide"
ComboBox6.AddItem "Display"
ComboBox6.AddItem "Hide"
ComboBox7.AddItem "Miles"
ComboBox7.AddItem "Kilometers"
ComboBox8.AddItem "Display"
ComboBox8.AddItem "Hide"
ComboBox17.AddItem "Display"
ComboBox17.AddItem "Hide"
ComboBox18.AddItem "Display"
ComboBox18.AddItem "Hide"
ComboBox19.AddItem "Display"
ComboBox19.AddItem "Hide"
ComboBox20.AddItem "Display"
ComboBox20.AddItem "Hide"
ComboBox21.AddItem "Display"
ComboBox21.AddItem "Hide"
ComboBox22.AddItem "Display"
ComboBox22.AddItem "Hide"
ComboBox23.AddItem "Display"
ComboBox23.AddItem "Hide"
ComboBox24.AddItem "Display"
ComboBox24.AddItem "Hide"
ComboBox25.AddItem "Display"
ComboBox25.AddItem "Hide"
ComboBox26.AddItem "Display"
ComboBox26.AddItem "Hide"
ComboBox27.AddItem "Display"
ComboBox27.AddItem "Hide"
ComboBox28.AddItem "Display"
ComboBox28.AddItem "Hide"
ComboBox29.AddItem "Display"
ComboBox29.AddItem "Hide"
ComboBox30.AddItem "Display"
ComboBox30.AddItem "Hide"
ComboBox31.AddItem "Display"
ComboBox31.AddItem "Hide"
ComboBox9.AddItem "Sum"
ComboBox9.AddItem "Average"
ComboBox9.AddItem "None"
ComboBox10.AddItem "Sum"
ComboBox10.AddItem "Average"
ComboBox10.AddItem "None"
ComboBox11.AddItem "Sum"
ComboBox11.AddItem "Average"
ComboBox11.AddItem "None"
ComboBox12.AddItem "Sum"
ComboBox12.AddItem "Average"
ComboBox12.AddItem "None"
ComboBox13.AddItem "Percentage"
ComboBox13.AddItem "Numeric"
ComboBox13.AddItem "None"
ComboBox14.AddItem "Percentage"
ComboBox14.AddItem "Numeric"
ComboBox14.AddItem "None"
ComboBox15.AddItem "Percentage"
ComboBox15.AddItem "Numeric"
ComboBox15.AddItem "None"
ComboBox16.AddItem "Percentage"
ComboBox16.AddItem "Numeric"
ComboBox16.AddItem "None"
If wb.Worksheets("Admin").Range("admin_pref_chart_goalsvsactuals") = "Display" Then
ComboBox1.Value = "Display"
ElseIf wb.Worksheets("Admin").Range("admin_pref_chart_goalsvsactuals") = "Hide" Then
ComboBox1.Value = "Hide"
End If
If wb.Worksheets("Admin").Range("admin_pref_chart_distance_avg") = "Display" Then
ComboBox2.Value = "Display"
ElseIf wb.Worksheets("Admin").Range("admin_pref_chart_distance_avg") = "Hide" Then
ComboBox2.Value = "Hide"
End If
If wb.Worksheets("Admin").Range("admin_pref_chart_perc_goal") = "Display" Then
ComboBox3.Value = "Display"
ElseIf wb.Worksheets("Admin").Range("admin_pref_chart_perc_goal") = "Hide" Then
ComboBox3.Value = "Hide"
End If
If wb.Worksheets("Admin").Range("admin_pref_chart_elevation") = "Display" Then
ComboBox4.Value = "Display"
ElseIf wb.Worksheets("Admin").Range("admin_pref_chart_elevation") = "Hide" Then
ComboBox4.Value = "Hide"
End If
If wb.Worksheets("Admin").Range("admin_pref_chart_weight") = "Display" Then
ComboBox5.Value = "Display"
ElseIf wb.Worksheets("Admin").Range("admin_pref_chart_weight") = "Hide" Then
ComboBox5.Value = "Hide"
End If
If Sheet8.Visible = xlSheetVisible Then
ComboBox6.Value = "Display"
ElseIf Sheet8.Visible = xlSheetVeryHidden Then
ComboBox6.Value = "Hide"
End If
If wb.Worksheets("Admin").Range("Miles_Kilos") = "Miles" Then
ComboBox7.Value = "Miles"
ElseIf wb.Worksheets("Admin").Range("Miles_Kilos") = "Kilometers" Then
ComboBox7.Value = "Kilometers"
End If
If wb.Worksheets("Admin").Range("Miles_Kilo_elevation") = "Miles" Then
ComboBox8.Value = "Miles"
ElseIf wb.Worksheets("Admin").Range("Miles_Kilo_elevation") = "Meters" Then
ComboBox8.Value = "Meters"
End If
If Range("cloumn_elevation_per_mile").EntireColumn.Hidden = False Then
ComboBox17.Value = "Display"
Else: ComboBox17.Value = "Hide"
End If
If Range("column_calories").EntireColumn.Hidden = False Then
ComboBox18.Value = "Display"
Else: ComboBox18.Value = "Hide"
End If
If Range("column_avg_hr").EntireColumn.Hidden = False Then
ComboBox19.Value = "Display"
Else: ComboBox19.Value = "Hide"
End If
If Range("column_max_hr").EntireColumn.Hidden = False Then
ComboBox20.Value = "Display"
Else: ComboBox20.Value = "Hide"
End If
If Range("column_weight").EntireColumn.Hidden = False Then
ComboBox21.Value = "Display"
Else: ComboBox21.Value = "Hide"
End If
If Range("column_fat").EntireColumn.Hidden = False Then
ComboBox22.Value = "Display"
Else: ComboBox22.Value = "Hide"
End If
If Range("column_notes").EntireColumn.Hidden = False Then
ComboBox23.Value = "Display"
Else: ComboBox23.Value = "Hide"
End If
If Range("column_Custom_Number_1").EntireColumn.Hidden = False Then
ComboBox24.Value = "Display"
Else: ComboBox24.Value = "Hide"
End If
If Range("column_Custom_Number_2").EntireColumn.Hidden = False Then
ComboBox25.Value = "Display"
Else: ComboBox25.Value = "Hide"
End If
If Range("column_Custom_Number_3").EntireColumn.Hidden = False Then
ComboBox26.Value = "Display"
Else: ComboBox26.Value = "Hide"
End If
If Range("column_Custom_Number_4").EntireColumn.Hidden = False Then
ComboBox27.Value = "Display"
Else: ComboBox27.Value = "Hide"
End If
If Range("column_custom1").EntireColumn.Hidden = False Then
ComboBox28.Value = "Display"
Else: ComboBox28.Value = "Hide"
End If
If Range("column_custom2").EntireColumn.Hidden = False Then
ComboBox29.Value = "Display"
Else: ComboBox29.Value = "Hide"
End If
If Range("column_custom3").EntireColumn.Hidden = False Then
ComboBox30.Value = "Display"
Else: ComboBox30.Value = "Hide"
End If
If Range("column_custom4").EntireColumn.Hidden = False Then
ComboBox31.Value = "Display"
Else: ComboBox31.Value = "Hide"
End If
If wb.Worksheets("Admin").Range("Custom1_Type") = "Sum" Then
ComboBox9.Value = "Sum"
ElseIf wb.Worksheets("Admin").Range("Custom1_Type") = "Average" Then
ComboBox9.Value = "Average"
ElseIf wb.Worksheets("Admin").Range("Custom1_Type") = "None" Then
ComboBox9.Value = "None"
End If
If wb.Worksheets("Admin").Range("Custom2_Type") = "Sum" Then
ComboBox10.Value = "Sum"
ElseIf wb.Worksheets("Admin").Range("Custom2_Type") = "Average" Then
ComboBox10.Value = "Average"
ElseIf wb.Worksheets("Admin").Range("Custom2_Type") = "None" Then
ComboBox10.Value = "None"
End If
If wb.Worksheets("Admin").Range("Custom3_Type") = "Sum" Then
ComboBox11.Value = "Sum"
ElseIf wb.Worksheets("Admin").Range("Custom3_Type") = "Average" Then
ComboBox11.Value = "Average"
ElseIf wb.Worksheets("Admin").Range("Custom3_Type") = "None" Then
ComboBox11.Value = "None"
End If
If wb.Worksheets("Admin").Range("Custom4_Type") = "Sum" Then
ComboBox12.Value = "Sum"
ElseIf wb.Worksheets("Admin").Range("Custom4_Type") = "Average" Then
ComboBox12.Value = "Average"
ElseIf wb.Worksheets("Admin").Range("Custom4_Type") = "None" Then
ComboBox12.Value = "None"
End If
End Sub
Display More
Looking at this is there any suggestions on how to make this error go away?
Thank you,
Guy