返回列表 上一主題 發帖

[發問] VBA點選儲存格指定範圍自動反色

[發問] VBA點選儲存格指定範圍自動反色


以下程式碼是在網路上找到的,但想請教該如何修改成以下想要的條件呢?
1. 希望反色條件只在I7:O18有作用,且改以整列反色呈現。例如:點選K9時,I9:O9會整列反色、點選N15時,I15:O15整列反色
2. 發現使用此VBA之後無法複製貼上或剪下貼上,例如當我複製B7後,只要滑鼠點選任何儲存格欲貼上時,複製的選項就會消失。剪下欲貼上的功能亦相同
以上求解~~~~~~~

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
   If Application.CutCopyMode = xlCopy Then Me.Paste
   On Error Resume Next
   [colorCell].FormatConditions.Delete
   Target.Name = "colorCell"
   With [colorCell].FormatConditions      ' 設定格式化條件
       .Delete
       .Add xlExpression, , "TRUE"        ' 條件(一)內公式
       .Item(1).Interior.ColorIndex = 36  ' .Item(1)等於FormatConditions(1)
       .Item(1).Font.Bold = True
   End With
End Sub



測試檔.rar (15.08 KB)
*宅女一枚無誤*

回復 19# GBKEE

很感謝n大、准大、G大三位鼎力相助。感謝~~~

也感謝有真麼好的討論園地。

TOP

湊一腳 參考看看
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     Dim xA As Range, xR As Range
  3.     Set xA = [I7:O18]
  4.     xA.Interior.ColorIndex = 0
  5.     If Intersect(xA, Target) Is Nothing Then Exit Sub
  6.     For Each xR In xA.Columns
  7.         If Not Intersect(xR, Target) Is Nothing Then xR.Interior.Color = vbYellow
  8.     Next
  9.     For Each xR In xA.Rows
  10.         If Not Intersect(xR, Target) Is Nothing Then xR.Interior.Color = vbYellow
  11.     Next
  12.     Target.Interior.Color = vbRed
  13. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dim xA As Range, SelArea As Range, xR As Range
Set xA = [I7:O18]: xA.Interior.ColorIndex = 0
Set SelArea = Intersect(xA, Target)
If SelArea Is Nothing Then Exit Sub
For Each xR In SelArea
   xA.Rows(xR.Row - xA.Row + 1).Interior.Color = vbYellow
   xA.Columns(xR.Column - xA.Column + 1).Interior.Color = vbYellow
Next
SelArea.Interior.Color = vbRed
End Sub

TOP

回復 16# Hyuan


  已回覆你了,上上樓
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 12# n7822123
謝謝大大鼎力幫忙。
希望儲存格所在的[行]也有顏色,如附件。

儲存格變色.zip (7.66 KB)

TOP

本帖最後由 n7822123 於 2018-12-9 20:23 編輯

回復 14# Hyuan

紅色字部分,可自行更改

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set 範圍 = [I7:O18]   '請自行更改要變色範圍,下面程式的顏色也自行更改
If Intersect(Target, 範圍) Is Nothing Then Exit Sub '選取範圍與設定範圍無交集則離開
範圍.Interior.ColorIndex = -4142 '先恢復無顏色
For Each rg In Target  '逐一確認選取的範圍,若在設定範圍內則整列變色(選取的範圍有可能在設定範圍外)
  If Not Intersect(rg, 範圍) Is Nothing Then Cells(rg.Row, 範圍(1).Column).Resize(, 範圍.Columns.Count).Interior.Color = RGB(255, 255, 0)
  If Not Intersect(rg, 範圍) Is Nothing Then Cells(範圍(1).Row, rg.Column).Resize(範圍.Rows.Count).Interior.Color = RGB(255, 255, 0)
Next
Intersect(Target, 範圍).Interior.Color = RGB(255, 0, 0) '確認選取的範圍,然後變色
End Sub

TT20170225-02(選取儲存格,列變色)+1.rar (9.18 KB)
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 11# 准提部林
表達不完整,原附件作廢。

TT20170225-02(選取儲存格,列變色).zip (9.95 KB)

TOP

回復 11# 准提部林

附上附件
請教准大要如何做到如附件的畫面。
謝謝你。

TT20170225-02(選取儲存格,列變色).zip (9.94 KB)

TOP

本帖最後由 n7822123 於 2018-12-9 15:46 編輯

回復 10# Hyuan

是這樣嗎? 紅色字部分請自行更改!
我沒有用到定義名稱的部分

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set 範圍 = [C4:H10]   '請自行更改要變色範圍,下面程式的顏色也自行更改
If Intersect(Target, 範圍) Is Nothing Then Exit Sub '選取範圍與設定範圍無交集則離開
範圍.Interior.ColorIndex = -4142 '先恢復無顏色
For Each rg In Target  '逐一確認選取的範圍,若在設定範圍內則整列變色(選取的範圍有可能在設定範圍外)
  If Not Intersect(rg, 範圍) Is Nothing Then Cells(rg.Row, 範圍(1).Column).Resize(, 範圍.Columns.Count).Interior.Color = RGB(100, 255, 255)
Next
Intersect(Target, 範圍).Interior.Color = RGB(255, 0, 0) '逐一確認選取的範圍,然後變色
End Sub

儲存格變色.rar (11.11 KB)
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

        靜思自在 : 發脾氣是短暫的發瘋。
返回列表 上一主題