Excel VBA求助:Worksheet_SelectionChange过程过大,如何精简代码
精简Worksheet_SelectionChange过程解决“Private Sub procedure too large”错误
原代码因为逐个单元格重复编写判断逻辑,导致过程体积超限触发错误。以下是彻底精简后的代码,完全满足你“点击对应单元格时自动填充同B列对应单元格前3个字符”的需求:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' 只处理单个单元格选中的情况 If Target.CountLarge > 1 Then Exit Sub ' 定义需要处理的目标区域:E12至R148,可根据实际需求调整 Dim targetRange As Range Set targetRange = Me.Range("E12:R148") ' 判断选中单元格是否在目标范围内 If Not Intersect(Target, targetRange) Is Nothing Then ' 动态生成公式,自动对应B列同行情数据的前3位 Target.Formula = "=Left(B" & Target.Row & ", 3)" End If End Sub
关键优化点:
- 仅做一次
Target.CountLarge > 1判断,去掉原代码中重复冗余的检查 - 用一个整体区域替代逐个单元格的判断,直接覆盖E12到R148的所有目标单元格,彻底消除重复代码
- 利用
Target.Row动态获取选中单元格的行号,自动匹配B列对应行,无需手动写死每一行的公式
如果你的实际需求只是处理E列的12到148行,只需把targetRange的定义改成Me.Range("E12:E148")即可。
内容的提问来源于stack exchange,提问作者Quasar
相关产品推荐
相关产品推荐

