Excel 2013 64位 – VBA Userform – 添加28天到文本框的date,并显示在另一个文本框中

在我的用户表单中,我有一个用户手动input事件date的文本框“ADD_Inc_DATE_TXT”。

我有另外一个文本框“TxT_SWIRL_DueDate”,它应该显示在“ADD_Inc_DATE_TXT”文本框中inputdate的28天的添加结果,甚至只是在事件发生的date添加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”显示select“ADD_INC_Time_TXT”文本框时的失效date。

而且为了让用户修改事件date,我希望用修改后的date更新TxT_SWIRL_DueDate。


更多信息:我已经在下面列出了所有与date有关的代码。 我有4个dateselect器/popup日历…没有date以dd / mm / yyyy格式出现。 (在将代码放在'代码示例'中有一些问题)

  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()我有以下date相关的代码:Private Sub 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") 

'***注意:我的系统date是dd / mm / yyyy,在电子表格单元格中,格式设置为dd / mm / yyyy

在表单的代码模块中使用此代码(右键单击文本框“查看代码”):

 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 

我build议使用AfterUpdate事件,因为每当文本框中的值发生变化时都会触发Change事件 – 例如在input时。 这只有在用户input完毕后才会触发,然后移到窗体上的下一个窗口(点击其他地方)。

另外考虑使用某种forms的date控件,而不是文本框控件。 这里有很多,根据你使用的Excel版本,你可能只能使用其中的几个选项。