在Excel中保持用户在界面中对列顺序的更改,可以通过使用VBA代码来解决。下面是一个示例代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range("A1:Z1") ' 设置需要保持顺序的范围
Application.EnableEvents = False ' 禁用事件处理,避免进入死循环
If Intersect(Target, rng) Is Nothing Then Exit Sub ' 如果修改的范围不在指定的范围内,则退出
Dim oldOrder() As Variant
Dim newOrder() As Variant
Dim i As Long
' 记录修改前的列顺序
ReDim oldOrder(rng.Columns.Count)
For i = 1 To rng.Columns.Count
oldOrder(i) = rng.Cells(i).Column
Next i
' 排序修改后的列顺序
ReDim newOrder(rng.Columns.Count)
For i = 1 To rng.Columns.Count
newOrder(i) = rng.Cells(i).Column
Next i
Call SortColumns(oldOrder, newOrder)
Application.EnableEvents = True ' 启用事件处理
End Sub
Sub SortColumns(oldOrder() As Variant, newOrder() As Variant)
Dim i As Long
Dim j As Long
Dim temp As Variant
For i = 1 To UBound(newOrder)
If oldOrder(i) <> newOrder(i) Then
' 找到修改后的列顺序对应的列
For j = i + 1 To UBound(oldOrder)
If oldOrder(j) = newOrder(i) Then
' 交换列
temp = oldOrder(i)
oldOrder(i) = oldOrder(j)
oldOrder(j) = temp
Exit For
End If
Next j
End If
Next i
' 根据修改后的列顺序重新排列列
With ActiveSheet
For i = 1 To UBound(oldOrder)
.Columns(oldOrder(i)).Cut
.Columns(i).Insert Shift:=xlToRight
Next i
End With
End Sub
要使用此代码,请按照以下步骤操作:
Alt + F11打开VBA编辑器。Worksheet模块中。Set rng = Range("A1:Z1"),将范围设置为您要保持顺序的列范围。现在,当用户在指定的列范围内更改列的顺序时,代码将自动根据新的列顺序重新排列列,以保持用户对列顺序的更改。