我正在写一个药物管理应用程序。主表名称是ResidentMedications。第二个表名是Resident24HourTable。我的主要表格是ResidentMedicationsExtended,其子表单为Resident24HourPeriod。 Resident24HourPeriod包含24个复选框,每天一个小时。 (12A,1A,2A,3A等)。
在ResidentMedicationsExtended表格中是一个组合框[频率]。为简单起见,我们选择“Q4H”,“每天4次”。另一个领域[First Dose]允许用户输入居民将接收他们的第一日剂量的时间。我们会说早上6点。
我有一个命令按钮,我想根据频率和首次剂量字段检查子窗体中的适当时间。到目前为止,我写了以下内容:
Private Sub Command90_Click()
If Me.FirstDose = "12:00:00 AM" Then
Forms!ResidentMedicationsExtended.Form.Resident24HourTable![12A] = True
ElseIf Me.FirstDose = "1:00:00 AM" Then
Forms!ResidentMedicationsExtended.Form.Resident24HourTable![1A] = True
ElseIf Me.FirstDose = "2:00:00 AM" Then
Forms!ResidentMedicationsExtended.Form.Resident24HourTable![2A] = True
ElseIf Me.FirstDose = "3:00:00 AM" Then
Forms!ResidentMedicationsExtended.Form.Resident24HourTable![3A] = True
依旧等等 - 很多行。我知道我每次都可以写单独的行,写更多以使复选框变为False等。显然,这样做会产生大量的代码行,而我还没有计算其余时间的药物时间
是否有循环或其他我可以使用的东西?我已阅读大量帖子,但未能提出解决方案。
我提前感谢您的时间!
答案 0 :(得分:0)
一天4次意味着[每6小时一次]。在下拉框中,您应该显示文本描述,但是对于键,使用可以更容易进行数学运算的值。以小时为单位使用出现之间的时间段。然后,更容易使用循环来完成出现(直到你已经覆盖了24小时) 另一种方法是使用日期计算函数,如CDate(),DateAdd()和DatePart()来计算时间值。
所以,举个例子:一天4次。您的列表值为6(间隔6小时)
Private Sub Command30_Click()
Dim totalHours as integer
Dim interval as integer
interval = *** the value from your interval dropdown, eg 6 (hours) ***
Dim nextDose as integer
nextDose = Me.FirstDose ' text was 12 am, but stored in 24 hour format as 0
While totalHours < 24
Forms!ResidentMedicationsExtended.Form.Resident24HourTable![nextDose] = True
nextDose = nextDose + interval
totalHours = totalHours + interval
Wend 'or End While
答案 1 :(得分:0)
使用Hour()
和TimeValue()
转换&#34; 1:00:00 AM&#34;到1等,然后用这个数字来识别控件:
Dim hrFirst As Integer
hrFirst = Hour(TimeValue(Me.FirstDose)) 'returns 0 for 12am, 1 for 1am
hrFirst = IIF(hrFirst = 0, 12, hrFirst)
Forms!ResidentMedicationsExtended.Form.Resident24HourTable.Controls(hrFirst & "A") = True