2015-12-07 6 views
0

Я использую пользовательскую форму в excel, чтобы пользователи могли импортировать данные требований из базы данных Access и вставлять их в место назначения в книге.VBA Excel - импорт из данных доступа и суммирования

Код, приведенный ниже, позволяет импортировать номера претензий за каждый из последних 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 
+0

Чтобы было ясно: у вас есть " База данных теперь "из вашей картинки уже в базе данных Access? Или вы хотите изменить код импорта так, чтобы он получал данные из базы данных до выхода из системы и помещал ее в excel в структуру, которую вы теперь обозначили как «база данных»? Не могли бы вы создать запрос в доступе, чтобы изменить структуру, а затем импортировать ее 1: 1 в Excel? И вам нужно получить сумму ClaimAmts для определенного ClaimRef? В Excel? – Johanness

+0

Привет Johanness. Да, теперь у меня есть «база данных» в базе данных доступа. База данных раньше была структурирована как «база данных до», где данные претензий были суммированы по годам. Так что все, что мне нужно было сделать, это найти ячейку в таблице доступа для конкретного года/политики. Но теперь претензии не суммируются в течение года - я хочу суммировать их в год в своем коде. Вероятно, вы думаете, почему не просто сохранить структуру «старой базы данных», но мне нужно настроить требования на основе параметров в моей пользовательской форме, а затем суммировать (я доволен тем, как я сделаю часть настройки). –

+0

Мне все еще неясно. Ваш код не имеет особого смысла. Это работает? Вы выбираете несколько наборов данных, а затем заполняете их в элемент управления (какой контроль?). И где вы хотите поставить Sum? – Johanness

ответ

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") 
    ...