Change Border Color of a Range Without Changing the Linestyle/Weight












2















I have a nicely formatted range of cells with different border line weights (some of them are medium thickness and some of them are thin, in no particular pattern). I want to run a macro that changes the color of the borders to grey, but every time I do it, it changes all of the border weights to xlThin automatically. I want to keep the original line thickness so I don't have to go through and change the respective ones back to xlMedium, which would be tedious.



Can someone help me out? Is this possible?



The code I currently have is simple, and it changes the color correctly. It just also changes the line weight automatically, even though I don't specify the weight or linestyle at all:
Range("NamedRange").Borders.Color = RGB(150, 150, 150)










share|improve this question


















  • 2





    As a quick workaround, before you change the border color, why not just store the line type in a variable, then after the color change, reset it?

    – BruceWayne
    Jan 3 '17 at 14:44











  • Seems annoying. @BruceWayne 's idea is good. It could be abstracted into a sub which changes border colors while leaving weights alone.

    – John Coleman
    Jan 3 '17 at 14:52











  • @BruceWayne, thanks for the idea, but I don't know how to store it. I tried to store .Borders.Weight as a variant, but it just saves it as "2". Could you expand on how I would do this?

    – brettarded
    Jan 3 '17 at 15:05













  • Can you provide (simplified) VBA code of what you do?

    – Peter
    Jan 3 '17 at 15:09
















2















I have a nicely formatted range of cells with different border line weights (some of them are medium thickness and some of them are thin, in no particular pattern). I want to run a macro that changes the color of the borders to grey, but every time I do it, it changes all of the border weights to xlThin automatically. I want to keep the original line thickness so I don't have to go through and change the respective ones back to xlMedium, which would be tedious.



Can someone help me out? Is this possible?



The code I currently have is simple, and it changes the color correctly. It just also changes the line weight automatically, even though I don't specify the weight or linestyle at all:
Range("NamedRange").Borders.Color = RGB(150, 150, 150)










share|improve this question


















  • 2





    As a quick workaround, before you change the border color, why not just store the line type in a variable, then after the color change, reset it?

    – BruceWayne
    Jan 3 '17 at 14:44











  • Seems annoying. @BruceWayne 's idea is good. It could be abstracted into a sub which changes border colors while leaving weights alone.

    – John Coleman
    Jan 3 '17 at 14:52











  • @BruceWayne, thanks for the idea, but I don't know how to store it. I tried to store .Borders.Weight as a variant, but it just saves it as "2". Could you expand on how I would do this?

    – brettarded
    Jan 3 '17 at 15:05













  • Can you provide (simplified) VBA code of what you do?

    – Peter
    Jan 3 '17 at 15:09














2












2








2








I have a nicely formatted range of cells with different border line weights (some of them are medium thickness and some of them are thin, in no particular pattern). I want to run a macro that changes the color of the borders to grey, but every time I do it, it changes all of the border weights to xlThin automatically. I want to keep the original line thickness so I don't have to go through and change the respective ones back to xlMedium, which would be tedious.



Can someone help me out? Is this possible?



The code I currently have is simple, and it changes the color correctly. It just also changes the line weight automatically, even though I don't specify the weight or linestyle at all:
Range("NamedRange").Borders.Color = RGB(150, 150, 150)










share|improve this question














I have a nicely formatted range of cells with different border line weights (some of them are medium thickness and some of them are thin, in no particular pattern). I want to run a macro that changes the color of the borders to grey, but every time I do it, it changes all of the border weights to xlThin automatically. I want to keep the original line thickness so I don't have to go through and change the respective ones back to xlMedium, which would be tedious.



Can someone help me out? Is this possible?



The code I currently have is simple, and it changes the color correctly. It just also changes the line weight automatically, even though I don't specify the weight or linestyle at all:
Range("NamedRange").Borders.Color = RGB(150, 150, 150)







excel vba excel-vba






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jan 3 '17 at 14:37









brettardedbrettarded

1314




1314








  • 2





    As a quick workaround, before you change the border color, why not just store the line type in a variable, then after the color change, reset it?

    – BruceWayne
    Jan 3 '17 at 14:44











  • Seems annoying. @BruceWayne 's idea is good. It could be abstracted into a sub which changes border colors while leaving weights alone.

    – John Coleman
    Jan 3 '17 at 14:52











  • @BruceWayne, thanks for the idea, but I don't know how to store it. I tried to store .Borders.Weight as a variant, but it just saves it as "2". Could you expand on how I would do this?

    – brettarded
    Jan 3 '17 at 15:05













  • Can you provide (simplified) VBA code of what you do?

    – Peter
    Jan 3 '17 at 15:09














  • 2





    As a quick workaround, before you change the border color, why not just store the line type in a variable, then after the color change, reset it?

    – BruceWayne
    Jan 3 '17 at 14:44











  • Seems annoying. @BruceWayne 's idea is good. It could be abstracted into a sub which changes border colors while leaving weights alone.

    – John Coleman
    Jan 3 '17 at 14:52











  • @BruceWayne, thanks for the idea, but I don't know how to store it. I tried to store .Borders.Weight as a variant, but it just saves it as "2". Could you expand on how I would do this?

    – brettarded
    Jan 3 '17 at 15:05













  • Can you provide (simplified) VBA code of what you do?

    – Peter
    Jan 3 '17 at 15:09








