Worksheet Change事件宏:指定区域全填充才触发的实现问题求助
问题分析与修正代码
你的代码存在几个关键问题:
- Worksheet_Change事件的默认参数是
Target,不是自定义的rngcondition,参数名写错会导致事件无法正常触发 IsEmpty函数只能判断单个单元格是否为空,直接用在整行区域上只会检查区域的第一个单元格,无法判断所有单元格是否都填充- 代码缺少
End If,语法不完整 - 没有禁用事件,执行testmacro时如果修改单元格可能触发循环
下面是修正后的代码:
Private Sub Worksheet_Change(ByVal Target As Range) Dim rngCondition As Range Dim blankCell As Range ' 指定要检查的单元格区域 Set rngCondition = Worksheets("GANTT").Range("I27:I34") ' 禁用事件,防止执行testmacro时触发循环 Application.EnableEvents = False On Error Resume Next ' 防止区域无空白时SpecialCells报错 ' 检查区域内是否存在空白单元格 Set blankCell = rngCondition.SpecialCells(xlCellTypeBlanks) If blankCell Is Nothing Then ' 没有空白单元格,执行宏 testmacro End If On Error GoTo 0 ' 恢复事件 Application.EnableEvents = True End Sub
关键说明
- 用
SpecialCells(xlCellTypeBlanks)查找区域内的空白单元格,如果找不到(即所有单元格都填充),blankCell会是Nothing,这时触发testmacro - 加上
Application.EnableEvents = False/True是为了避免执行testmacro过程中修改单元格时再次触发Worksheet_Change事件,造成死循环 On Error Resume Next用来处理当区域没有空白单元格时,SpecialCells会抛出错误的情况
内容的提问来源于stack exchange,提问作者Rda
相关产品推荐
相关产品推荐

