2017-09-22 31 views
1

に返されます。Excelに複数の日付を含む表があります。表のレコードはカレンダー(別のシート上)にリンクされているため、表の日付をクリックするとカレンダー内のその日付のセルに移動します。カレンダーシートには、次のVBAがあり、そのシートのアクティブセルが黄色で強調表示されます。以下そのコードを参照してください。Excel VBA塗りつぶしの色Xのセルが塗りつぶしのない色に変更された場合、セルの塗りの色がX

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Application.ScreenUpdating = False 
    Dim cell As Range 
'Turn off ScreenUpdating (speeds up code) 
    Application.ScreenUpdating = False 

'Loop through each cell in the ActiveSheet 
    For Each cell In ActiveSheet.UsedRange 

    'Check for a specific fill color 
     If cell.Interior.Color = RGB(255, 255, 0) Then 

     'Remove Fill Color 
      cell.Interior.Color = xlNone 

     End If 

    Next cell 
    ' Highlight the active cell 
    Target.Interior.ColorIndex = 6 
    Application.ScreenUpdating = True 
End Sub 

それは、ユーザーが最初に塗りつぶしの色を含んカレンダーシート上の別の細胞を活性化すれば、それはセルの元の色ことをクリアするという事実を除いて、魔法のように動作します。これは、塗りつぶしがないセルでは問題ありませんが、以前に塗りつぶされたセルをアクティブにしてからクリックすると、カレンダーがぼやけて見えます。

私は何を求めているのか分かりませんが、私がしたいのは私のコード設定をそういう形でして、シート上の任意のセルが塗りつぶしの色X(紫色私の場合)を塗りつぶしないようにするには、そのセルを色Xに戻すことが必要です。

私は基本的にExcelでカラーレイヤーを塗りつぶす必要があります。私はそれをMicrosoftに提案するべきです。

私はVBAの全員ですので、これが可能かどうか、あるいは私がこの質問を書いた方法がうまくいけば教えてください。

+0

セルのデフォルトの色(x色)は常に同じですか? –

+0

こんにちはKresimir L.いいえ私はもっと具体的にすべきだったすみません。合計3色あります。 カラー1:R-96、G-73、およびB-122 カラー2:R-177、G-160、およびB-199 カラー3:R-228、 G-223、B-236が挙げられる。それは今までのものに過ぎません3 – UserX

+0

あなたの説明によれば、以前に使用されていた色にセルを戻したいと思うように聞こえますか?あれは正しいですか?もしあなたが配列や隠れたシートのセルの色やセルのアドレスを把握しておかなければならず、誰かがセルをクリックするたびに、その配列を検索して色をリセットする必要があるかどうかを調べます。 – Miguel

答えて

0

私は(A2、A3)あなたが望むいずれかを選択することができ、以前の状況を保存するために2つの範囲を使用します(これをチェックしてください:。

Option Explicit 




Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Application.ScreenUpdating = False 
    Dim cell As Range 
    Dim i As String 
    Dim i1 As Long 

    On Error Resume Next 

    i = Range("a3").Value 
    i1 = Range("a2").Value 


'Turn off ScreenUpdating (speeds up code) 
    Application.ScreenUpdating = False 

'Loop through each cell in the ActiveSheet 
    For Each cell In ActiveSheet.UsedRange 

    'Check for a specific fill color 
     If cell.Interior.Color = RGB(255, 255, 0) Then 

     'Remove Fill Color 
      cell.Interior.Color = xlNone 

     End If 

    Next cell 

    Range(i).Interior.Color = i1 

    ' Highlight the active cell 
    ' If Target.Interior.ColorIndex = -4142 Then 
    Range("a3").Value = Target.Address 
    Range("a2").Value = Target.Interior.Color 
    Target.Interior.ColorIndex = 6 

    ' End If 

    Application.ScreenUpdating = True 
End Sub 
+0

しかし、助けてくれてありがとう、それは私が探しているものを正確に私に与えることはありません。以前にシートに配置されていた色を維持していても、以前に塗りつぶされた同じセルは、アクティブになると黄色に変化しません。 – UserX

+0

私は私のコードを更新する..私はそれがあなたがほしいと思う –

+0

私はこれだと思う!塗りつぶしの色は元の色から少し変わりますが、これはうまくいくと思います!私はもう少しそれをテストしていますが、それは素晴らしいです。他に注意すべき点の1つは、自分のユースケースでは完全にうまくいきます。 – UserX

0

これはあなたが唯一のセルを選択した場合に動作します以下のコードを使用してみてくださいこのコードではの値をRGBの値で代用しているため、ヘルパーセルを使用している場合は、M1 & N1と入力してください。可能であれば、調整をお試しくださいRGBカラーからColorIndexスペクトルへ

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Application.ScreenUpdating = False 
Dim cell As Range 
'Turn off ScreenUpdating (speeds up code) 
Application.ScreenUpdating = False 
Range(Range("M1")).Interior.ColorIndex = Range("N1").Value 
Range("M1").Value = Target.Address 
Range("N1").Value = Range(Target.Address).Interior.ColorIndex 

' Highlight the active cell 
Range("M1").Value = Target.Address 
Range("N1").Value = Range(Target.Address).Interior.ColorIndex 
Target.Interior.ColorIndex = 6 
Application.ScreenUpdating = True 
End Sub 
関連する問題