VBA Excel - 从访问和汇总数据导入

时间:2015-12-07 14:01:19

标签: vba excel-vba ms-access excel

我在excel中使用userform允许用户从Access数据库导入声明数据并将其粘贴到工作簿中的目标中。

以下代码允许用户导入特定保单号的过去5年中每一个的索赔号。

访问数据库当前汇总了索赔数据,因此Y年中政策Y的所有索赔都在一行上。但是,我需要更改代码,以便可以提取单个索赔金额,然后根据用户表单中设置的参数进行调整(即限制索赔为100,000),然后进行汇总,以便所有(调整后的索赔)都在每年单行。

我已经包含了一个数据库结构之前的样子以及现在的样子。我想在承保年度中包含一些循环所有索赔的内容,并总计总额。

database

在没有详细介绍的情况下,我想知道在调整数据后如何汇总数据。我需要在下面的代码中使用另一个循环吗?

Public Const RawdataDB = "N:\***\Rawdata DB.accdb"

Private Sub CommandButton1_Click()
  Dim dbRawData As Database
  Dim rTemp As Recordset
  Dim sSQL As String
  Dim YearTemp As Integer
  Dim i As Integer

  i = 1
  Do Until i = 6
    YearTemp = Year(Range("RenewalDate")) - i
    Set dbRawData = OpenDatabase(RawdataDB, False, False, "MS Access;PWD=*****")
    sSQL = "SELECT Galway_Claims.* FROM Galway_Claims WHERE (Galway_Claims.PolicyNo=" & Range("PolicyNoNew") & " AND Galway_Claims.Year=" & Range("UWYear") - 1 & " AND Galway_Claims.HistoricYear=" & i & ");"
    Set rTemp = dbRawData.OpenRecordset(sSQL)
    Controls("ClaimNos" & i).Value = Format(rTemp!ClaimNosD, "0.0")
    i = i + 1
  Loop
  rTemp.Close
End Sub

1 个答案:

答案 0 :(得分:0)

这里最简单的似乎是对访问中的所有内容进行求和:进行另一个查询:

sSQL = "SELECT Sum(Galway_Claims.ClaimAmts) as theSum FROM Galway_Claims WHERE (Galway_Claims.PolicyNo=" & Range("PolicyNoNew") & " AND Galway_Claims.Year=" & Range("UWYear") - 1 & " AND Galway_Claims.HistoricYear=" & i & ");"

然后像以前一样阅读:

    sSQL = "SELECT Galway_Claims.* FROM Galway_Claims WHERE (Galway_Claims.PolicyNo=" & Range("PolicyNoNew") & " AND Galway_Claims.Year=" & Range("UWYear") - 1 & " AND Galway_Claims.HistoricYear=" & i & ");"
    Set rTemp = dbRawData.OpenRecordset(sSQL)
    Controls("ClaimNos" & i).Value = Format(rTemp!ClaimNosD, "0.0")
    sSQL = "SELECT Sum(Galway_Claims.ClaimAmts) as theSum FROM Galway_Claims WHERE (Galway_Claims.PolicyNo=" & Range("PolicyNoNew") & " AND Galway_Claims.Year=" & Range("UWYear") - 1 & " AND Galway_Claims.HistoricYear=" & i & ");"
    Set rTempSum = dbRawData.OpenRecordset(sSQL)
    Controls("ClaimNos" & i).Value = Format(rTempSum!theSum, "0.0")
    ...