我試圖以按時間順序而不是由它們在列值升序給定範圍內的如何排序的範圍按時間順序VBA
下面的代碼檢查,如果任何值在列改變的B到Z並將日期和時間放在列A的相應單元格行中。
該宏的目標是將最後編輯的行放在表格的底部。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range
Dim m As Long
Dim DataRange As Range
Dim keyRange As Range
Set DataRange = Range("A2:Z1048567")
Set keyRange = Range("A2")
Application.ScreenUpdating = False
For Each Cel In Target
If Not Intersect(Target, Cel) Is Nothing And Cel.Column > 1 And Cel.Column <= 26 Then
m = Cel.Row
With ActiveSheet.Range("A" & m)
.Value = Date & " " & Time
.NumberFormat = "dd/mm/yyyy hh:mm AM/PM "
End With
DataRange.Sort Key1:=keyRange, Order1:=xlAscending
Application.ScreenUpdating = True
Exit Sub
End If
Next Cel
Application.ScreenUpdating = True
End Sub
我可能完全錯過了問題的要點,但無論如何(npi),在改變[Worksheet_Change](https://msdn.microsoft.com/)中的任何數據之前,總是使用'Application.EnableEvents = False' en-us/library/office/ff839775.aspx)事件宏。如果沒有它,你將冒着觸發另一個事件的風險,並且該過程將在其本身之上運行,可能會觸發另一個事件和級聯失敗。請記得在退出過程之前使用'Application.EnableEvents = True'。 – Jeeped