我有一个电子表格,用于跟踪项目和日期。每个项目都有与之关联的相应日期:
显示条件格式的屏幕截图:
如果日期距当前日期等于或小于 100 天,则日期单元格将以绿色突出显示,使用以下条件格式公式:
=TODAY()-C3:C12<120
如果日期距当前日期超过 100 天,则单元格将以红色突出显示,使用以下条件格式公式:
=TODAY()-C3:C12>=120
此外,所有行均按日期升序排序,并且空白日期单元格不产生任何条件格式:
=ISBLANK(C3:C12)=TRUE
我试图解决的问题是,当某个特定项目的日期更新时,需要使用 VBA 代码将所有行动态地重新排列为新的升序日期顺序。
在屏幕截图中,您会注意到第 6 项的位置不对。宏应自动将其整行按日期顺序移动到正确的顺序。
我尝试过将以下在网上找到的脚本合并到其中。不幸的是,随后出现了一些非常奇怪的行为,我的行被重新排列,我无法正确理解。无论我做什么,标题都会被宏移动到所有其他内容之下!
有人能看出这个 VBA 代码有什么问题吗?只要我更新任何日期,它就会把我的数据弄得一团糟。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Range("C3").Sort Key1:=Range("C12"), _
Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub
编辑:
“您尚未提供脚本链接”
脚本链接: https://www.extendoffice.com/documents/excel/3655-excel-auto-sort-by-date.html
“...更重要的是告诉我们随机脚本实际上应该做什么”
该脚本应该在输入或修改日期时自动对其进行排序,如下所述:
“我想解决的问题是,当某个特定项目的日期更新时,所有行都需要使用 VBA 代码动态重新排列为新的升序日期顺序“”。
... 和:
“它的整个行应该自动按照日期顺序移动到正确的顺序,通过宏“”。
抱歉,我没有说清楚,这个脚本的目的是在修改日期时动态地安排日期。
添加新日期后会发生以下情况;标题会移至数据下方:
有人能知道为什么标题会被移到数据下方吗?
答案1
我通过修改范围值解决了我的问题,如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
Range("B3:C12").Sort Key1:=Range("C3"), _
Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub
我最初只引用了一个单元格,而不是单元格范围,因此脚本最终对每一行(包括标题)进行了排序。现在它按预期工作了。
我的问题是可以回答的,这就是答案。