2




2





As a quick workaround, before you change the border color, why not just store the line type in a variable, then after the color change, reset it?

– BruceWayne
Jan 3 '17 at 14:44





As a quick workaround, before you change the border color, why not just store the line type in a variable, then after the color change, reset it?

– BruceWayne
Jan 3 '17 at 14:44













Seems annoying. @BruceWayne 's idea is good. It could be abstracted into a sub which changes border colors while leaving weights alone.

– John Coleman
Jan 3 '17 at 14:52





Seems annoying. @BruceWayne 's idea is good. It could be abstracted into a sub which changes border colors while leaving weights alone.

– John Coleman
Jan 3 '17 at 14:52













@BruceWayne, thanks for the idea, but I don't know how to store it. I tried to store .Borders.Weight as a variant, but it just saves it as "2". Could you expand on how I would do this?

– brettarded
Jan 3 '17 at 15:05







@BruceWayne, thanks for the idea, but I don't know how to store it. I tried to store .Borders.Weight as a variant, but it just saves it as "2". Could you expand on how I would do this?

– brettarded
Jan 3 '17 at 15:05















Can you provide (simplified) VBA code of what you do?

– Peter
Jan 3 '17 at 15:09





Can you provide (simplified) VBA code of what you do?

– Peter
Jan 3 '17 at 15:09












2 Answers
2






active

oldest

votes


















4














This, on my Excel 2016, will only change the color of the cell border, without changing the size:



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


Does it still change the size for you?



Edit: Hm, I suspect there's something else going on in your code, as I can recolor a named range without it affecting the borders. However, just because I was already working on another alternative, you could also use these subs (and tweak as necessary)



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





share|improve this answer





















  • 1





    I think this is the solution; you can replicate the OPs issue by setting the .Borders.Color property on a range of >1 cell but if you iterate the cells then the issue does not occur.

    – Robin Mackenzie
    Jan 3 '17 at 15:10













  • Awesome! Works perfectly, thanks!

    – brettarded
    Jan 3 '17 at 15:16



















0














Try .Borders.Color = RGB(216,216,216)



I ran the below script to try to identify the closest color to normal gridlines. My eyes are not great so check it out yourself to find the best color. BTW I agree it makes no sense that MS overrides the border color defying reason. Angry employees and too much bureaucracy - that's my theory.



Sub borcol()
Dim i As Integer
For i = 1 To 250
ActiveCell.Borders.Color = RGB(i, i, i)
ActiveCell.Offset(1, 0).Select
Next i
End Sub





