添加新列时,VBA-Excel按字母顺序重新排列列

时间:2018-11-19 20:10:12

标签: excel vba excel-vba

通过VBA添加新列时,文件出现问题。单击按钮时,它会获得一个进程ID号,并从另一张纸在表上创建一列。

每次添加新列时,如何按字母顺序(按标题值)重新排列列的顺序。

列数是动态的,在用户创建进程之前,我不知道标题名称。

这是我当前的代码:

'Create a new column on the process assignment table
Sheets("T_PRAS").ListObjects("T_PRAS").ListColumns.Add.Name = "PR_" & Sheets("Administrador").Range("B53").Value

2 个答案:

答案 0 :(得分:1)

这经过了温和的测试,但是在对工作表进行排序时我做过类似的事情,这似乎也适用于您的表。

Dim x As Long, y As Long, tbl As ListObject
Set tbl = ActiveSheet.ListObjects("T_PRAS")

' Loop through each column
With tbl.ListColumns
    For x = 1 To tbl.ListColumns.Count
        For y = x + 1 To tbl.ListColumns.Count
            If .Item(y).Name < .Item(x).Name Then
                .Item(y).Range.Cut
                .Item(x).Range.Insert xlRight
            End If
        Next y
    Next x
End With

基本上,您有两个循环。第一个循环将列名称与第二个循环进行比较,如果第二个循环的名称位于第一个循环之前,则它将移动该列。

答案 1 :(得分:0)

尝试

Sub test()
    Dim Ws As Worksheet
    Dim obj As ListObject
    Dim rng As Range

    Set Ws = Sheets("T_PRAS")
    Set obj = Ws.ListObjects("T_PRAS")
    Set rng = obj.DataBodyRange.CurrentRegion
    With Ws.Sort
        .SetRange rng
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub