技术求助:为财务小计添加双下边框与单上边框,VBA代码失效
解决财务小计单元格的单上边框+双下边框设置问题
原代码的逻辑是循环切换几种预设边框样式,但完全没有包含你需要的「单上边框+双下边框」组合,而且判断条件容易误触发最终清除边框的分支,导致无法得到想要的效果。
最简实现代码(直接设置目标样式)
如果不需要循环切换,直接给选中单元格设置单上边框和双下边框,用这段代码即可:
Sub SetSubtotalBorders() With Selection.Borders ' 清除原有所有边框 .LineStyle = xlNone ' 设置单上边框 .Item(xlEdgeTop).LineStyle = xlContinuous .Item(xlEdgeTop).Weight = xlThin ' 设置双下边框 .Item(xlEdgeBottom).LineStyle = xlDouble .Item(xlEdgeBottom).Weight = xlThin End With End Sub
带循环切换逻辑的改进版(保留循环切换功能,加入目标样式)
如果你需要保留原代码的循环切换逻辑(比如在无边框、单下边框、全细边框、单上+双下边框、全粗边框之间循环),可以修改代码如下:
Sub CycleBd() With Selection Dim hasSingleTopAndDoubleBottom As Boolean ' 判断当前是否是目标样式:单上边框+双下边框,其余无 hasSingleTopAndDoubleBottom = _ .Borders(xlEdgeTop).LineStyle = xlContinuous And _ .Borders(xlEdgeTop).Weight = xlThin And _ .Borders(xlEdgeBottom).LineStyle = xlDouble And _ .Borders(xlEdgeBottom).Weight = xlThin And _ .Borders(xlEdgeLeft).LineStyle = xlNone And _ .Borders(xlEdgeRight).LineStyle = xlNone And _ .Borders(xlInsideHorizontal).LineStyle = xlNone And _ .Borders(xlInsideVertical).LineStyle = xlNone Select Case True Case .Borders.LineStyle = xlNone ' 无边框→单下边框 .Borders(xlEdgeBottom).Weight = xlThin Case .Borders(xlEdgeBottom).Weight = xlThin And .Borders(xlEdgeTop).LineStyle = xlNone ' 单下边框→全细边框 .Borders.Weight = xlThin Case .Borders.Weight = xlThin ' 全细边框→目标样式(单上+双下) .Borders.LineStyle = xlNone .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeBottom).LineStyle = xlDouble .Borders(xlEdgeBottom).Weight = xlThin Case hasSingleTopAndDoubleBottom ' 目标样式→全粗边框 .Borders.LineStyle = xlNone .BorderAround colorIndex:=xlAutomatic, Weight:=xlThick Case Else ' 全粗边框→无边框 .Borders.LineStyle = xlNone End Select End With End Sub
原代码问题说明
- 没有处理「单上边框+双下边框」的样式分支,所以永远触发不到你需要的效果
- 判断
.Borders.Weight = xlThin时,只要有一个边框是细的就会触发,但实际全细边框才是预期,容易误判 - 最终的Else分支会清除所有边框,当样式不在预设的几个分支里时就会触发
内容的提问来源于stack exchange,提问作者Bcayn
相关产品推荐
相关产品推荐