share|improve this answer

























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f41445924%2fchange-border-color-of-a-range-without-changing-the-linestyle-weight%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    4














    This, on my Excel 2016, will only change the color of the cell border, without changing the size:



    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


    Does it still change the size for you?



    Edit: Hm, I suspect there's something else going on in your code, as I can recolor a named range without it affecting the borders. However, just because I was already working on another alternative, you could also use these subs (and tweak as necessary)



    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





    share|improve this answer





















    • 1





      I think this is the solution; you can replicate the OPs issue by setting the .Borders.Color property on a range of >1 cell but if you iterate the cells then the issue does not occur.

      – Robin Mackenzie
      Jan 3 '17 at 15:10













    • Awesome! Works perfectly, thanks!

      – brettarded
      Jan 3 '17 at 15:16
















    4














    This, on my Excel 2016, will only change the color of the cell border, without changing the size:



    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


    Does it still change the size for you?



    Edit: Hm, I suspect there's something else going on in your code, as I can recolor a named range without it affecting the borders. However, just because I was already working on another alternative, you could also use these subs (and tweak as necessary)



    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





    share|improve this answer





















    • 1





      I think this is the solution; you can replicate the OPs issue by setting the .Borders.Color property on a range of >1 cell but if you iterate the cells then the issue does not occur.

      – Robin Mackenzie
      Jan 3 '17 at 15:10













    • Awesome! Works perfectly, thanks!

      – brettarded
      Jan 3 '17 at 15:16














    4












    4








    4







    This, on my Excel 2016, will only change the color of the cell border, without changing the size:



    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


    Does it still change the size for you?



    Edit: Hm, I suspect there's something else going on in your code, as I can recolor a named range without it affecting the borders. However, just because I was already working on another alternative, you could also use these subs (and tweak as necessary)



    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





    share|improve this answer















    This, on my Excel 2016, will only change the color of the cell border, without changing the size:



    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


    Does it still change the size for you?



    Edit: Hm, I suspect there's something else going on in your code, as I can recolor a named range without it affecting the borders. However, just because I was already working on another alternative, you could also use these subs (and tweak as necessary)



    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






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Jan 3 '17 at 15:25

























    answered Jan 3 '17 at 15:09









    BruceWayneBruceWayne

    17.6k113060




    17.6k113060








    • 1





      I think this is the solution; you can replicate the OPs issue by setting the .Borders.Color property on a range of >1 cell but if you iterate the cells then the issue does not occur.

      – Robin Mackenzie
      Jan 3 '17 at 15:10













    • Awesome! Works perfectly, thanks!

      – brettarded
      Jan 3 '17 at 15:16














    • 1





      I think this is the solution; you can replicate the OPs issue by setting the .Borders.Color property on a range of >1 cell but if you iterate the cells then the issue does not occur.

      – Robin Mackenzie
      Jan 3 '17 at 15:10













    • Awesome! Works perfectly, thanks!

      – brettarded
      Jan 3 '17 at 15:16








    1




    1





    I think this is the solution; you can replicate the OPs issue by setting the .Borders.Color property on a range of >1 cell but if you iterate the cells then the issue does not occur.

    – Robin Mackenzie
    Jan 3 '17 at 15:10







    I think this is the solution; you can replicate the OPs issue by setting the .Borders.Color property on a range of >1 cell but if you iterate the cells then the issue does not occur.

    – Robin Mackenzie
    Jan 3 '17 at 15:10















    Awesome! Works perfectly, thanks!

    – brettarded
    Jan 3 '17 at 15:16





    Awesome! Works perfectly, thanks!

    – brettarded
    Jan 3 '17 at 15:16













    0














    Try .Borders.Color = RGB(216,216,216)



    I ran the below script to try to identify the closest color to normal gridlines. My eyes are not great so check it out yourself to find the best color. BTW I agree it makes no sense that MS overrides the border color defying reason. Angry employees and too much bureaucracy - that's my theory.



    Sub borcol()
    Dim i As Integer
    For i = 1 To 250
    ActiveCell.Borders.Color = RGB(i, i, i)
    ActiveCell.Offset(1, 0).Select
    Next i
    End Sub





    share|improve this answer






























      0














      Try .Borders.Color = RGB(216,216,216)



      I ran the below script to try to identify the closest color to normal gridlines. My eyes are not great so check it out yourself to find the best color. BTW I agree it makes no sense that MS overrides the border color defying reason. Angry employees and too much bureaucracy - that's my theory.



      Sub borcol()
      Dim i As Integer
      For i = 1 To 250
      ActiveCell.Borders.Color = RGB(i, i, i)
      ActiveCell.Offset(1, 0).Select
      Next i
      End Sub





      share|improve this answer




























        0












        0








        0







        Try .Borders.Color = RGB(216,216,216)



        I ran the below script to try to identify the closest color to normal gridlines. My eyes are not great so check it out yourself to find the best color. BTW I agree it makes no sense that MS overrides the border color defying reason. Angry employees and too much bureaucracy - that's my theory.



        Sub borcol()
        Dim i As Integer
        For i = 1 To 250
        ActiveCell.Borders.Color = RGB(i, i, i)
        ActiveCell.Offset(1, 0).Select
        Next i
        End Sub





        share|improve this answer















        Try .Borders.Color = RGB(216,216,216)



        I ran the below script to try to identify the closest color to normal gridlines. My eyes are not great so check it out yourself to find the best color. BTW I agree it makes no sense that MS overrides the border color defying reason. Angry employees and too much bureaucracy - that's my theory.



        Sub borcol()
        Dim i As Integer
        For i = 1 To 250
        ActiveCell.Borders.Color = RGB(i, i, i)
        ActiveCell.Offset(1, 0).Select
        Next i
        End Sub






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 23 '18 at 20:04

























        answered Nov 23 '18 at 19:57









        GapusGapus

        11




        11






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f41445924%2fchange-border-color-of-a-range-without-changing-the-linestyle-weight%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            404 Error Contact Form 7 ajax form submitting

            How to know if a Active Directory user can login interactively

            TypeError: fit_transform() missing 1 required positional argument: 'X'