简体   繁体   English

Excel VBA:日期比较

[英]Excel VBA: Date Comparison

So I'm currently trying to make a code to compare the current date to two other dates in order to determine the validity of information. 因此,我目前正在尝试编写代码以将当前日期与其他两个日期进行比较,以确定信息的有效性。 For example, if the date is between the first quarter of the year and the second quarter, the information on the document is as of the first quarter date (March 31). 例如,如果日期在一年的第一季度和第二季度之间,则该文档上的信息以第一季度的日期(3月31日)为准。 Below is what I currently have and for some reason even though the current date is in July, the code keeps saying the information is valid as of March 31. Anyone have any suggestions? 以下是我目前拥有的内容,由于某种原因,即使当前日期为七月,代码仍会说该信息自3月31日起有效。有人有任何建议吗?

crntDate = Date
q1End = CDate("Mar 31" & " " & Year(Date))
q2End = CDate("Jun 30" & " " & Year(Date))
q3End = CDate("Sep 30" & " " & Year(Date))
q4End = CDate("Dec 31" & " " & Year(Date))

If q1End <= crntDate <= q2End Then
    quart = "Q1" & " " & Year(Date)
ElseIf q2End <= crntDate <= q3End Then
    quart = "Q2" & " " & Year(Date)
ElseIf q3End <= crntDate <= q4End Then
    quart = "Q3" & " " & Year(Date)
Else
    quart = "Q4" & " " & Year(Date)
End If

shName = "Quarterly Reporting for" & " " & firstName & " " & lastName & " " & "(" & quart & ")"
With wdApp.ActiveDocument
    .SaveAs2 "https://path/" & shName & ".docx"
    .Close
End With

If you're trying to format dates as quarters, you don't need all of the end dates and comparisons, you can just use integer division \\ in VBA. 如果您尝试将日期格式设置为季度,则不需要所有的结束日期和比较,可以在VBA中使用整数除法\\

Sub test()

  Dim quart As String
  quart = GetDateAsQuarterYear(VBA.Date)

  shName = "Quarterly Reporting for" & " " & firstName & " " & lastName & " " & "(" & quart & ")"
  With wdApp.ActiveDocument
    .SaveAs2 "https://path/" & shName & ".docx"
    .Close
  End With
End Sub

Function GetDateAsQuarterYear(crntDate As Date) As String

  Dim quarterEnd As Date
  quarterEnd = DateSerial(Year(crntDate), 1 + 3 * (1 + (Month(crntDate) - 1) \ 3), 0)

  GetDateAsQuarterYear = "Q" & 1 + (Month(crntDate) - 1) \ 3 & " (" & Format$(quarterEnd, "mmmm d, yyyy") & ")"

End Function

q1End <= crntDate <= q2End does not work in Excel it needs to be: q1End <= crntDate <= q2End在Excel中不起作用,它必须是:

q1End <= crntDate  and crntDate <= q2End

So 所以

crntDate = Date
q1End = CDate("Mar 31" & " " & Year(Date))
q2End = CDate("Jun 30" & " " & Year(Date))
q3End = CDate("Sep 30" & " " & Year(Date))
q4End = CDate("Dec 31" & " " & Year(Date))

If q1End <= crntDate  and crntDate <= q2End Then
    quart = "Q2" & " " & Year(Date)
ElseIf q2End <= crntDate  and crntDate <= q3End Then
    quart = "Q3" & " " & Year(Date)
ElseIf q3End <= crntDate  and crntDate <= q4End Then
    quart = "Q4" & " " & Year(Date)
Else
    quart = "Q1" & " " & Year(Date)
End If

shName = "Quarterly Reporting for" & " " & firstName & " " & lastName & " " & "(" & quart & ")"
With wdApp.ActiveDocument
    .SaveAs2 "https://path/" & shName & ".docx"
    .Close
End With

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM