Solved

VBA simple formatting qstn

Posted on 2016-11-07
4
57 Views
Last Modified: 2016-11-08
I have 20 columns on my Sheet1
Columns A-D are filled with Location, Name1, Name2, Cost
the rest of Columns is just data per month.
I already have a Range and VBA to put grid all around my ranged cells.
I need a VBA code to put bolded line everytime Name1 (Column B) changes - so user can see "blocks" of data clearly.
Bolded line on the bottom of the last occurance of Name1
So if there is John Doe, Bill Smith...
After John Doe there will be a horizontal bolded line going all thru Col A thru Z (whatever 20th Col is)
0
Comment
Question by:CABRLU63
  • 2
4 Comments
 
LVL 30

Expert Comment

by:Subodh Tiwari (Neeraj)
ID: 41878118
You may try something like this.....
Sub Formatting()
Dim lr As Long, lc As Long, i As Long
lr = Cells(Rows.Count, 2).End(xlUp).Row
lc = Cells(1, Columns.Count).End(xlToLeft).Column
For i = 2 To lr
    If Cells(i, 2) <> Cells(i + 1, 2) Then
        With Range(Cells(i, 1), Cells(i, lc)).Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlMedium
        End With
    End If
Next i
End Sub

Open in new window

0
 
LVL 30

Accepted Solution

by:
Subodh Tiwari (Neeraj) earned 500 total points
ID: 41878120
Or better to remove the existing bottom lines before running the code in case you run the code after new data added or edited.

Sub Formatting()
Dim lr As Long, lc As Long, i As Long
lr = Cells(Rows.Count, 2).End(xlUp).Row
lc = Cells(1, Columns.Count).End(xlToLeft).Column
For i = 2 To lr
    Range(Cells(i, 1), Cells(i, lc)).Borders(xlEdgeBottom).LineStyle = xlNone
Next i
For i = 2 To lr
    If Cells(i, 2) <> Cells(i + 1, 2) Then
        With Range(Cells(i, 1), Cells(i, lc)).Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlMedium
        End With
    End If
Next i
End Sub

Open in new window

0
 
LVL 33

Expert Comment

by:Rob Henson
ID: 41878514
I realise that this suggestion changes the way you are working but I am going to throw it out there anyway.

Instead of masses of columns, you could use a datagrid format with the following columns:
Location,
Name1,
Name2,
Cost,
Value,
Month.

The value and month columns would replace your multiple columns. Rather than a column for each month there would be one column and in that column you specify the month or even the actual date on which the value has occurred. This would mean that there are multiple lines per Location/Name etc.

With the data in this format you could then use a Pivot Table to summarise the data and the formatting of the Pivot Table can be set so that there is clear delineation between names etc and would adjust each time the Pivot Table is refreshed.
1
 

Author Closing Comment

by:CABRLU63
ID: 41879241
Rob Henson, I can't use Pivots. Not feasible for this project.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Modern/Metro styled message box and input box that directly can replace MsgBox() and InputBox()in Microsoft Access 2013 and later. Also included is a preconfigured error box to be used in error handling.
Describes a method of obtaining an object variable to an already running instance of Microsoft Access so that it can be controlled via automation.
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.
This Micro Tutorial will demonstrate how to use a scrolling table in Microsoft Excel using the INDEX function.

733 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question