首页 > 解决方案 > VBA Excel格式化真的很慢

问题描述

我试图找出一种更好的方法来使用 VBA 格式化单元格。我正在尝试从 Excel 表单控件中替换一个选项按钮(它工作正常但很丑。它看起来像旧的 W95)。我没有使用activeX,因为如果我使用activex,我不能相信每个用户都能够打开这个工作簿。
所以,我试图使用一些 VBA 来格式化一个按下按钮的单元格。应该很容易将 SUB 格式化为已按下的格式,而另一个则为未按下的格式。但是这段代码运行时间不少于 13 秒!这是不可行的。

我进行了一些研究并找到了其他主题,包括“VBA 代码优化” VBA 代码优化

其他主题:
使用 vba 进行慢速单元格格式化?但我的情况只是边框和单元格颜色
格式化单元格时VBA代码极慢从我获得优化代码的地方



这是代码

Sub BtnSelect()

Dim t

t = Timer

With Selection
            .Borders(xlDiagonalDown).LineStyle = xlNone
            .Borders(xlDiagonalUp).LineStyle = xlNone
            With .Borders(xlEdgeLeft)
                .LineStyle = xlContinuous
                .Color = -1740185
                .TintAndShade = 0
                .Weight = xlMedium
            End With
            With .Borders(xlEdgeTop)
                .LineStyle = xlContinuous
                .Color = -1740185
                .TintAndShade = 0
                .Weight = xlMedium
            End With
            With .Borders(xlEdgeBottom)
                .LineStyle = xlContinuous
                .Color = -736322
                .TintAndShade = 0
                .Weight = xlMedium
            End With
            With .Borders(xlEdgeRight)
                .LineStyle = xlContinuous
                .Color = -736322
                .TintAndShade = 0
                .Weight = xlMedium
            End With
            .Borders(xlInsideVertical).LineStyle = xlNone
            .Borders(xlInsideHorizontal).LineStyle = xlNone
            With .Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .Color = 16576494
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
        
        End With
        
        Debug.Print Timer - t
End Sub

我究竟做错了什么?这个简单的操作需要这么长时间,有点愚蠢。非常感谢你!

标签: excelvbaformatcell

解决方案


这对我来说在 <0.02 秒内运行

Sub BtnSelect()

    Dim t

    t = Timer

    With Selection
        
        With .Borders()
            .LineStyle = xlContinuous
            .TintAndShade = 0
            .Weight = xlMedium
        End With
        
        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlDiagonalUp).LineStyle = xlNone
        .Borders(xlInsideVertical).LineStyle = xlNone
        .Borders(xlInsideHorizontal).LineStyle = xlNone
        
        .Borders(xlEdgeLeft).Color = -1740185
        .Borders(xlEdgeTop).Color = -1740185
        .Borders(xlEdgeBottom).Color = -736322
        .Borders(xlEdgeRight).Color = -736322
        
        .Interior.Color = 16576494
             
    End With
    
    Debug.Print Timer - t

End Sub

推荐阅读