2013-03-05 63 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