2017-08-01 59 views
0

我正在尋找一種簡單的方法,根據我的Access數據庫中的畢業年份,對學生的當前成績進行「反向工程」(如同學校的年級)。從課程年度開始的反向計算等級

請注意,我不計算學生成績,例如A +或B-。我希望根據他們的班級來計算他們現在的成績,如「一年級」,「八年級」或「十二年級」。

我的表有一個ClassYear列的基礎上,年份,如2018或2024

最棘手的部分,這個解決方案是「當前」級的想法。很容易知道,2018年畢業的學生目前是2017年秋季的一名高年級學生。但是,由於我們正在根據當天日期查找「當前」分數,因此我們希望將計算基於學年(9月1日 - 8月31日)而非日曆年(1月1日 - 12月31日)。

班級年份坐在學生檔案的文本框中,我希望有另一個顯示「當前成績」的鎖定文本框。

我的想法是,onload,即形式會計算基於今天的日期的等級,以及它落在9月1日的範圍內日 - 8月31

舉例來說,如果一個學生類一年是2024 ,今天的日期恰好是2017年9月3日,那麼他們當前的成績將是6年級。 但是,如果今天的日期是2017年8月31日,而該學生的課程年度是2024年,那麼他們目前將在五年級。

任何幫助,將不勝感激! 感謝

回答

1

據我所知,這應該解決您的問題:

Function getGrade(StudentYear As Integer) As Integer 

    getGrade = 12 - DateDiff("yyyy", Date, DateSerial(StudentYear, 1, 1)) 
    If Month(Date) > 8 Then getGrade = getGrade + 1 
End Function 

哪裏StudentYear是學生的畢業一年。

在實際使用中,應該有超過12的負等級或等級的錯誤捕獲(取決於您的管轄權)。

+0

太棒了!感謝你的快速回復。我完全可以處理錯誤捕捉。您的解決方案非常棒,但我無法實施和運行。 我將您的功能設置爲公共模塊,但我無法調用它並將ClassYear傳遞給它。有關觸發它的任何建議?我嘗試通過表單以及從查詢調用函數,沒有運氣(得到一個不匹配)。再次 謝謝! – prsaddict

+0

我不是VBA的專家,所以我總是把函數放在與我打電話給他們相同的模塊/表單中。如果這是您爲此功能提供的唯一應用程序,我不會看到這可能會造成什麼影響。要從另一個模塊調用它,請使用以下語法:'gradeModule.getGrade()'其中gradeModule是getGrade函數所在的模塊。 – TBlock

+0

太棒了。完美工作並填充文本框。非常感謝。 – prsaddict