2016-01-14 134 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