首页 > 解决方案 > 如何配置 VBA 以在所有工作表上工作

问题描述

我目前正在使用这个 VBA 按升序对日期进行排序。它在我的第一个工作表上运行良好,但我似乎无法将其应用于其他工作表。任何帮助将不胜感激,谢谢!

Private Sub Worksheet_Change(ByVal Target As Range)
'Updateby Extendoffice 20160606
    On Error Resume Next
    If Application.Intersect(Target, Application.Columns(1)) Is Nothing Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    Range("A3").Sort Key1:=Range("A4"), Order1:=xlAscending, Header:=xlYes, _
                                        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

标签: excelvba

解决方案


所有工作表的一个代码

ThisWorkbook在模块中使用以下代码:

Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    
    Const Cols As Variant = 1 ' or "A"
    Const RangeAddr As String = "A3"
    Const Key1Addr As String = "A4"
    
    If Target.Count > 1 Then Exit Sub
    If Intersect(Target, Sh.Columns(Cols)) Is Nothing Then Exit Sub

    On Error Resume Next
    Sh.Range(RangeAddr).Sort Key1:=Sh.Range(Key1Addr), _
                             Order1:=xlAscending, _
                             Header:=xlYes, _
                             OrderCustom:=1, _
                             MatchCase:=False, _
                             Orientation:=xlTopToBottom
    
    ' While developing, a simple error handler can clarify occurring issues.
'    If Err.Number <> 0 Then
'        Debug.Print Err.Description
'    Else
'        Debug.Print "Sheet '" & Sh.Name & "' successfully sorted."
'    End If
    
    'On Error GoTo 0

End Sub

推荐阅读