2016-02-05 98 views
0

回答上個問題,爲我提供了此循環的基礎。在不同尺寸表中循環顯示Excel VBA

VBA Excel - Loop through worksheet creating tables

不過,我遇到了一個問題,我可以與右下它的行沒有數據的表頭。在這種情況下,我只想製作一個只有標題的表格。

我試過這段代碼 - 簡單地將rngStart下面的行分配爲oneDown。然後創建一個if /然後檢查是否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` 

我得到了相同的結果與我的數據,如果我沒有足夠的的if/then到位。

+0

嘗試 設置oneDown = rngStart.Offset(1,1) – Siva

+0

@Silva感謝小費,但也沒有工作。用我的if/then邏輯做一切正確嗎? –

+0

@ScottHoltzman有什麼想法? –

回答

1

我不得不改變你的代碼的一部分,但這個曾與我測試了這樣試一試:

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 
+0

嘗試過並且不起作用 –

+0

我更新了答案並修改了一下代碼。它在我測試它時起作用,所以試試看,如果您有任何問題,請告訴我。 – Jonathan

+0

它適用於除了期望的表頭之間沒有兩個空格的情況。我已經嘗試刪除所有空白行,然後在列A中具有「CUSTOMER_」的每一行上方插入一行。現在,如果我可以修改rngStart以僅在這些行上啓動,我將會成功。 –