VBA - 显示时钟时间,精度小于一秒

时间:2009-09-24 09:28:09

标签: vba excel-vba excel

有没有办法使用VBA(excel)生成精确到十分之一秒或更短的时钟时间?

例如:

Sub test()
    MsgBox Format(Time, "hh:mm:ss???") 'not sure what this format should be...
End Sub

5 个答案:

答案 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