【发布时间】:2018-01-21 20:28:21
【问题描述】:
我有一个使用当前日期的电子表格,找到下一个星期日并将下一个星期日作为一周结束日期。这个日期在每个星期日的午夜自动滚动。一些用户正试图进行系统时钟回滚,以便为自己分配机会来伪造在我的表单中输入的某些数据位。
我想从互联网上提取日期,将其与系统日期进行比较,然后使用较晚者。我很难将 VBA 放在一起从互联网上提取日期,并且我有一个检测连接的功能。我还有禁用“发送电子邮件”宏的脚本的结尾,因此他们无法通过电子邮件发送报告(如果没有互联网,他们就无法做到这一点)。我确实从here 借用了一些代码来尝试实现这一点,但是我无法在不经历漫长过程的情况下理解最佳应用程序。
我如何最好地解决从互联网收集日期的问题,以便与潜在的系统时钟回滚进行比较?
---- Function IsInternetConnected()----
Sub CheckTimeDate()
Dim NewDate
Dim NewTime
Dim ws1 As Worksheet
Dim ws5 As Worksheet
Dim wkEnd As Range
Dim http
Const NetTime As String = "https://www.time.gov/"
On Error Resume Next
Set http = CreateObject("Microsoft.XMLHTTP")
http.Open "GET", NetTime & Now(), False, "", ""
http.send
NewTime = http.getResponseHeader("Date")
Set ws1 = ThisWorkbook.Sheets("Sheet1")
Set ws5 = ThisWorkbook.Sheets("Sheet5")
Set wkEnd = ws1.Range("J3")
If IsInternetConnected() = True Then
NewDate = NetDate
ws1.wkEnd = .Value.NewDate
ElseIf IsInternetConnected() = False Then
On Error GoTo SysClockRollback
wkEnd = Value.Date
ElseIf NewDate > Date Then wkEnd = NewDate.Value
Else: wkEnd = .Value.Date
End If
Set ws1 = Nothing
Set wkEnd = Nothing
Set NetTime = Nothing
SysClockRollback:
MsgBox "The system clock appears to be incorrect. If the system clock was rolled back. This form will now use the local internet time for all dates. "
End Sub
----Sub SendMail()----
If IsInternetConnected() = False Then
MsgBox "There is no Internet connection detected." & vbNewLine & _
vbNewline & _
"Please connect to the internet before sending.", vbApplicationModal, vbOKOnly
Exit Sub
Else:
...and it goes into the SendMail Sub from there...
在未检测到 Internet 时退出 SendMail 子程序的目的是使他们无法启动发送电子邮件的过程,然后将更改的日期保存为草稿以供以后使用。我想强制使用正确的日期,而且我不会拘泥于其中的一些概念
【问题讨论】:
-
重复问题,已在此处回答:“如何在 excel 中找到用户的时区偏移量”stackoverflow.com/questions/532038/…
-
我不需要时区偏移量。我只需要 TZ 来确保每天特定时间的更准确日期。不过,我理解人们怎么会认为这是一个重复的问题。