2017-01-03 6 views
2

境界線の太さが異なるセルがあります(中には厚いものもあれば、薄いものもあります)。私は境界線の色を灰色に変えるマクロを実行したいが、私がそれを行うたびに、すべての境界線の重みをxlThinに自動的に変更する。元の線の太さを維持して、それぞれのものをxlMediumに戻す必要がないので、面倒な作業になります。ラインスタイル/ウェイトを変更せずに範囲の境界線を変更する

誰かが私を助けることができますか?これは可能ですか?

私が現在持っているコードはシンプルで、色が正しく変わります。 Range("NamedRange").Borders.Color = RGB(150, 150, 150)

+2

ことができ、その理由だけで線種を保存しません変数を変更した後、色の変更後にリセットしますか? – BruceWayne

+0

迷惑に見えます。 @ブルースウェインの考えは良いです。これは、重力だけを残しながら境界線の色を変更するサブに抽象化することができます。 –

+0

@ BruceWayne、アイデアのおかげで、私はそれを格納する方法を知らない。私はバリアントとして.Borders.Weightを格納しようとしましたが、 "2"として保存します。私はこれをどのようにして展開することができますか? – brettarded

答えて

3

これは、Excel 2016では、サイズを変更せずにセルの境界線の色のみを変更するだけですが、線の太さも自動的に変更されます。 :

Sub changeColorOnly() 
Dim rng As Range, cel As Range 
Set rng = Range("C6:C9") 

For Each cel In rng 
    cel.Borders.Color = RGB(150, 150, 150) 
Next cel 

End Sub 

サイズはまだ変わりますか?

編集:私は境界線に影響を与えずに名前付き範囲を再描画できるので、コード内で何か他のことが起こっていると思われます。しかし、私はすでに別の代替に取り組んでいたという理由だけで、あなたが境界線の色を変更する前に、あなたはまた、迅速な回避策としてこれらのサブルーチンを使用(および必要に応じて微調整)

Dim brdrTop, brdrLeft, brdrRight, brdrBtm, brdrInside 

Sub changeColor() 
saveBorderSize Range("myNamedRange") 
Range("MyNamedRange").Borders.Color = RGB(150, 150, 150) 
resetBorderSize Range("myNamedRange") 
End Sub 

Private Sub saveBorderSize(cel As Range) 
brdrTop = cel.Borders(xlEdgeTop).Weight 
brdrLeft = cel.Borders(xlEdgeLeft).Weight 
brdrRight = cel.Borders(xlEdgeRight).Weight 
brdrBtm = cel.Borders(xlEdgeBottom).Weight 
brdrInside = cel.Borders(xlInsideHorizontal).Weight 
End Sub 

Private Sub resetBorderSize(cel As Range) 
cel.Borders(xlEdgeTop).Weight = brdrTop 
cel.Borders(xlEdgeLeft).Weight = brdrLeft 
cel.Borders(xlEdgeRight).Weight = brdrRight 
cel.Borders(xlEdgeBottom).Weight = brdrBtm 
cel.Borders(xlInsideHorizontal).Weight = brdrInside 
End Sub 
+1

これは解決策だと思います。 > 1セルの範囲で '.Borders.Color'プロパティを設定することによってOPの問題を複製できますが、セルを反復すると問題は発生しません。 –

+0

驚くばかり!完璧に動作します、ありがとう! – brettarded

関連する問題