VBA在表格格式中包含空单元格

时间:2018-05-03 17:33:28

标签: vba excel-vba excel

对VBA来说很新。

我想做什么:

1)将工作表从(源)工作簿复制到活动(主)工作簿 2)删除主工作簿中复制数据的不必要列 3)在主工作簿中选择包含数据的单元格并将其格式化为表格(这是我被困的地方)

    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

问题出在第3点。由于某些原因,即使我在前一个sub中删除了它们,VBA也会选择最多为" AM"的列,结果是 - 我的表中有空列一直到AM。怎么解决这个?提前谢谢。

1 个答案:

答案 0 :(得分:1)

检查.SpecialCells(xlLastCell)的工作原理:Range.SpecialCells Method (Excel)

我认为您的范围变量rng引用范围Range("A1")到列范围内的最后一个使用的单元格

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

尝试添加此行后检查范围是否实际定位到您想要的范围:

rng.select

要解决此问题,您可以尝试:

Set rng = Range("A1").CurrentRegion

或找到A列中的最后一个单元格......

代码:

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