这显然是代码的一部分,但这部分我不断收到很多不同的错误,作为初学者,我真的不明白如何解决它们。
我在我的工作簿和工作表中,所以这些是我想在此处排除的第一个参数,但我发现我自己生成的错误而不是更短的代码,所以我寻求一些帮助/指南。
Sub SortHeaderSVA()
Worksheets("PR11_P3").ListObjects("PR11_P3_Tabell").ListColumns("SVA").Range.Cells(1).Select
'cant do anything of the soriting or so if I dont do above which is, well has to be a simpler way to select a header in a table that is in the current sheet and active workbook..?
ActiveWorkbook.Worksheets("PR11_P3").ListObjects("PR11_P3_Tabell").Sort. _
SortFields.Clear
'also wierd, why dose the sort needs to be cleard first if there is no value earlier?
ActiveWorkbook.Worksheets("PR11_P3").ListObjects("PR11_P3_Tabell").Sort. _
SortFields.Add Key:=Range("PR11_P3_Tabell[[#All],[SVA]]"), SortOn:= _
xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("PR11_P3").ListObjects("PR11_P3_Tabell").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
有很多不同的选择方式,但我可能不知道仅在 VBA 中输入的正确命令,所以我记录宏并做不同的实验。
除非绝对必要,否则不要选择对象。删除这一行:
工作表(“PR11_P3”).ListObjects(“PR11_P3_Tabell”).ListColumns(“SVA”).Range.Cells(1).Select
SortFields.Clear
用于确保清除之前的设置。毕竟我们正在向集合添加排序。您可以通过注释掉 SortFields.Clear
行并运行几次来测试这一点。接下来从功能区打开“数据”选项卡并选择“排序”。您将看到,每当您调用 .Sort
方法时,都会运行多种排序。
Public Sub SortHeaderSVA()
With PR11_P3_Tabell.Sort
.SortFields.Clear
.SortFields.Add2 Key:=PR11_P3_Tabell.ListColumns("SVA").Range, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Public Function wsPR11_P3() As Worksheet
Set wsPR11_P3 = ThisWorkbook.Worksheets("PR11_P3")
End Function
Public Property Get PR11_P3_Tabell() As ListObject
Set PR11_P3_Tabell = wsPR11_P3.ListObjects("PR11_P3_Tabell")
End Property
我的原始代码将 ListObject 声明为模块的属性。该代码是根据我拥有的代码片段自动生成的。我通常将我的帖子的方法签名从属性更改为函数。像这样:
Public Function PR11_P3_Tabell() As ListObject
Set PR11_P3_Tabell = wsPR11_P3.ListObjects("PR11_P3_Tabell")
End Function
Option Explicit
Sub SortHeaderSVA()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = wb.Worksheets("PR11_P3")
Dim tbl As ListObject: Set tbl = ws.ListObjects("PR11_P3_Tabell")
Dim tlc As ListColumn: Set tlc = tbl.ListColumns("SVA")
With tbl.Sort
.SortFields.Clear
.SortFields.Add _
Key:=tlc.Range, _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Sub SortHeaderSVANoVariables()
With ThisWorkbook.Worksheets("PR11_P3").ListObjects("PR11_P3_Tabell").Sort
.SortFields.Clear
.SortFields.Add _
Key:=.Parent.ListColumns("SVA").Range, _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub