Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 工作表\u工作表更改不起作用_Vba_Excel_Events - Fatal编程技术网

Vba 工作表\u工作表更改不起作用

Vba 工作表\u工作表更改不起作用,vba,excel,events,Vba,Excel,Events,我一辈子都不能让这个代码正常工作 我希望这张表在更改后等待5分钟,然后重新排序。我是VBA编码新手(很多年没做过了,我已经忘记了一切) 该代码工作得很好(除了在运行后重新定位屏幕之外),但仅在我使用F5运行它时工作,而不是在进行更改时运行 在表格中: Private Sub Workbook_BeforeClose(Cancel As Boolean) Call TimeStop End Sub Private Sub Worksheet_Open(ByVal Wb As Workbook)

我一辈子都不能让这个代码正常工作

我希望这张表在更改后等待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

我从另一个源代码()获取此代码,并出于我的目的对其进行了修改

  Private Sub Worksheet_Change(ByVal Target As Range)
而不是

Private Sub Worksheet_SheetChange(ByVal Target As Range)
其次。您需要确保excel已启用宏。(.xlsm)

您可能还需要在代码中包含适当的范围,例如:

.SetRange Range("Daily!A1:E10")

如果这些是固定的,那么它应该可以工作。

据我所知,没有
工作表\u SheetChange
事件-它是
工作簿\u SheetChange
事件,在活动工作表更改后触发,而不是在工作表上发生更改时触发。您可能正在处理
工作表\u Change
事件。现在,有没有办法防止它在执行此排序任务后更改工作表上的原始屏幕位置?原始屏幕位置是什么意思?例如,在执行排序宏后,如果我集中在A534行,它会使我再次向下滚动。没什么大不了的,但如果它不改变我在工作表上看到的位置就好了。