求指定列(C3:C)双击单元格触发值/文本过滤的VBA代码
双击C列指定区域触发筛选的VBA代码实现
以下是修正后的VBA代码,专门实现仅双击C3及以下的C列单元格时,按单元格内容对C列进行筛选的需求,适配当前工作表操作:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) On Error GoTo GetOut Application.EnableEvents = False Cancel = True ' 取消默认双击进入编辑模式的行为 ' 限定仅在C3到C列最后一行数据的范围内触发事件 If Not Intersect(Target, Me.Range("C3:C" & Me.Cells(Me.Rows.Count, "C").End(xlUp).Row)) Is Nothing Then ' 判断双击单元格是否为空 If Trim(Target.Value) = "" Then MsgBox "请选择非空的筛选值" GoTo GetOut End If ' 对当前工作表的C列(第3列)进行筛选,表头行设为第2行 Me.Range("C2").AutoFilter Field:=3, Criteria1:=Target.Value End If GetOut: Application.EnableEvents = True ' 恢复事件触发 Exit Sub End Sub
关键修改说明
- 范围限定:通过
Intersect函数判断双击的Target单元格是否落在C3到C列最后一行数据的区间内,避免整个工作表双击都触发事件 - 当前工作表适配:用
Me代替原代码的Sheet1,确保代码在触发事件的当前工作表执行,不用硬指定工作表名称 - 筛选列修正:原代码
Field:=2错误,C列是表格的第3列,所以改为Field:=3 - 精准空值判断:直接使用
Target.Value(双击的目标单元格)代替ActiveCell,避免选中位置偏差 - 取消不必要跳转:移除
Application.Goto,保持筛选后的视图位置不变
使用步骤
- 打开你的Excel工作簿,按下
Alt+F11打开VBA编辑器 - 在左侧工程窗口中找到目标工作表,双击打开其代码窗口
- 将上述代码粘贴到窗口中,保存工作簿为**启用宏的工作簿(.xlsm)**格式
内容的提问来源于stack exchange,提问作者Ahmed Mohammed edrees
相关产品推荐
相关产品推荐

