在同一个工作表中执行两行代码
我想让列宽自动适应文本宽度。
我还想让A 列的文本按字母顺序自动排序,并让其他列的数据跟随一起排序,但要排除第一行。
于是我将得到一个产品清单,第一列是产品名称,其他列包含诸如价格和产品代码等数据。当我添加新产品时,我希望列宽能够根据文本自动调整,并且在输入时也能按字母顺序自动排序产品。
这两条规则单独执行时都能正常工作,但放在一起时会导致Excel崩溃。
这是我目前的实现:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.EntireColumn.AutoFit
On Error Resume Next
Range("A2:F100").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes
End Sub
解决方案
变更时排序
- 需要使用工作表变更事件。
- 排序或自动调整列宽不会触发此事件,因此无需禁用事件。
- 如果标题在第1 行,则只需使用
"A1:F100"或Header:=xlNo中的任意一个即可。
Private Sub Worksheet_Change(ByVal Target As Range)
Const SORT_COLUMN As Long = 1
Const SORT_RANGE As String = "A2:F100" ' assuming row 2 are headers!
With Me.Range(SORT_RANGE)
If Not Intersect(Target, .Columns(SORT_COLUMN)) Is Nothing Then
.Sort Key1:=.Columns(SORT_COLUMN), Order1:=xlAscending, Header:=xlYes
.EntireColumn.AutoFit
End If
End With
End Sub
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。