尝试在VBA中创建一个函数,以便我可以只查询一个表(tblGeoData)并使用函数for field(lngPopulation)。表(tblGeoData)有多行,每年一行(tblGeoData = lngYear中的字段)。所需年份将使用Global Const(lngDataYr)定义。因此该函数将获取tblGeoData.lngPopulation,其中tblGeoData.lngYr = lngDataYr,lngDataYr-1,lngDataYr-2。因此,如果Global Const lngDataYr设置为2014,那么该函数将在2014年,2013年和2012年抓住lngPopulation。然后,使用lngPopulation的3个值计算平均变化率(为简洁而缩短为pop):
AvgChangeRate =((2014年流行音乐 - 2013年流行音乐)/ 2013年流行音乐+(2013年流行音乐 - 2012年流行音乐)/ 2012年流行音乐)/ 2
确切地说如何创建这个函数,但我认为它可以用于任何字段,而不仅仅是lngPopulation,它将有2个参数,1是字段,另一个是指定哪些行的标准。可能,我可以先查询行(比如使用名为GetlngDataYr的函数调用Global Const:
SELECT tblGeoData.lngPopulation
FROM tblGeoData
WHERE tblGeoData.lngYear In(GetlngDataYr(),GetlngDataYr-1,GetlngDataYr-2);
但是函数也可以提取数据。
答案 0 :(得分:0)
您可以只检索这三个值并进行计算:
Public Function PopRate() As Double
Dim rs As DAO.Recordset
Dim AvgChangeRate As Double
Dim SQL As String
Dim Pops As Variant
SQL = "SELECT lngPopulation As pop FROM tblGeoData WHERE lngYear Between GetlngDataYr() And (GetlngDataYr() - 2) Order By lngYear Desc;"
Set rs = CurrentDb.OpenRecordset(SQL)
' Copy values to array.
Pops = rs.GetRows(3)
rs.Close
AvgChangeRate = ((Pops(0, 0) - Pops(0, 1)) / Pops(0, 1) + (Pops(0, 1) - Pops(0, 2)) / Pops(0, 2)) / 2
Set rs = Nothing
Poprate = AvgChangeRate
End Function