Worksheet_SheetChange不起作用

时间:2017-06-18 01:53:54

标签: excel vba excel-vba events

我不能为我的生活让这段代码正常工作

我希望此工作表在更改完成后等待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)获取此代码并根据我的目的对其进行修改

1 个答案:

答案 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")

如果这些是固定的,那么它应该有用。