如何解决VBA按颜色计数代码的编译错误:Expected End Sub
解决VBA编译错误:Expected End Sub
你遇到的问题根源很明确——VBA不允许在一个Sub过程内部嵌套定义另一个Function过程。你把CountCcolor函数直接写在了Color Sub里面,这就违反了VBA的语法规则,编译器自然会报错。
修正后的代码结构
你需要把Sub和Function拆成两个独立的过程,放在同一个模块里(不要嵌套):
' 这是独立的统计颜色的函数 Function CountCcolor(range_data As Range, criteria As Range) As Long Dim datax As Range Dim xcolor As Long xcolor = criteria.Interior.ColorIndex For Each datax In range_data If datax.Interior.ColorIndex = xcolor Then CountCcolor = CountCcolor + 1 End If Next datax End Function ' 这是调用该函数的Sub过程(你原来的Color Sub) Sub Color() ' 在这里添加调用CountCcolor函数的代码,比如: Dim result As Long ' 假设要统计A1:A10区域中,和B1单元格颜色相同的单元格数量 result = CountCcolor(Range("A1:A10"), Range("B1")) ' 可以把结果输出到单元格或者消息框 MsgBox "符合颜色条件的单元格数量:" & result End Sub
为什么这样修改?
在VBA中,所有的过程(Sub和Function)都必须是同级别的独立单元,不能互相嵌套。你之前的代码把Function放在Sub内部,编译器无法识别正确的过程边界,所以会提示缺少End Sub(它以为你的Sub还没结束,结果后面又出现了Function的定义)。
另外,你原来的Color Sub里面没有任何调用函数的逻辑,修正后的代码里我加了一个简单的调用示例,你可以根据自己的需求调整统计的区域和颜色参照单元格。
内容的提问来源于stack exchange,提问作者Milenko Jovic
相关产品推荐
相关产品推荐

