2013-03-05 35 views
0

創建VBA循環以重新調整Excel項目中的所有表的大小。VBA使用表格和循環

表名稱的列表存儲在「TLIST」命名的區域

此代碼,如果表名的所有作品都寫成,

代碼工作在這個循環中的列數,但關於x的第二個參考,重新大小,我得到'下標超出範圍'的錯誤

將鼠標懸停在調試的第二個x上,Excel似乎讀取它的權利,但我無法得到它重新調整表格與列表對象函數不支持循環中的文本有什麼關係?或者我做這個循環是錯誤的,需要定義x不同?任何幫助不勝感激。

Sub RSizeTables() 
    Dim rr As Integer 
    Dim cc As Integer 
    Dim x As Range 
    Dim £Table As Range 

    Set £Table = Range("Tlist") 

    For Each x In £Table 

    rr = 2 
    cc = Range(x).Columns.Count 

    With Sheets("Data").ListObjects(x) 
    .Resize .Range.Resize(rr, cc) 

    End With 

    Next x 


End Sub 
+0

兩個問題: 1.你是否有意將表格調整爲兩行? 2. Tlist是否包含工作表/工作簿中的所有表格或僅包含子集? – 2013-03-05 11:15:02

+0

Q1;是的,我有另一個刪除數據的代碼片段。我希望他們整潔 - 只是一個開放的行。是的,列表中包含所有表格。 – user2054797 2013-03-05 11:39:07

+0

然後下面的第一個代碼將做 - 不需要'TList' ... – 2013-03-05 11:41:33

回答

2

此代碼將調整所有的表,兩行:

Sub ResizeAll() 
    Dim ws As Worksheet 
    Dim lo As ListObject 

    'If you only have tables in one sheet, use this 
    Set ws = Sheets("Data") 

    'Else this: 
    'For Each ws in Sheets 
    For Each lo In ws.ListObjects 
     lo.Resize lo.Range.Resize(2) 
    Next lo 
    'Next ws 
End Sub 

如果您需要循環只有在TList表,這將做的工作:

Sub ResizeTList() 
    Dim varTableName As Variant 

    For Each varTableName In Range("TList") 
     With Sheets("Data").ListObjects(varTableName) 
      .Resize .Range.Resize(2) 
     End With 
    Next varTableName 
End Sub 
+0

粉碎!非常感謝! – user2054797 2013-03-05 11:48:43