单元格上的VBA反向格式取消select
现在,当用户select一个单元格时,通过添加一个中等厚度的边框来突出显示关联的单元格。 这是为了一个时间的日历。
例如,当用户单击D4时,必须将边框添加到B5,并且当用户取消selectD4时,它必须取消B5:
代码如下,它的工作原理:
If Not Intersect(Target, Range("$D$4")) Is Nothing Then Range("$B$5").Borders(xlEdgeBottom).Weight = xlMedium Range("$B$5").Borders(xlEdgeTop).Weight = xlMedium Range("$B$5").Borders(xlEdgeLeft).Weight = xlMedium Range("$B$5").Borders(xlEdgeRight).Weight = xlMedium Else Range("$B$5").Borders(xlEdgeBottom).Weight = xlThin Range("$B$5").Borders(xlEdgeTop).Weight = xlThin Range("$B$5").Borders(xlEdgeLeft).Weight = xlThin Range("$B$5").Borders(xlEdgeRight).Weight = xlThin End If
这样做的麻烦是,每次select任何单元格时,它都会运行30个单元格。 这意味着,即使没有任何变化,所有30个单元格的格式检查和重置,或者,所有30个“其他”块每次不必要地运行。 这仅仅是几百个命令,但是它确实很快就落后了。 有没有办法清理这个? 否则,它将需要30个单元格* 11行代码,这似乎是过度的。
您不必单独调出边界:
Dim wt as Long If Not Intersect(Target, Range("$D$4")) Is Nothing Then wt = xlMedium Else wt = xlThin End If Range("$B$5").Borders.Weight = wt
如何捕捉选区并不是很清楚,但是更快的方法可能是将整个范围设置为xlThin
,然后处理选定的单元格。
这是我最好的猜测,你想做什么。 你只给出一个例子,所以这是不可能的,但我认为你想在下面的单元格和选定的单元格的左边两个厚边框。
'Make them all thin Range("B4:B10").Borders.Weight = xlThin If Not Intersect(Target, Range("D4:D9")) Is Nothing Then 'Make medium border on cell one below and two to the right Target.Offset(1,-2).Borders.Weight = xlMedium End If
此代码属于Worksheet_SelectionChange
事件。 (大概你已经知道了。)
你有权提出一个问题; 几乎没有任何理由复制粘贴代码多次。 如果你发现自己这样做,那么你可能错过了一个更容易做事的方式。