Excel VBA实现仅显示粗体单元格所在行时代码运行报错如何解决
问题原因
- 核心错误为属性调用对象错误:
Font是Range单元格对象的属性,而非单元格值c.Value的属性,代码中错误尝试读取c.Value.Font.Bold会直接触发运行时异常。 - 额外潜在问题:使用
Integer存储行号,Excel 2007及以后版本最大行号超过Integer的上限(32767),容易出现溢出错误;未关闭屏幕更新会导致遍历行时卡顿。
修正后完整代码
Sub HideNonBoldSubtotalRows() ' 从配置单元格读取判断规则 Dim checkCol As String checkCol = Range("C2").Value ' 要判断是否加粗的列 Dim startRow As Long startRow = Range("C3").Value ' 遍历起始行 Dim endRow As Long endRow = Range("C4").Value ' 遍历结束行 ' 关闭屏幕更新提升运行速度 Application.ScreenUpdating = False Dim c As Range ' 遍历目标列的指定行范围 For Each c In Range(checkCol & startRow & ":" & checkCol & endRow) ' 直接读取Range对象的Font.Bold属性 If c.Font.Bold = False Then c.EntireRow.Hidden = True Else c.EntireRow.Hidden = False End If Next c ' 恢复屏幕更新 Application.ScreenUpdating = True End Sub
使用注意事项
- 请确保C2单元格填入的是正确的列标(比如要判断A列就填
A,判断B列就填B) - C3、C4单元格请填入合法的数字行号,且结束行号不小于起始行号
- 如果目标单元格存在部分文字加粗、部分不加粗的情况,
c.Font.Bold会返回Null,可以添加判断逻辑处理这种场景,比如默认判定为不加粗隐藏:
If IsNull(c.Font.Bold) Or c.Font.Bold = False Then c.EntireRow.Hidden = True Else c.EntireRow.Hidden = False End If
内容的提问来源于stack exchange,提问作者irozak
相关产品推荐
相关产品推荐

