excel - 如何在使用 VBA 输入用户后对 MS-Excel 表列进行排序?
问题描述
在该列范围中输入项目后,我想将自动排序功能添加到 Excel 表列。以下脚本已插入所需的工作表中。
Private Sub WorksheetActivate()
' Sorts table automatically after each entry
Dim WKSeriesList As Sort
Set WKSeriesList = ActiveSheet.ListObjects("KitchenLinesTable").Sort
WKSeriesList.SortFields.Clear
'Clear previous sorting method
With WKSeriesList
.SortFields.Add2 Key:=Range("KitchenLinesTable[[#All],[Kitchen Series]]"), _
SortOn:=xlSortOnValues, Order:=xlAscending
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
解决方案
Worksheet_Change 事件检测到“厨房系列”列中的任何更改,并调用sortTable 过程作为一些参数:表名、列名、排序类型。
将此代码放入您的工作表模块中
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("KitchenLinesTable[[#All],[Kitchen Series]]")) Is Nothing Then
Call sortTable("KitchenLinesTable", "Kitchen Series", xlAscending)
End If
End Sub
将此代码放在标准模块上
Sub sortTable(tblName As String, colName As String, sOrder As XlSortOrder)
Dim ol As ListObject: Set ol = ActiveSheet.ListObjects(tblName)
Dim olColRng As Range: Set olColRng = ol.ListColumns(colName).DataBodyRange
ol.Sort.SortFields.Clear
ol.Sort.SortFields.Add2 _
Key:=olColRng, _
SortOn:=xlSortOnValues, _
Order:=sOrder, _
DataOption:=xlSortTextAsNumbers
With ol.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
推荐阅读
- java - 素数计算结果不一致
- javascript - 如果在 chrome 中突出显示,则 HTML 输入范围类型将无法通过拖动操作使用
- javascript - 数据/状态更改时 React Re 是否渲染所有 UI 元素?
- java - 线程“主”java.lang.OutOfMemoryError 中的异常:在 ArrayList 中添加值时发生 Java 堆空间错误
- html - 为什么 Safari 会弄乱我的 div 的高度?
- excel - 当我尝试通过宏修改 PowerPoint 演示文稿时 Excel 硬崩溃
- angular - 是否可以将 Angular 与 CDN 一起使用?
- java - 如何在以最短的方式获取密钥之前检查hashmap是否包含密钥?
- c++ - 在 ncurses 中使用 unicode 字符创建边框
- javascript - 如何从 Firebase 获取 .get() 以集成到 Discord.JS