单元格上的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事件。 (大概你已经知道了。)

在这里输入图像说明

你有权提出一个问题; 几乎没有任何理由复制粘贴代码多次。 如果你发现自己这样做,那么你可能错过了一个更容易做事的方式。