Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2010, 12:03   #1
sahthey
 
Регистрация: 09.12.2009
Сообщений: 8
По умолчанию Прога в Access

Добрый день, форумчане! Всех с новым годом!

Я на данный момент завершаю свою прогу (в кратций суть проги - на экселевски шаблон вытащить данные с таблицы, это часть уже сделана) и тут вышла одна загвоздка. По тем данным (на данный момент речь идет о работников организаций с их суммами) которые вышли в формате эксель, нужно в конце итоговые суммы посчитать. А загвоздка в том, что у меня кусок проги где я считаю итоговые суммы выдает ошибку, которую я никак не могу понять.
Честно говоря не удивлюсь, если Вы напишите мне: "Ну, так получается загвоздка не в проге, а в Вас, так как не можете понять что говорит Вам прога!".
Но, я все таки надеюсь на Ваше понимание и буду ждать ответы!

В целом картина должна быть такова:
Алимаханова 5000 2000
Утемисова 1000 1000
Итого 6000 3000

Set rst = New ADODB.Recordset
Set rst.ActiveConnection = CurrentProject.Connection
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
rst.Source = "ks_form4_rep_step4_main"
rst.Open Options:=adCmdTable

p = 7 ' номер первой выводимой строки
snf = ""
s_tr = 0
s_kr = 0
s_vsego = 0
sgr = ""
st1 = ""
With rst
If .RecordCount > 0 Then
.MoveFirst
Do
snf = rst("INF")
sgr = rst("GR")
st1 = rst("ST")
s_tr = rst("SUM_TR")
s_kr = rst("SUM_KR")
s_vsego = rst("SUM_VSEGO")
If InStr(snf, Chr(27)) Then ' начало группы по ("начислено/удержано")
p = p + 1
'xlsheet1.cells(p, 1).Value = "'" & sgr
xlsheet1.cells(p, 2).Value = rst("GNAME")
xlsheet1.cells(p, 1).Font.Bold = True
xlsheet1.cells(p, 2).Font.Bold = True
xlsheet1.cells(p, 1).Font.Italic = True
xlsheet1.cells(p, 2).Font.Italic = True
ElseIf InStr(snf, Chr(255)) Then ' итоги группы по ( "начислено/удержано")
p = p + 1
For i = 1 To wp_start + wp_col
xlsheet1.cells(p, i).interior.colorindex = icolor2
Next
If sgr <> GR_UDERJ Then ' Итоги по группе "удержания" не выводить
xlsheet1.cells(p, 2).Value = "Итого:"
xlsheet1.cells(p, 2).Font.Bold = True
xlsheet1.cells(p, 3).Font.Bold = True
xlsheet1.cells(p, 4).Font.Bold = True
xlsheet1.cells(p, 2).Font.Underline = True
xlsheet1.cells(p, 5).Font.Underline = True
sahthey вне форума Ответить с цитированием
Старый 12.01.2010, 21:02   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте sahthey.
выполнить Вашу задачу без перебора рекордсета, можно подобным кодом:
Код:
Sub toExcel()
'p = 7 ' номер первой выводимой строки
Const iStartRow = 7 'его стоит сделать константой
Const sSql = "ks_form4_rep_step4_main" 'константа описывающая источник
'Dim snf$, s_tr#, s_kr#, s_vsego#, sgr$, st1$
'правильнее объявлять переменные с явным указанием типа,
'а не инициировать не объявленные переменные, задавая им стартовые значения
'snf = "": s_tr = 0: s_kr = 0: s_vsego = 0: sgr = "": st1 = ""
Dim rst As ADODB.Recordset, cnn As ADODB.Connection, iLast&

Set rst = New ADODB.Recordset
Set cnn = CurrentProject.Connection
rs.Open sSql, cnn, adOpenKeyset, adLockReadOnly
'обращение к заранее созданному объекту xlsheet1
'
With xlsheet1
    If rst.RecordCount > 0 Then
        'заполнение листа
        xlsheet1.Range("b" & iStartRow).CopyFromRecordset rst
        iLast = iStartRow + rst.RecordCount
        'заполнение итогов
        .Cells(iLast, 2).Value = "Итого:"
        .Cells(iLast, 4).FormulaR1C1 = "=SUM(R" & iStartRow & "C:R" & iLast - 1 & "C)"
        .Cells(iLast, 3).FormulaR1C1 = "=SUM(R" & iStartRow & "C:R" & iLast - 1 & "C)"
        'применение необходимого форматирования, но уже к заполненным диапазонам ячеек
        .Range(Cells(iStartRow, 1), Cells(iLast, 2)).Font.Bold = True
        .Range(Cells(iStartRow, 1), Cells(iLast, 2)).Font.Italic = True
        '....
    End If
End With
rst.Close: Set rst = Nothing
Евгений.
P.S. для удобочитаемости заключайте выкладываемый код в тэги [соde]...[/соde]

Последний раз редактировалось Teslenko_EA; 12.01.2010 в 21:05.
Teslenko_EA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть БД на Access 2.0, нужно открыть в Access 2003 Spirit_33 Microsoft Office Access 1 23.07.2009 07:59
Access 97, открыть базу данных Access alexhol Microsoft Office Access 0 27.04.2009 12:10
прога и чюжая прога benjaminfran Общие вопросы Delphi 5 28.03.2008 15:07
Delphy и Access.вводя инфу во вторичный файл Access, она отражалась в первом ADOTable Lev БД в Delphi 0 11.11.2007 12:14
прога vovik Свободное общение 2 02.07.2007 10:13