我可以得到相当于DateTime.Now.Ticks的VBA吗?
在.NET中的VB中,我可以使用我可以得到相当于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一样,这不是我需要的
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@MaciejLosDateTime
是模块的名称;完全限定名称是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