【问题标题】:Looping (?) and setting values Access VBA循环(?)和设置值访问 VBA
【发布时间】:2013-07-17 23:06:27
【问题描述】:

我正在编写一个药物管理应用程序。主表名称是 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 等。显然,这样做会产生数以亿计的代码行,而我还没有计算剩下的几天服药时间.

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

提前感谢您的宝贵时间!

【问题讨论】:

    标签: vba loops


    【解决方案1】:

    一天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
    

    【讨论】:

      【解决方案2】:

      使用Hour()TimeValue()将“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
      

      【讨论】:

        猜你喜欢
        • 2021-07-27
        • 2015-09-29
        • 2018-02-27
        • 1970-01-01
        • 1970-01-01
        • 2017-11-10
        • 2018-05-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多