简体   繁体   中英

VBA Includes empty cells in table formatting

Very new to VBA.

What I am trying to do:

1) Copy sheet from (source) workbook to active (master) workbook 2) Delete unnecessary columns of the copied data in the master workbook 3) Select cells with data in the master workbook and format as table (this is where I am stuck)

    Sub first_sub()

    'Open user Raw Data workbook
    Workbooks.Open Filename:= _
    "C:\Users\" & Environ("UserName") & "\Downloads\File.xls"
    'Copy user Raw Data sheet to Data Master sheet
    Workbooks("File.xls").Sheets("Records").Copy _
    Before:=Workbooks("Macro Main.xlsm").Sheets(1)
    'Close user Raw Data
    Workbooks("File.xls").Close

    End Sub

    Sub Format()
        Sheets("Records").Range("D:G,I:K,M:Y,AA:AA,AF:AM").EntireColumn.Clear
        Sheets("Records").Range("D:G,I:K,M:Y,AA:AA,AF:AM").EntireColumn.Delete
    End Sub

    Sub MakeTable()
        Dim tbl As ListObject
        Dim rng As Range
        Set rng = Range(Range("A1"), Range("A1").SpecialCells(xlLastCell))
        Set tbl = ActiveSheet.ListObjects.Add(xlSrcRange, rng, , xlYes)
        tbl.TableStyle = "TableStyleMedium3"
    End Sub

The problem is in point 3. For some reasons, VBA selects columns up to "AM", even though I deleted them in previous sub, and as a result - I have the table full of empty columns all the way up to AM. How to solve this? Thank you in advance.

Check how .SpecialCells(xlLastCell) works: Range.SpecialCells Method (Excel)

I think your range variable rng is referencing from range Range("A1") to the last used cell in the column range AM

Set rng = Range(Range("A1"), Range("A1").SpecialCells(xlLastCell))

Try adding this line after to check if the range is actually targeting your desired range:

rng.select

To solve this problem you can try:

Set rng = Range("A1").CurrentRegion

Or finding the last cell in column A...

Code:

Sub MakeTable()
Dim tbl As ListObject
Dim rng As Range

    Set rng = Range("A1").CurrentRegion

    Set tbl = ActiveSheet.ListObjects.Add(xlSrcRange, rng, , xlYes)

    tbl.TableStyle = "TableStyleMedium3"

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM