2013-07-18 41 views
0

我正在寫一個藥物管理應用程序。主表名稱爲ResidentMedications。第二個表名是Resident24HourTable。我的主要形式是ResidentMedicationsExtended,其子表單爲Resident24HourPeriod。 Resident24HourPeriod包含24個複選框,每天一個小時。 (12A,1A,2A,3A等)。循環(?)和設置值Access VBA

在ResidentMedicationsExtended表單中是一個組合框[Frequency]。爲了簡單起見,我們假設選擇「Q4H」,即「每天4次」。另一個字段[First Dose]允許用戶輸入居民將接受他們的第一日劑量的時間。我們會說6:00 AM。

我有一個命令按鈕,我想檢查基於Frequency和First Dose字段的子窗體中的適當時間。到目前爲止,我寫了以下內容:

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

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

使用Hour()TimeValue()轉換 「1:00:00 AM。」 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