VBA userform:根据输入的日期是否为夏令时计算时区

时间:2018-01-05 19:43:27

标签: excel-vba vba excel

我正在尝试创建一个电子表格,其中将输入许多事件,例如发送的通信。我想创建一个用户可以输入的用户表单1.事件的日期2.事件发生的时间(以EST为单位)2.该事件的等效UTC时间3.等效的东京时间事件

始终可以输入日期,但您永远不知道给定事件的时间戳是EST,UTC还是东京时间戳。我想这样,如果其中任何一个具有时间值,则自动填充UTC,EST或Tokyo的三个texbox。因此,例如,如果在EST框中输入时间戳,VBA将添加4小时并填充UTC框并添加另外12或其他任何东西以填充东京框。

首先,我在userform中为Date文本框编写了以下代码:

Public Sub dtefrm_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

Dim dte
Dim dstdte As Boolean


Let dte = CDate(Me.dtefrm.Value)


Select Case True
    Case dte > CDate("3/9/2008") And dte < CDate("11/2/2008")
        dstdte = True
        Me.dayconf.Value = "Daylight Savings"

    End Select


End Sub

现在,我想将代码附加到EST文本框中,以便在输入时间时,如果日期介于3/1/2008和11/1之间,则UTC文本框将填充该时间+4 / 2008,如果不是,则为+ 5。

这就是我提出的:

Public Sub estfrm_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

varest = Application.WorksheetFunction.Text(Me.estfrm.Value, "hh:mm:ss")
Me.estfrm.Value = varest
Let dte = CDate(Me.dtefrm.Value)

Select Case True
    Case dte > CDate("3/9/2008") And dte < CDate("11/2/2008")
        dstdte = True
    End Select


If dstdte = True Then
    Me.utcfrm.Value = CDate(Me.utcfrm.Value) + 4
End If


End Sub

我认为我在EST框代码中使用dstdte布尔值时遇到了麻烦,我试图让两个子公共没有帮助,所以我将选择案例代码从第一个子复制到第二个,但仍然没运气。现在我得错误十三。我试过4/24而不是4,同样的问题。

供参考,dtefrm是用户输入日期的文本框的名称,dayconf是表单上的文本框,如果日期匹配则表示夏令时,而estfrm是EST时间的框的名称输入,utcfrm是UTC框的名称。

1 个答案:

答案 0 :(得分:0)

执行可以从两者调用的功能:

Function IsDts(ByVal cellValueDate as Date)
    Select Case True
        Case cellValueDate > CDate("3/9/2008") And cellValueDate < CDate("11/2/2008")
            IsDts = True
        Case Else
            IsDts = False
    End Select
End Function

并在您的其他活动中调用此内容,例如estfrm_BeforeUpdate

isValDst = IsDts(CDate(Me.dtefrm.Value))