工作表受保护时如何允许VBA创建ListBox并防止数据公式被删除
原因说明
Excel工作表默认保护规则下,就算单元格设置为未锁定,也仅放开单元格内容编辑权限,添加表单控件ListBox属于修改工作表对象的操作,属于单独的权限管控范围,所以会触发1004报错。
可行解决方案
按你的需求场景二选一即可:
- 方案1:手动开放保护工作表的编辑对象权限
操作路径:点击顶部菜单栏「审阅」→「保护工作表」,在弹出的权限列表中勾选「编辑对象」,设置密码后确认即可。该方案无需修改现有VBA代码,缺点是所有用户都可以手动修改、删除工作表内的所有控件和形状对象。 - 方案2:仅允许VBA代码操作对象,用户手动操作仍受限制
该方案通过保护工作表时开启UserInterfaceOnly参数实现,保护规则仅对用户手动操作生效,VBA代码不受保护限制。- 先取消工作表的现有保护
- 将以下代码添加到VBA的
ThisWorkbook模块中,文件打开时会自动设置带VBA豁免的保护规则:
Private Sub Workbook_Open() ' 替换为你的实际工作表名称、保护密码 Sheets("你的工作表名称").Protect _ Password:="自定义保护密码", _ UserInterfaceOnly:=True, _ AllowFormattingCells:=False, _ AllowDeletingColumns:=False, _ AllowDeletingRows:=False, _ AllowInsertingColumns:=False, _ AllowInsertingRows:=False ' 其余保护参数可根据你的实际管控需求调整,都设为False即可实现禁止用户修改数据和公式 End Sub- 保存文件为启用宏的格式(.xlsm),重新打开即可生效,原有创建ListBox的代码无需修改即可正常运行。
代码优化建议
你现有代码中设置ListBox宽度时调用的是ActiveCell.Width,如果代码执行过程中选中单元格发生变化,会导致ListBox宽度不符合预期,建议修改为CatPopUpCell.Width更稳妥。
内容的提问来源于stack exchange,提问作者aye cee
相关产品推荐
相关产品推荐

