2017-10-13 53 views
0

第三行錯誤出一個錯誤5,無效過程調用或參數。如何在排序時按名稱引用此表格列?

Set tbl = ActiveSheet.ListObjects(1) 
tbl.Sort.SortFields.Clear 
tbl.Sort.SortFields.Add Key:=tbl.Range("Table[Matter ID]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 

我知道問題是tbl.Range("Table[Matter ID]"),我已經用tbl.Range.Cells(8)固定它和它的作品。但是爲什麼不是第一個工作?

我可以去?tbl.Range.Address並得到有效範圍的地址。

我可以去?tbl.Range.Resize(1).Address,並得到了有效範圍的地址。

名稱「表」與「物ID」是正確的。 Excel表(ListObjects)的一個優點是可以按名稱引用列。我究竟做錯了什麼?

回答

2

有TBL內沒有範圍( 「表[物ID]」),但有tbl.parent內的範圍( 「表[物ID]」)。

Option Explicit 

Sub aswqer() 
    Dim tbl As ListObject 
    Set tbl = ActiveSheet.ListObjects(1) 
    With tbl 
     .Sort.SortFields.Clear 
     .Sort.SortFields.Add Key:=.Parent.Range("table[Matter ID]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
     .Sort.Apply 
    End With 
End Sub 

的範圍(「表[物ID]」)是表駐留在工作表中,表中的不是一個孩子的孩子。

enter image description here

+0

我想我的問題是不知道Excel對象模型不夠好。你能提出一個全面的參考?我搜索MSDN,但雖然它的一些頁面很好,但有些不是。你會發現有很多: 'transmogrify - 如果設置爲xlYes,細胞會被transmogrified.' 當然,這並不能幫助,如果你真的想知道什麼是什麼「transmogrify」的意思。 – RobertSF