我可以得到相当于DateTime.Now.Ticks的VBA吗?

我可以得到相当于DateTime.Now.Ticks的VBA吗?,vba,excel,Vba,Excel,在.NET中的VB中,我可以使用DateTime.Now.Ticks.ToString(“x”)为多部分表单边界准备字符串,例如8d4b7556f42792c 我试图在Excel中的VBA中获得相同的内容 在Excel VBA中,我可以使用DateTime.Now以以下格式获取:19/06/2017 20:54 但这并不是很有帮助,我需要将其转换为十进制字符串,然后再转换为十六进制。到目前为止,我发现HEX(DateTime.Now)只给了我一个四字符的返回值,就像A79A一样,这不是我需要的

在.NET中的VB中,我可以使用
DateTime.Now.Ticks.ToString(“x”)
为多部分表单边界准备字符串,例如
8d4b7556f42792c

我试图在Excel中的VBA中获得相同的内容

在Excel VBA中,我可以使用
DateTime.Now
以以下格式获取:19/06/2017 20:54

但这并不是很有帮助,我需要将其转换为十进制字符串,然后再转换为十六进制。到目前为止,我发现
HEX(DateTime.Now)
只给了我一个四字符的返回值,就像
A79A
一样,这不是我需要的

我可以从
DateTime.Now
获取刻度吗

编辑:我刚刚发现了这个技巧,可以获得一些滴答声:

Private Declare Function GetTickCount Lib "kernel32" () As Long
MsgBox (GetTickCount())

这给了我一个负二倍左右。。。这可能满足了我的需要,但它是否与现在一样重要?

Excel与此无关,
DateTime
VBA
标准库中的一个模块,在任何VBA项目中都会引用它,而不管宿主是什么

VBA中的
日期
本质上是一个
双精度
,其中整数部分是自1899年12月30日起的天数:

?CDate(1)
12/31/1899
小数部分代表该值的时间部分,即一小时是该值的1/24,一分钟是该值的1/60,一秒是该值的1/60,一毫秒是该值的1/1000

在使用之前,您应该先阅读上的
GetTickCount
on:

经过的时间存储为DWORD值。因此,如果系统连续运行49.7天,时间将变为零。要避免此问题,请使用GetTickCount64函数。否则,在比较时间时检查溢出情况

如果您的勾号计数为负数,则表示您的系统已经运行了很长时间,并且溢出了
DWORD
大小,32位(即231-1或2147483647)


与其使用
GetTickCount
并处理或多或少毫无意义的“滴答声”(相对于系统正常运行时间[且仅精确到~15ms]),为什么不使用实际系统时间并获取实际毫秒

定义结构:

宣布程序:

Private Declare Sub GetSystemTime Lib "Kernel32" (ByRef lpSystemTime As SYSTEMTIME)
通过引用传递
SYSTEMTIME
值来调用它:

Public Sub Test()
    Dim t As SYSTEMTIME
    GetSystemTime t
    Debug.Print t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond, t.wMilliseconds
End Sub

检索到的值将是UTC时间,因此如果需要本地时间,请应用适当的偏移量。

VBA中的日期时间?你可以使用Date.Maciej-是的,我刚刚尝试了
MsgBox Now
,但没有
DateTime
,效果很好。但它也可以使用它,并为我提供可能的方法等的智能感知列表。Check@MaciejLos
DateTime
是模块的名称;完全限定名称是
VBA.DateTime.Now
,其中
VBA
是库,
DateTime
是模块,
Now
是返回
Date
值的属性获取程序。完全限定成员调用总是一个好主意。为什么不使用硬编码值呢?
Public Sub Test()
    Dim t As SYSTEMTIME
    GetSystemTime t
    Debug.Print t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond, t.wMilliseconds
End Sub