Excel VBA 非连续列显示隐藏及受保护工作簿下运行问题咨询
VBA切换列显示隐藏问题修复方案
你之前修改xAddress为"D,E,H,J,M,L"报错,是因为
Columns方法不支持非连续列的逗号分隔格式,必须用Range对象处理多区域引用。工作表保护状态下无法修改列属性,需要操作前临时解除保护,操作完成后自动恢复保护状态。
修复后完整代码
Private Sub ShowHide_Click() Dim xAddress As String Dim xSheet As Worksheet Dim xIsProtected As Boolean ' 自定义需要操作的列:单列表写为「列标:列标」,多列用英文逗号分隔,连续列可直接写为「起始列:结束列」 xAddress = "D:D,E:E,H:H,J:J,M:M,L:L" Set xSheet = Application.ActiveSheet ' 记录保护状态,临时解除工作表保护 xIsProtected = xSheet.ProtectContents If xIsProtected Then ' 如果工作表有保护密码,替换为 xSheet.Unprotect Password:="你的实际密码" xSheet.Unprotect End If ' 切换列显示隐藏状态 If ShowHide.Value Then xSheet.Range(xAddress).EntireColumn.Hidden = False ShowHide.Caption = "Hide" Else xSheet.Range(xAddress).EntireColumn.Hidden = True ShowHide.Caption = "Show" End If ' 恢复工作表保护状态 If xIsProtected Then ' 如果工作表有保护密码,替换为 xSheet.Protect Password:="你的实际密码" xSheet.Protect End If End Sub
使用说明
- 自定义操作列只需要修改
xAddress变量的值即可,非连续列按示例格式配置,连续列仍支持原写法比如"D:H" - 如果工作簿也设置了保护,可在解除工作表保护的代码前加一行
ThisWorkbook.Unprotect Password:="工作簿密码",操作完成后再加一行ThisWorkbook.Protect Password:="工作簿密码"恢复保护即可
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

