簡體   English   中英

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”,它應該顯示將 28 天添加到“ADD_Inc_DATE_TXT”文本框中輸入的日期的結果,或者甚至只是將 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 個日期選擇器/彈出式日歷......並且沒有一個日期以 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() 下,我有以下與日期相關的代碼: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")

'***注意:我的系統日期是 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

我建議使用 AfterUpdate 事件,因為每次更改文本框中的值時都會觸發 Change 事件 - 例如,也在鍵入時。 這僅在用戶完成輸入並移動到表單上的下一個條目時觸發(點擊其他地方)。

還可以考慮使用某種形式的日期控件而不是文本框控件。 那里有很多,根據您使用的 Excel 版本,您可能只能使用其中的少數幾個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM