在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行是标题。任何人都可以弄清楚为什么这段代码不起作用?我真的没有编码,所以如果缺少某些东西我就不知道了。我知道启用宏不是一个问题,因为我可以手动运行其他宏而没有问题,只是这个自动运行不起作用。
答案 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