Excel VBA宏在保存之前按字母顺序排序

时间:2018-04-09 21:47:14

标签: excel vba excel-vba

在Excel中,我正在尝试在新行中输入数据,当我保存时,让它按字母A按字母顺序自动排序所有填充的行(实质上,我想删除单击“排序”的麻烦每次保存前的A到Z“。我在工作表的代码中有以下内容(工作簿包含三个工作表,我只希望此宏操作其中一个)

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    On Error Resume Next
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        Range("A1").Sort Key1:=Range("A3"), _
          Order1:=xlAscending, _
          MatchCase:=False, _
          Orientation:=xlTopToBottom
    End If 
End Sub

注意:key1范围从A3开始,因为第1-2行是标题。任何人都可以弄清楚为什么这段代码不起作用?我真的没有编码,所以如果缺少某些东西我就不知道了。我知道启用宏不是一个问题,因为我可以手动运行其他宏而没有问题,只是这个自动运行不起作用。

3 个答案:

答案 0 :(得分:0)

由于没有目标,它无法正常工作。你从任何地方复制了太多的代码,而你正在使用错误恢复,所以任何错误都会被忽略。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    with thisworkbook.worksheets("sheet1")
        with .cells(1, "A").currentregion
            .cells.offset(1, 0).Sort Key1:=.columns(1), Order1:=xlAscending, _
                                     Orientation:=xlTopToBottom, header:=xlyes
        End with
    End with
    SaveAsUI  = false
    Cancel = false
End Sub

答案 1 :(得分:0)

此宏将对您指定的范围进行排序。如果需要低于A12

,则需要编辑底部单元格区域
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)

With ThisWorkbook.Worksheets("Sheet1")
Dim LastRow As Long
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range("A3:A12" & LastRow).Sort Key1:=Range("A3:A12" & LastRow), _
       Order1:=xlAscending, Header:=xlNo
End With

End Sub

答案 2 :(得分:0)

找出前两个回复的问题是我已重命名我的工作表,因此我需要将Task.WhenAll更改为ThisWorkbook.Worksheets("Sheet1")

最后,每当我保存工作簿时,我都希望将工作簿中的三个工作表中的两个按字母顺序排列,因此在记录宏功能的帮助下找出我到底在做什么,我最终得到了以下内容代码:

Sheet1