循环通过工作表将范围转换为表格

时间:2015-04-21 02:52:33

标签: vba excel-vba loops excel

我正在尝试创建一个循环过程,该过程遍历多个工作表并将数据转换为表。我认为我的代码不断破解,因为显然每个数组只能有一个" Table1"的实例。我有几个问题:

1:有没有办法动态命名每个表。例如:将表的名称设置为工作表标题?

2:如果已有现有表,如何创建退出子例程的错误处理代码。 EX。我已经在现有的工作簿上运行了这个,但是添加了一个包含原始数据的新工作表,但仍然需要将其转换为表格。

以下是我到目前为止所得到的任何和所有帮助(VBA新手)

Sub newTables()


' newTables Macro
' T
'
' Keyboard Shortcut: Ctrl+Shift+T

Dim rngSelectionRange As Range
Set rngSelectionRange = ActiveSheet.Range(Selection.Address)

For i = 1 To Worksheets.Count

    Worksheets(i).Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    'where it breaks
    ActiveSheet.ListObjects.Add(xlSrcRange, rngSelectionRange, , xlYes).Name = "Table1"
    'Range("Table1[#All]").Select
    'ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight2"
    'ActiveSheet.ListObjects("Employ").Name = "Employee_Data"
    If ActiveSheet.ListObjects.Count > 1 Then
    End If

Next i
End Sub

2 个答案:

答案 0 :(得分:1)

我认为这基本上就是你想要的。你可以检查一个范围是否有一个ListObject,这在这里很方便:

Sub AddTablesIfNone()
Dim ws As Excel.Worksheet

    For Each ws In ActiveWorkbook.Worksheets
        With ws
            If .UsedRange.ListObject Is Nothing Then
                .ListObjects.Add SourceType:=xlSrcRange, Source:=.UsedRange, xllistobjecthasHeaders:=xlYes
            End If
        End With
    Next ws
    End Sub

答案 1 :(得分:0)

怎么样:

ActiveSheet.ListObjects.Add(xlSrcRange, rngSelectionRange, , xlYes).Name = "Table" & i

这将命名循环Table1中的第一个表,然后Table2等。

或者,如果您需要工作表的名称,请将"Table" & i替换为:Worksheets(i).Name,但也许您要添加一个前缀say," Table"只是为了避免混淆。