有没有办法使用VBA(excel)生成精确到十分之一秒或更短的时钟时间?
例如:
Sub test()
MsgBox Format(Time, "hh:mm:ss???") 'not sure what this format should be...
End Sub
答案 0 :(得分:5)
我认为Time
没有提供这些信息。
您可以使用Timer
来提高准确性。
在Microsoft Windows中的计时器 函数返回小数部分 一秒钟在Macintosh上,计时器 分辨率是一秒钟。
以下是一个例子:
MsgBox Format(Time, "hh:mm:ss:" & Right(Format(Timer, "#0.00"), 2))
答案 1 :(得分:2)
这是一种更简单的方法:
t = Evaluate("Now()")
这会将当前时间评估为工作表函数(以毫秒为单位),而不是以秒为单位的VBA函数。
答案 2 :(得分:0)
您可以使用Windows API获得更准确的时间(包括毫秒),如下所示。
Private Type SYSTEMTIME
Year As Integer
Month As Integer
DayOfWeek As Integer
Day As Integer
Hour As Integer
Minute As Integer
Second As Integer
Milliseconds As Integer
End Type
Public Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Public Function GetMilliseconds()
'' This function returns an accurate version of the milliseconds elememt of the current date/time
Dim tSystem As SYSTEMTIME
GetSystemTime tSystem
GetMilliseconds = tSystem.Milliseconds
End Function
信用转到http://custom-designed-databases.com/wordpress/2011/get-milliseconds-or-seconds-from-system-time-with-vba/,其中还有关于从VBA中获取系统时间毫秒的更详细信息。
答案 3 :(得分:0)
我通过一些试验和错误注意到,如果将一个公式分配给一个与直接在vba中使用该函数相对的单元格,则当前时间至少会显示10毫秒。 我通常在当前时间使用NOW()函数。
如果我的代码如下:
sub test()
cells(1,1)=now()
end sub
然后单元格A1显示时间达到秒,而不是毫秒(时间将显示为10:38:25.000)
如果我使用此代码:
sub test()
cells(2,1).formula "=now()"
cells(1,1)=cells(2,1)
end sub
然后在A1中显示时间为毫秒(时间将显示为10:38:25.851)
答案 4 :(得分:0)
以下VBA代码以String形式返回当前本地时间,包括毫秒。如果您需要系统时间,只需用GetSystemTime替换GetLocalTime。
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private Declare Sub GetLocalTime Lib "kernel32" (ByRef lpLocalTime As SYSTEMTIME)
Public Function NowMilli() As String
Dim tTime As SYSTEMTIME
Dim sTwo As String, sThree As String
Dim sOut As String
sOut = "yyyy-mm-dd hh:mm:ss.mmm"
sTwo = "00": sThree = "000"
Call GetLocalTime(tTime)
Mid(sOut, 1, 4) = tTime.wYear
Mid(sOut, 6, 2) = Format(tTime.wMonth, sTwo)
Mid(sOut, 9, 2) = Format(tTime.wDay, sTwo)
Mid(sOut, 12, 2) = Format(tTime.wHour, sTwo)
Mid(sOut, 15, 2) = Format(tTime.wMinute, sTwo)
Mid(sOut, 18, 2) = Format(tTime.wSecond, sTwo)
Mid(sOut, 21, 3) = Format(tTime.wMilliseconds, sThree)
NowMilli = sOut
End Function