在同一个工作表中执行两行代码

编程语言 2026-07-08

我想让列宽自动适应文本宽度。

我还想让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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章