2017-06-27 22 views
0

我有sheet1,sheet2,sheet3,sheet4。用於表格格式的VBA。

在4張表中,工作表1和工作表2在列表中有數據。而sheet3和sheet4也有相同的數據透視表。

我想要一個VBA,以這樣的方式,在我的工作簿中,如果它找到帶有列表的表格,那麼它會將其格式化爲表格。該表應該只適用於它具有價值的單元格。

我使用記錄宏來獲取代碼,但我很驚訝我應該如何爲我的所有表單實現它。 代碼,從錄製宏的一個表:

sub macro() 
    Cells.Select 
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$1:$1048576"), , xlYes).Name = _ 
     "Table2" 
    Cells.Select 
    ActiveSheet.ListObjects("Table2").TableStyle = "TableStyleLight9" 
End Sub 

Normally, when i copy from data source, it resembles like below image

I want a VBA that changes the above figure like this without Manual Operation.

回答

2

我想你的意思是像下面的代碼:

Option Explicit 

Sub macro() 

Dim ws As Worksheet 
Dim ListObj As ListObject 

For Each ws In ThisWorkbook.Worksheets 
    With ws 
     For Each ListObj In .ListObjects 
      ListObj.TableStyle = "TableStyleLight9" 
     Next ListObj 
    End With 
Next ws 

End Sub 
+0

這個工程很酷,但我只需要佔用的行和列而不是整個工作表?在將來如果我添加一行額外的,那麼它應該採用 – Mikz

+0

如果我沒有錯,上面的代碼應該適用於任何工作表的權利? – Mikz

+0

@Mikz「ThisWorkbook」中的任何工作表(這是代碼所在的工作簿) –

0

如果你的問題是,將範圍更改爲Listobject,請看下面的代碼。

Sub macro() 
    Dim Ws As Worksheet 
    Dim LstObj As ListObject 
    Dim rngDB As Range, n As Integer 

    For Each Ws In Worksheets 
     With Ws 
      Set rngDB = .Range("a1").CurrentRegion 
      For Each LstObj In Ws.ListObjects 
       LstObj.Unlist 
      Next 
      If WorksheetFunction.CountA(rngDB) > 0 Then 
       n = n + 1 
       Set LstObj = .ListObjects.Add(xlSrcRange, rngDB, , xlYes) 
       With LstObj 

        .Name = "Table" & n 
        .TableStyle = "TableStyleLight9" 
       End With 
      End If 
     End With 
    Next Ws 

End Sub 
+0

您的代碼僅包含範圍ryt?不是格式化表格? – Mikz

+0

我收到一個錯誤,指出內存不足。 – Mikz