我不能为我的生活让这段代码正常工作
我希望此工作表在更改完成后等待5分钟,然后重新排序所有内容。我是VBA编码的新手(很多年没有这样做,我忘了一切)
代码效果很好(除了在运行后重新定位屏幕),但仅在我使用F5运行时才有效,而不是在每次更改时运行。
在工作表中:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call TimeStop
End Sub
Private Sub Worksheet_Open(ByVal Wb As Workbook)
Application.EnableEvents = True
Call TimeSetting
End Sub
Private Sub Worksheet_SheetChange(ByVal Target As Range)
Call TimeStop
Call TimeSetting
End Sub
在模块中:
Dim CurrentTime As Date
Dim SelectWorksheet As Range
Sub TimeSetting()
CurrentTime = Now + TimeValue("00:00:03")
On Error Resume Next
Application.OnTime EarliestTime:=CurrentTime, _
Procedure:="SortFile", Schedule:=True
End Sub
Sub TimeStop()
On Error Resume Next
Application.OnTime EarliestTime:=CurrentTime, _
Procedure:="SortFile", Schedule:=False
End Sub
Sub SortFile()
ActiveWorkbook.Worksheets("Daily").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Daily").Sort.SortFields.Add Key:=Range("B:B") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Daily").Sort.SortFields.Add Key:=Range("D:D") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Daily").Sort
.SetRange Range("Daily")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
我从其他来源(https://www.extendoffice.com/documents/excel/3921-excel-save-and-close-workbook-after-inactivity.html)获取此代码并根据我的目的对其进行修改
答案 0 :(得分:0)
首先,sub的名称必须是
Private Sub Worksheet_Change(ByVal Target As Range)
而不是
Private Sub Worksheet_SheetChange(ByVal Target As Range)
其次。您需要确保您的Excel已启用宏。 (.XLSM)
您可能还需要在代码中包含适当的范围,例如:
.SetRange Range("Daily!A1:E10")
如果这些是固定的,那么它应该有用。