返回列表 上一主題 發帖

[發問] 選擇單元格時欄列變色

[發問] 選擇單元格時欄列變色

未變色.PNG
2023-5-3 17:44


Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    On Error Resume Next
     If Target.Count > 1 Then Exit Sub
    Cells.FormatConditions.Delete
   
With Target.EntireColumn.FormatConditions  '欄變色
        .Delete
        .Add xlExpression, , "TRUE"
        .Item(1).Interior.ColorIndex = Int(28)
    End With
   
With Target.EntireRow.FormatConditions  '列變色
        .Delete
        .Add xlExpression, , "TRUE"
        .Item(1).Interior.ColorIndex = Int(35)
    End With
   
With Target.FormatConditions  '單元格變色
        .Delete
        .Add xlExpression, , "TRUE"
        .Item(1).Interior.ColorIndex = Int(4)
    End With
End Sub

各位大大
小弟為了方便辨識目前的看哪個欄列,上網去找了"選擇單元格時欄列變色"的語法
確實是有達到我要的效果
但是
燈號那個欄位卻不見了

燈號消失.PNG
2023-5-3 17:44


請問上面那段語法哪裡寫錯,煩請知道的大大們幫助小弟解惑

回復 1# cowww


    謝謝前輩發表此主題
後學研習方案如下,請前輩參考

執行結果:
20230504_1.jpg
2023-5-4 08:12



Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
   Dim xR As Range, xA As Range
   If .Columns.Count = Columns.CountLarge Then Exit Sub
   If .Count > 1 Or .Column = 1 Then Exit Sub
   Set xR = .Cells: Set xA = Range([B1], Cells(1, Columns.Count)).EntireColumn
   With Intersect(ActiveSheet.UsedRange, xA)
      .Interior.ColorIndex = xlNone
      Intersect(xR.EntireRow, .Cells).Interior.ColorIndex = 6
      Intersect(xR.EntireColumn, .Cells).Interior.ColorIndex = 6
   End With
   .Interior.ColorIndex = 4
End With
End Sub
看得懂是應該的,懂得應用才像學生,臉皮厚點學會更謹慎積極

TOP

回復 2# Andy2483


非常感謝Andy2483大大的解惑
但是
搞定了列位,變成欄位的原來顏色不見了

變色前
變色前.PNG
2023-5-4 08:52


變色後
變色後.PNG
2023-5-4 08:52

TOP

本帖最後由 Andy2483 於 2023-5-4 09:36 編輯

回復 3# cowww


    謝謝前輩回復
後學學習方案如下,請前輩參考

執行結果:
20230504_2.jpg
2023-5-4 09:27



Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
   Dim xR As Range, xA As Range, xB As Range
   If .Columns.Count = Columns.CountLarge Then Exit Sub
   If .Count > 1 Or .Column = 1 Or .Row = 1 Then Exit Sub
   Set xR = .Cells: Set xA = Range([B1], Cells(1, Columns.Count)).EntireColumn
   Set xB = Range([A2], Cells(Rows.Count, 1)).EntireRow
   With Intersect(ActiveSheet.UsedRange, xA, xB)
      .Interior.ColorIndex = xlNone
      Intersect(xR.EntireRow, .Cells).Interior.ColorIndex = 6
      Intersect(xR.EntireColumn, .Cells).Interior.ColorIndex = 6
   End With
   .Interior.ColorIndex = 4
End With
End Sub
看得懂是應該的,懂得應用才像學生,臉皮厚點學會更謹慎積極

TOP

回復 4# Andy2483

非常感謝Andy2483大大的解惑
欄位的背景顏色還是會消失
變色前.PNG
2023-5-4 10:15


變色後.PNG
2023-5-4 10:15

TOP

回復 5# cowww


    謝謝前輩再回復,謝謝論壇
後學學習方案如下,請前輩參考

標題列在第4列,執行結果:
20230504_3.jpg
2023-5-4 10:29



Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
   Dim xR As Range, xA As Range, xB As Range
   If .Columns.Count = Columns.CountLarge Then Exit Sub
   If .Count > 1 Or .Column = 1 Or .Row < 5 Then Exit Sub
   Set xR = .Cells: Set xA = Range([B1], Cells(1, Columns.Count)).EntireColumn
   Set xB = Range([A5], Cells(Rows.Count, 1)).EntireRow
   With Intersect(ActiveSheet.UsedRange, xA, xB)
      .Interior.ColorIndex = xlNone
      Intersect(xR.EntireRow, .Cells).Interior.ColorIndex = 6
      Intersect(xR.EntireColumn, .Cells).Interior.ColorIndex = 6
   End With
   .Interior.ColorIndex = 4
End With
End Sub
看得懂是應該的,懂得應用才像學生,臉皮厚點學會更謹慎積極

TOP

回復 6# Andy2483

非常感謝Andy2483大大的解惑

成功了
變色後.PNG
2023-5-4 10:49

TOP

回復 6# Andy2483

可否請Andy2483大大解惑一下這段語法
小弟完全看不懂

TOP

本帖最後由 准提部林 於 2023-5-4 10:56 編輯

這個填色方法//
1) 影響儲存格的原有底色(包含選取區的範圍)
2) 不能使用複製或還原功能

TOP

回復 8# cowww


    謝謝論壇,謝謝各位前輩,請各位前輩指教

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
'↑以下是關於觸發的程序
   Dim xR As Range, xA As Range, xB As Range
   '↑宣告(xR,xA,xB)是 儲存格變數
   If .Columns.Count = Columns.CountLarge Then Exit Sub
   '↑如果觸發欄數是 最大欄數!就結束程式執行
   If .Count > 1 Or .Column = 1 Or .Row < 5 Then Exit Sub
  '↑如果觸發格數大於1 或 觸發欄位數是1(A欄) 或觸發列號小於 5!就結束程式執行
   Set xR = .Cells: Set xA = Range([B1], Cells(1, Columns.Count)).EntireColumn
   '↑令xR這儲存格變數是 觸發的儲存格
   '↑令xA這儲存格變數是 ([B1]到 第1列最後欄範圍存格)所在欄的全部儲存格

   Set xB = Range([A5], Cells(Rows.Count, 1)).EntireRow
   '↑令xB這儲存格變數是 ([A5]到 A欄最後列範圍存格)所在列的全部儲存格
   With Intersect(ActiveSheet.UsedRange, xA, xB)
   '↑以下是關於三個儲存格區域交集後的儲存格區域 程序
   '1.本表有使用的儲存格 :2.xA變數 :3.xB變數

      .Interior.ColorIndex = xlNone
      '↑令此區域儲存格底色是 無色
      Intersect(xR.EntireRow, .Cells).Interior.ColorIndex = 6
      '↑令觸發格所在此區域儲存格列底色是 黃色
      Intersect(xR.EntireColumn, .Cells).Interior.ColorIndex = 6
      '↑令觸發格所在此區域儲存格欄底色是 黃色
   End With
   .Interior.ColorIndex = 4
   '↑令觸發格底色是 綠色
End With
End Sub
看得懂是應該的,懂得應用才像學生,臉皮厚點學會更謹慎積極

TOP

        靜思自在 : 慈悲沒有敵人,智慧不起煩惱。
返回列表 上一主題