如何禁用Excel筛选下拉菜单中的排序选项?
禁用Excel筛选下拉菜单中的排序选项及控件名称查找方法
一、禁用筛选下拉菜单的前三项排序选项
筛选下拉菜单对应的命令栏名称是"AutoFilter",要禁用的三个排序控件名称(中文系统)分别是"升序"、"降序"、"自定义排序..."。
实现代码
Sub DisableFilterSortOptions() Dim cmdBar As CommandBar Dim ctrl As CommandBarControl ' 获取筛选下拉菜单对应的命令栏 Set cmdBar = Application.CommandBars("AutoFilter") ' 禁用升序选项(加错误处理避免控件不存在时报错) On Error Resume Next Set ctrl = cmdBar.Controls("升序") If Not ctrl Is Nothing Then ctrl.Visible = False ' 禁用降序选项 Set ctrl = cmdBar.Controls("降序") If Not ctrl Is Nothing Then ctrl.Visible = False ' 禁用自定义排序选项 Set ctrl = cmdBar.Controls("自定义排序...") If Not ctrl Is Nothing Then ctrl.Visible = False On Error GoTo 0 End Sub
让所有用户生效的方式
- 加载宏方式:把代码保存为Excel加载宏(.xlam格式),分发所有用户安装,启动Excel时自动加载生效;
- 共享工作簿方式:将代码放入目标工作簿的
ThisWorkbook模块的Workbook_Open事件中,用户打开工作簿时自动执行禁用操作。
二、查找命令栏和控件名称的方法
如果需要查找其他命令栏或控件的名称,可运行以下VBA代码生成完整列表:
Sub ListCommandBarControls() Dim cmdBar As CommandBar Dim ctrl As CommandBarControl Dim ws As Worksheet ' 创建新工作表存储结果 Set ws = ThisWorkbook.Sheets.Add ws.Name = "控件列表" ws.Range("A1:B1") = Array("命令栏名称", "控件名称") Dim rowNum As Integer rowNum = 2 ' 遍历所有命令栏及下属控件 For Each cmdBar In Application.CommandBars For Each ctrl In cmdBar.Controls ws.Cells(rowNum, 1) = cmdBar.Name ws.Cells(rowNum, 2) = ctrl.Caption rowNum = rowNum + 1 Next Next ' 自动调整列宽 ws.Columns("A:B").AutoFit End Sub
运行后会生成名为「控件列表」的工作表,里面会列出所有命令栏和控件的名称,对照菜单截图就能找到对应条目。
内容的提问来源于stack exchange,提问作者ViktorToyot
相关产品推荐
相关产品推荐

