2014-12-05 297 views
1

當用戶選擇一個單元格時,通過添加中等厚度的邊框來突出顯示關聯的單元格。這是爲了一個時間日曆。單元格上的VBA反向格式取消選擇

例如,當用戶點擊D4它必須添加邊框B5,並且當用戶取消選擇D4它必須取消邊界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 

這樣做的麻煩在於,每次選擇任何單元格時,它都會運行30個單元格。這意味着,即使沒有任何變化,所有30個單元格的格式檢查和重置,或者,所有30個「其他」塊每次不必要地運行。這只是幾百個命令,但它很快就會滯後。有沒有辦法清除它?否則,它將需要30個單元* 11行代碼,看起來過多。

+1

這將有助於顯示觸發格式的代碼。如果我們有更多的上下文,你的代碼可能會更簡潔。 – 2014-12-05 07:21:07

+1

我假設你正試圖爲你的excel添加一個「焦點」寄宿生功能,而你的「其他」部分正在重新設置所有其他寄宿生。但是,您需要重置前面1個選定單元的邊界。你可以記錄當前選中的單元格並將其保存在vba或隱藏的單元格中,並只在「If」部分中重置該單元格? – Larry 2014-12-05 07:29:46

回答

2

您不必單獨叫出邊界:

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然後處理選定的單元格。

0

這是我最好的猜測,你想做什麼。你只給出一個例子,所以不可能確定,但​​我認爲你需要在所選單元格的下方和兩個單元格上的厚邊框。

'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事件。 (想必你已經知道這一點。)

enter image description here

你沒有權利問一個問題;幾乎沒有任何理由複製粘貼代碼多次。如果你發現自己在做這件事,那麼你可能錯過了一個更簡單的做事方式。