通过不同大小的表格循环Excel VBA

以前的问题被回答给我提供了这个循环的基础。

VBA Excel – 通过工作表创build表

然而,我遇到了一个问题,我可能有一个表头没有数据在它下面的线。 在这种情况下,我只想简单地制作一个表格。

我已经试过这个代码 – 简单地将rngStart下面的行分配为oneDown。 然后创build一个if / then来检查len(oneDown)是否> 0。

`Dim ws As Worksheet Set ws = ActiveSheet With ws 'find last row of data in column A Dim lRow As Long lRow = .Range("A" & .Rows.Count).End(xlUp).Row Dim rngStart As Range Set rngStart = .Range("A3") 'set counter variable for naming tables Dim i As Long i = i + 1 Dim oneDown As Long Set oneDown =rngStart.Offset(1) Do if Len(oneDown) > 0 Then 'create table range Set rngTable = .Range(rngStart.End(xlToRight),rngStart.End(xlDown)) 'create table .ListObjects.Add(xlSrcRange, rngTable.Resize(rngTable.Rows.Count, rngStart.End(xlToRight).Column), , xlYes).Name = "Table" & i 'set style .ListObjects("Table" & i).TableStyle = "TableStyleLight9" 'find next table range start Set rngStart = rngTable.End(xlDown).Offset(2) Else 'create table range Set rngTable = .Range(rngStart.End(xlToRight)) 'create table .ListObjects.Add(xlSrcRange, rngTable.Resize(rngTable.Rows.Count, rngStart.End(xlToRight).Column), , xlYes).Name = "Table" & i .ListObjects("Table" & i).TableStyle = "TableStyleLight9" Set rngStart = rngTable.End(xlDown).Offset(2) End If i = i + 1 Loop Until rngStart.Row > lRow End With` 

我得到了与我的数据相同的结果,如果我没有如果/那么到位。

我不得不改变你的代码的一部分,但这个工作与我testing它,所以试试看:

  Dim ws As Worksheet Set ws = ActiveSheet With ws 'find last row of data in column A Dim lRow As Long lRow = .Range("A" & .Rows.Count).End(xlUp).Row Dim rngStart As Range Set rngStart = .Range("A3") 'set counter variable for naming tables Dim i As Long i = i + 1 Do Dim oneDown As String oneDown = rngStart.Offset(1) 'Proceed to next cell if rngstart is empty If rngStart.Value = "" Then Set rngStart = rngStart.Offset(1) ElseIf Len(oneDown) > 0 Then 'create table range Set rngtable = .Range(rngStart.End(xlToRight), rngStart.End(xlDown)) 'create table .ListObjects.Add(xlSrcRange, rngtable.Resize(rngtable.Rows.Count, rngStart.End(xlToRight).Column), , xlYes).Name = "Table" & i 'set style .ListObjects("Table" & i).TableStyle = "TableStyleLight9" 'find next table range start Set rngStart = rngtable.End(xlDown).Offset(1) i = i + 1 Else 'create table range Set rngtable = .Range(rngStart.End(xlToRight), rngStart) 'create table .ListObjects.Add(xlSrcRange, rngtable.Resize(rngtable.Rows.Count, rngStart.End(xlToRight).Column), , xlYes).Name = "Table" & i .ListObjects("Table" & i).TableStyle = "TableStyleLight9" Set rngStart = rngtable.End(xlDown).Offset(1) i = i + 1 End If Loop Until rngStart.Row > lRow End With