0

我有一列在不同时间手动输入了非易失性时间函数 BNOW()。简单地说,比如在 col A

A1=BNOW()       it's value=3/25/2013 10:00:23

A2=BNOW()       it's value=3/25/2013 10:03:09

我希望 A1 和 A2 的值仅在每个原始时间戳后 10 分钟更改为日期(即 2013 年 3 月 25 日)。我应该如何在 VBA 中编码?

我想要的是让 Excel 使用 BNOW() 监视每个单元格,并分别在每个时间值后 10 分钟自动将值更改为日期。

PS:BNOW() 是 Excel NOW() 的非易失性用户定义函数。

4

2 回答 2

0

您可以在工作表更改事件中使用 Application.Ontime 来调用将更改单元格的子:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count = 1 Then

    If Target.Formula = "=NOW()" Then
        Application.OnTime Now() + TimeValue("00:00:02"), "'DoIt """ & Target.Parent.Name & "!" & Target.Address & """'"
    End If

End If

End Sub

更改单元格的 sub 可能如下所示:

Public Sub DoIt(t As String)

Application.EnableEvents = False
Range(t).NumberFormat = "General"
Range(t).Value = Format(Range(t).Value, "m/dd/yyyy")
Application.EnableEvents = True

End Sub

这个 sub 必须在代码模块中,而不是在工作表的类模块中。此外,由于通过 Application.Ontime 使用参数调用 subs 的限制,我认为工作表名称不能包含空格。

于 2013-03-27T17:11:37.173 回答
0

您可以使用 NumberFORMAT 属性在 VBA 中执行此操作:

cell.NumberFormat="dd/mm/yy;@"

这不会改变值,只会改变它作为文本呈现的方式。

此外,您可以将值更改为文本字符串:

activecell.Value=day(activecell) & "/" & month(activecell) & "/" & year(activecell)

但是,最好的选择是使用 Excel 格式/条件格式

希望这可以帮助

菲利普

于 2013-03-26T09:36:12.823 回答