0

我正在编写一个药物管理应用程序。主表名称是 ResidentMedications。第二个表名是 Resident24HourTable。我的主要表格是 ResidentMedicationsExtended,还有一个子表格 Resident24HourPeriod。Resident24HourPeriod 包含 24 个复选框,一天中每个小时一个。(12A、1A、2A、3A 等)。

在 ResidentMedicationsExtended 表格内有一个组合框 [Frequency]。为简单起见,假设选择了“Q4H”,即“每天 4 次”。另一个字段 [First Dose] 允许用户输入居民将接受他们的第一次每日剂量的时间。我们会说早上 6:00。

我有一个命令按钮,我想根据频率和首次剂量字段检查子表单中的适当时间。到目前为止,我已经写了以下内容:

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 等。显然,这样做会产生数以亿计的代码行,而我还没有计算剩下的几天服药时间.

是否有循环或我可以使用的东西?我已经阅读了大量帖子,但无法提出解决方案。

我提前感谢您的时间!

4

2 回答 2

0

使用Hour()andTimeValue()将 "1:00:00 AM" 转换为 1 等,然后使用此数字来识别 Control:

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
于 2013-07-18T21:03:39.087 回答
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
于 2013-07-18T20:43:23.113 回答