Excel 2013 64 位 - VBA 用户表单 - 添加 28 天到文本框的日期并显示在另一个文本框中

Excel 2013 64 bit - VBA Userform - Add 28 days to date of textbox and display in another textbox

在我的用户表单中,我有一个文本框 "ADD_Inc_DATE_TXT",用户可以在其中手动输入事件发生的日期。

我有另一个文本框 "TxT_SWIRL_DueDate",它应该显示在 "ADD_Inc_DATE_TXT" 文本框中输入的日期加上 28 天的结果,或者甚至只是在事件发生的日期上加上 1 个月。

我已经在名为 "Mod_SWIRL_Due_Date" 的模块中尝试过:

Sub SWIRL_ExpiryDate()

    TxT_SWIRL_DueDate = CDate(ADD_Inc_DATE_TXT)

    ADD_Inc_DATE_TXT = DateAdd("m", 1, ADD_Inc_DATE_TXT)

End Sub

但这似乎根本没有做任何事情。

我希望 "TxT_SWIRL_DueDate" 在选择 "ADD_INC_Time_TXT" 文本框时显示到期日期。

预计用户会修改事件日期,我希望它用修改后的日期更新 TxT_SWIRL_DueDate。


更多信息: 我在下面包含了与日期相关的所有代码。我有 4 个日期 Pickers/Popup 日历... none 的日期以 dd/mm/yyyy 格式出现。 (将代码放入 'code sample' 时遇到一些问题)

    Private Sub Calendar1_Click()
     ADD_Inc_DATE_TXT.value = CalendarForm.GetDate
     If IsDate(ADD_Inc_DATE_TXT.Text) Then
     Me.LBL_Inc_Day_Type.Caption = Format(ADD_Inc_DATE_TXT.Text, "ddd")

    End If
     If IsDate(ADD_Inc_DATE_TXT.Text) Then
     Me.ADD_Inc_DATE_TXT.Text = Format(ADD_Inc_DATE_TXT.Text, "dd/mm/yyyy") 
    End If
    End Sub

    Private Sub Calendar2_Click()
     TXT_AssetMgr_DATE = CalendarForm.GetDate
       If IsDate(ADD_Inc_DATE_TXT.Text) Then
        Me.TXT_AssetMgr_DATE.Text = Format(TXT_AssetMgr_DATE.Text, "dd/mm/yyyy")
    End If
    End Sub


    Private Sub Calendar3_Click()
     TXT_LastUserDATE = CalendarForm.GetDate
     If IsDate(ADD_Inc_DATE_TXT.Text) Then
     Me.TXT_LastUserDATE.Text = Format(TXT_LastUserDATE.Text, "dd/mm/yyyy")
    End If
    End Sub

    Private Sub Calendar4_Click()
      ADD_Date_ServiceJobLogged_TXT = CalendarForm.GetDate
      If IsDate(ADD_Inc_DATE_TXT.Text) Then
      Me.ADD_Date_ServiceJobLogged_TXT.Text =  Format(ADD_Date_ServiceJobLogged_TXT.Text, "dd/mm/yyyy")
     End If
     End Sub

‘在 Private Sub UserForm_Initialize() 下,我有以下与日期相关的代码: 私人潜艇 UserForm_Initialize()

            Me.ADD_Date_Recorded_TXT.value = Format(Now, "dd/mm/yyyy") ‘ this works perfectly (correct format is returned)
            Me.ADD_Time_Recorded_TXT.Text = Format(Now(), "HH:mm")

‘***注意:我的系统日期是 dd/mm/yyyy 并且在电子表格单元格中,格式设置为 dd/mm/yyyy

在表单的代码模块中使用此代码(右键单击文本框,"View code"):

Private Sub ADD_Inc_DATE_TXT_AfterUpdate()
  TxT_SWIRL_DueDate.Value = Format(DateAdd("m", 1, CDate(ADD_Inc_DATE_TXT.Value)),"dd/mm/yyyy")
End Sub

我建议使用 AfterUpdate 事件,因为每次更改文本框中的值时都会触发 Change 事件 - 例如在键入时也是如此。这仅在用户完成键入并移至表单上的下一个时间(单击其他位置)时触发。

还可以考虑使用某种形式的日期控件代替文本框控件。那里有很多,根据您使用的 Excel 版本,您可能只能使用其中的 select 几个。