2016-01-14 65 views
0

如何在不按名称调用表的情况下引用表中的特定列?我想替换===>范围(“Table1 [CODER]”)< ===与引用.Listobject索引号或使用我定义的变量“tableName”,但我无法弄清楚语法为任一选项。使用表索引对excel表中的列进行排序vba

Public Sub CreateTableAndSortYNG() 
Dim tableName As String 

    With ActiveWorkbook.ActiveSheet 
    .ListObjects.Add(xlSrcRange, .UsedRange, , xlYes).Name = .Name & "_Table" 

tableName = ActiveWorkbook.ActiveSheet.ListObjects(1).DisplayName 

MsgBox tableName 

    .ListObjects(1).Sort.SortFields.Clear 

    .ListObjects(1).Sort.SortFields.Add Key:=Range("Table1[CODER]"), _ 
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 

    .ListObjects(1).Sort.SortFields.Add Key:=Range("Table1[TYPE]"), _ 
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 

    .ListObjects(1).Sort.SortFields.Add Key:=Range("Table1[DSCHG_DT]"), _ 
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    End With 
End Sub 
+0

是'CODER'将是什么'TableName'是什么?您可以执行'.ListObjects(1).Sort.SortFields.Add Key:= Range(“Table1 [”&tableName&“]”),...' – BruceWayne

+0

CODER是表格中列的名称。我尝试用索引号或变量“tableName”替换代码的“Table1”部分,因为表永远不会被称为“Table1” –

+2

啊,那我相信你可以做'.ListObjects(1) .Sort.SortFields.Add Key:= Range(tableName&“[CODER]”),_ ...' – BruceWayne

回答

0

一对夫妇笔记。您正在使用With,但没有充分利用它。此外,你已经有了如何在这种情况下使用变量的理论(参见With ActiveWorkbook.ActiveSheet.ListObjects.Add(xlSrcRange, .UsedRange, , xlYes).Name = .Name & "_Table")。

这里是你的代码,收紧:

Public Sub CreateTableAndSortYNG() 
Dim tableName As String 

With ActiveWorkbook.ActiveSheet 
    .ListObjects.Add(xlSrcRange, .UsedRange, , xlYes).Name = .Name & "_Table" 

    tableName = .ListObjects(1).DisplayName 
    'MsgBox tableName ' I removed this because I think you're using this to check the name. I like using the next line instead 
    Debug.Print tableName ' This will show in the "Immediate Window" in the VB Editor (press CTRL+G) to see the immediate window 
    With .ListObjects(1).Sort.SortFields 
     .Clear 
     .Add Key:=Range(tableName & "[CODER]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
     .Add Key:=Range(tableName & "[TYPE]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
     .Add Key:=Range(tableName & "[DSCHG_DT]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    End With 
End With 
End Sub