Solved

Format Table via VBA

Posted on 2011-09-27
12
265 Views
Last Modified: 2012-06-27
Sub Macro1()
    
    Dim lEndrow As Long, rng1 As Range
    lEndrow = Sheets("Payroll Summary").Range("A" & Sheets("Pivots").Rows.Count).End(xlUp).Row
   
    Set rng1 = Sheets("Payroll Summary").Range("A1:lEndRow")
    ActiveSheet.ListObjects("rng1").TableStyle = "TableStyleMedium1"
    
End Sub

Open in new window


Hi,

I have the above macro designed and some what toyed with :o

When I run it, it gives an error (as expected)

   Set rng1 = Sheets("Payroll Summary").Range("A1:lEndRow")

I really suspect the error is at the end. Could anyone please help me integrate the last row into this formatting?

Much appreciated!
0
Comment
Question by:Shanan212
  • 5
  • 4
  • 3
12 Comments
 
LVL 13

Author Comment

by:Shanan212
ID: 36712503
Even when the range is correct in other way, the next line gives error 'subscript' out of range

I used this to test it out (but I do want to define the end of range

Set rng1 = Sheets("Payroll Summary").Range("A1:C99")
0
 
LVL 33

Assisted Solution

by:Norie
Norie earned 200 total points
ID: 36712508
Which columns do you want to format?

You can try this but it will only be for column A:

Range("A1:A" & lEndRow)

If you wanted to format columns A:F you would use something like this.

Range("A1:F" & lEndRow)
0
 
LVL 13

Author Comment

by:Shanan212
ID: 36712570
That solves the range error but I think I am defining a range and then treating it as a table.

In that case, how would I define a range as a table?

Much appreciated!
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 41

Accepted Solution

by:
dlmille earned 300 total points
ID: 36712621
Try this:

 
Sub convertToTable()
Dim wkb As Workbook
Dim sht As Worksheet
Dim tblRng As Range

    Set wkb = ThisWorkbook
    Set sht = wkb.Sheets("Payroll Summary")
    
    Set tblRng = sht.Range("A1:C" & sht.Range("A" & sht.Rows.Count).End(xlUp).Row)
    
    sht.ListObjects.Add(xlSrcRange, tblRng, , xlYes).Name = "Payroll_Table"
End Sub

Open in new window


See attached...

Dave
Copy-of-GL-Summary---Master-File.xls
0
 
LVL 33

Expert Comment

by:Norie
ID: 36712645
What exactly do you mean by a table?

If you actually want to format a listobject you just need it's name, you don't need to define it's range.

I'm pretty sure that name isn't 'rng' which you are using in the code, and is what is causing the error.

You need something like this:

ActiveSheet.ListObjects(<TableName>).TableStyle = "TableStyleMedium1"

Replace <TableName> with the name of the table.

If there's only one table on the sheet you can use ListObjects(1).
0
 
LVL 41

Expert Comment

by:dlmille
ID: 36712722
The code I provided creates the table - from that point, you can use the table's name to affect changes, as imnorie as suggested.
0
 
LVL 13

Author Closing Comment

by:Shanan212
ID: 36712767
Imnorie,

I could do that but the table get deleted every time I run another macro. So I have to 'define' a table on VBA side and then assign a formatting!

Dave,

Quick question,

Where in your coding are you assigning the formatting?
0
 
LVL 41

Expert Comment

by:dlmille
ID: 36712798
I didn't - just went with the defaults.

here's with the formatting:

Sub convertToTable()
Dim wkb As Workbook
Dim sht As Worksheet
Dim tblRng As Range
Dim mytable As Object

    Set wkb = ThisWorkbook
    Set sht = wkb.Sheets("Payroll Summary")
    
    Set tblRng = sht.Range("A1:C" & sht.Range("A" & sht.Rows.Count).End(xlUp).Row)
    
    sht.ListObjects.Add(xlSrcRange, tblRng, , xlYes).Name = "Payroll_Table"
    Set mytable = sht.ListObjects("Payroll_Table")
    mytable.TableStyle = "TableStyleMedium1"
End Sub

Open in new window

0
 
LVL 13

Author Comment

by:Shanan212
ID: 36712875
Thanks! This sort of info is hard to find over internet!
0
 
LVL 41

Expert Comment

by:dlmille
ID: 36712901
Sometimes I just record a macro while I do stuff I'd never coded before.  After that, I start googling :)

Dave
0
 
LVL 13

Author Comment

by:Shanan212
ID: 36713254
Yup! I do that too :)
0
 
LVL 33

Expert Comment

by:Norie
ID: 36713379
If you don't know the name of the table and it is the only one on the activesheet you can use ListObjects(1).
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Excel Formula 5 45
Remove duplicates using cell values VBA 2 32
Office 2016 without internet 6 38
Dropbox in Windows Server 2008 4 30
INDEX and MATCH can be used to great effect to replace HLOOKUP and VLOOKUP as it does not have the limitation of needing the data to be sorted so that the reference value is in the first column or row. It also has the ability to perform a bi-directi…
This article will guide you to convert a grid from a picture into Excel format using Microsoft OneNote and no other 3rd party application.
The viewer will learn how to create a normally distributed random variable in Excel, use a normal distribution to simulate the return on an investment over a period of years, Create a Monte Carlo simulation using a normal random variable, and calcul…
This Micro Tutorial demonstrates in Microsoft Excel how to consolidate your marketing data by creating an interactive charts using form controls. This creates cool drop-downs for viewers of your chart to choose from.

773 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