VBA根據儲存格的日數計算結果,運行其他事件?

請問各位師兄師姐可以幫下我?
我做了以下VBA Code,但不明白為何不起作用。

需求如下:

  1. J2 =today()
  2. 用家在J4輸入要求提供服務的日期
  3. L4 =NETWORKDAYS(J4-A4)
  4. 如果L4運算結果 >4, 用家可以繼續輸入下一欄
  5. 否則,彈出MsgBox如下
    • Msgbox 1 : "Application takes at least 4-7 working days"
    • Msgbox 2 : "Please pick another date"
    • 清空J4
    • 給用家重新輸入日期
  6. 用家重新輸入日期後,重新檢證以上事項

img

我的VBA Code如下:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False

If Range("C3") >= 4 Then
    Exit Sub
    
    Else
        msg = MsgBox("Application takes at least 4-7 working days", vbOKOnly, "Reminder")
        Range("A3").Select
        Selection.ClearContents
        msg = MsgBox("Please choose another date", vbOKOnly)
    End If
Application.EnableEvents = True
End Sub

您好,可以尝试以下VBA代码:
vb
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$J$4" Then 

Dim date1 As Date, date2 As Date
date1 = Range("A4").Value  
date2 = Range("J4").Value

If NetworkDays(date2, date1) <= 4 Then
    MsgBox "Application takes at least 4-7 working days"
    MsgBox "Please pick another date"
    Range("J4").ClearContents
End If

End If

End Sub
逻辑说明:
1.WorksheetChange事件中,监听J4单元格的变化
2. 获取A4J4的日期,计算差值的工作日天数
3. 如果工作日天数<=4,则弹出提示框,并清空J4的值
4.J4的值改变时,会再次触发事件,重新验证逻辑
这种方式可以达到您的要求,每次改变J4的值时验证天数是否符合要求。
需要注意Change事件会触发频繁,如果日历计算比较耗时,可以只在J4值改变时触发计算。
请根据实际情况调整逻辑。