我正在创建一个预测该月最后一天的程序。我已经设法给这几个月他们的价值,但是这一年也需要写,以确定它是否是闰年。 对象: 2个文本框,1个命令按钮,1个标签
不幸的是,需要选择案例。
我的代码:
Private Sub Command1_Click()
Dim month, year As String
month = txtmonth.Text
year = txtyear.Text
Select Case month
Case "Feb", "February"
lblday.Caption = CStr(Day(DateSerial(year, 3, 1) - 1))
Case "Jan", "January", "Mar", "March", "May", "Jul", "July", "Aug", "August", "Oct", "October", Dec, December
lblday.Caption = "It has" & " " & CStr(Day(DateSerial(year, 3 + 2, 1) - 1)) & " " & "days"
'year/30/month
Case "April", "Jun", "June", "Sept", "September", "Nov", "November"
lblday.Caption = "It has" & " " & CStr(Day(DateSerial(year, 3 + 1, 1) - 1)) & " " & "days"
'year/31/month
End Select
End Sub
答案 0 :(得分:1)
用户应该输入文本框,字符串或数字是什么?
如果用户输入是一个字符串,那么您应该将月份放在引号中,例如此Case "Feb", "February"
和month
需要声明为String
并直接指定txtmonth.Text
Val
如果用户输入是一个数字,那么您需要从Case
Feb
和March
中移除所有短月和长月名称并使用这样的数字{{1 }}
如果您希望优化代码(假设您必须拥有Case 2 ' this is for February
),而不是要求用户进行闰年,您可以自己计算:
Case
如果您不必拥有Case Feb, February
lblday.Caption = Cstr(day(DateSerial(Year(Now), 3, 1) - 1))
,那么您的所有代码都可以针对此进行优化:
Case
使用该代码,您可以输入月份编号,月份全名或月份短名称,它将起作用。它将假设年份为当前年份(您没有指定用户是否输入年份)。
修改强>
我拿了你的代码并修正了以下内容:
Private Sub Command1_Click()
lblday.Caption = CStr(Day(DateSerial(Year(Now), Month(DateValue(txtmonth.Text & " 0")) + 1, 1) - 1))
End Sub
才有效。现在一切正常:Oct
,oct
,OCT
,oCt
...... OcT
更改为Sept
以保持一致sep
从4月开始的天数,从3月开始使用此Day(DateSerial(year, 3 + 2, 1) - 1)
的31天。如果将来我们改变三月份的天数会怎样?整个逻辑崩溃了。我意识到这是不太可能的,但仍有可能。我们绝对没有理由不能像Day(DateSerial(year, 3 + 1, 1) - 1)
CStr(Day(DateSerial(year, month(DateValue(txtmonth.Text & " 0")) + 1, 1) - 1))
的函数,但你已经有一个名为Month
的命名错误的变量,所以这是我必须解决的冲突,因此删除了变量{完全{1}}。如果必须拥有它,请将其重命名为month
或其他内容。 有一些明确定义代码的一些提示:
- 将month
重命名为myMonth
year
lblday myYear
lblDay use camel style: change all labels and text boxes to follow this naming convention. Example: rename
txtmonth to
txtMonth and
如果您不需要,请不要使用变量。 to
变量是不必要的。您甚至可以删除
变量,因为您根本不对其进行任何计算。
month
答案 1 :(得分:0)
LastDate= DateAdd("m", 1, DateAdd("d", -1 * Day(Date), Date))