2015-07-01 21 views
0

我正在尝试将所有工作簿中的多个格式化表合并到一个主表中。合并格式化表格?

我有以下VBA来循环中的所有表和表:

Sub GatherTables() 

Dim tbl As ListObject 
Dim sht As Worksheet 

For Each sht In ThisWorkbook.Worksheets 
    sht.Activate 
    If sht.Name = "Summary" Or sht.Name = "Consolidated" Then 
     'do nothing 
    Else 
     For Each tbl In sht.ListObjects 
      Range(tbl.Name).Select 
      Selection.Copy 
      'do something with it 
     Next tbl 
    End If 
Next sht 

End Sub 

当我运行的代码,在该行范围(tbl.Name)。选择我得到一个运行时错误1004。

我认为我的问题是我不能选择一个范围没有先选择工作表,因此行“sht.Activate”。唉,没有运气。

然后我想,也许是因为tbl是一个listobject,类型是错误的,所以我尝试使用临时字符串变量并将tbl.name保存到第一个,并使用该范围(tempvariable).select唉,没有运气。

我也尝试了硬编码表的名称:范围(“表名”)中进行选择,但没有工作要么...

我知道它的简单的东西,但我挂所以有人解释我错过了什么?

回答

2

我通常会指ListObject表按以下方式:

Sub GatherTables() 

Dim tbl As ListObject 
Dim sht As Worksheet 

For Each sht In ThisWorkbook.Worksheets 
    sht.Activate 
    If sht.Name = "Summary" Or sht.Name = "Consolidated" Then 
     'do nothing 
    Else 
     For Each tbl In sht.ListObjects 
      ActiveSheet.ListObjects(tbl.Name).Range.Select 
      Selection.Copy 
      'do something with it 
     Next tbl 
    End If 
Next sht 

End Sub 
+0

感谢您的建议!一个问题,你的方法选择整个表格,包括标题。是否有只选择表格数据的表格的选择方法?或者我是否需要手动查找表格数据的限制并复制该数据? –

+0

是的,你会改为使用:ActiveSheet.ListObjects(tbl.Name).DataBodyRange.Select –

+0

我也意识到,上面的代码是在sheet1上输入的。当我将它移动到一个模块时,行范围(tbl.name).select按我的预期工作。谢谢! –