Начнем с того, что есть несколько сценариев:
1. Акцент - "ведущий", в нем исполняется код, получаются результаты, после их получения - осуществляется их визуализаций в MS Excel, т.е. последний является "ведомым"
Accent>--msExcel
2. Вариант, когда MS Excel - "ведущий". В нет отрабатывает скрипт на VBA, обращается к Акценту, получает и отображает данные. В данном случае ОМ может и не использоваться (если идет обращение в БД).
Accent-->msExcel
3. Трудно представить себе ситуацию, когда необходим скрипт И в Акценте, И в экселе.
Типичная задача, которая обычно мне ставится - визуализиаровать некоторые данные и позволит пользователю проанализиаровать их в нескольких ракурсах. Для этого можно создать объект СВОДНАЯ ТАБЛИЦА, для которого в качестве источника данных можно указать ADODB.Recordset либо Excel.Range.
Обычно сценарий 1 используется для достаточно простых взаимодействий, когда, например, необходимо отобразить 1:1
Сценарий 2 - для более сложных случаев, группировок, сводных таблиц, и т.д.
Определите себе близкий к Вашей задаче сценарий, я постараюсь помочь.
у нас все происходит намного сложнее:
1. строятся отчеты в акценте
2. перебрасывается в excel, в уже готовый документ, в заранее оговоренный лист
Если отчет большой, предположим там десяток листов в которые нужно передать отчеты, то и лишних движений осуществляется очень много. Опираясь на Вами предложенную манеру реализации - все можно очень упростить.
Цитата:
Сценарий 2 - для более сложных случаев, группировок, сводных таблиц, и т.д.
лучше разобраться в сложном, а простое потом само подтянется. Набросайте мне примеров, а я по мере возникновения вопросов буду их озвучивать
Сценарий 2 - для более сложных случаев, группировок, сводных таблиц, и т.д.
Код:
Sub Кнопка1_Щелкнуть()
Dim sh As Excel.Worksheet
Dim r As Range
Dim d As Range
Dim rs As ADODB.Recordset
Dim pv As PivotTable
Dim objPivotCache As PivotCache
For Each oSheet In Application.Sheets
If UCase(oSheet.Name) = "SOURCE" Then
Set sh = oSheet
sh.Activate
Set r = sh.Range("A8")
sh.Range("A8:IV65535").Clear
Set rs = GetDataSP(sh.Range("B5").Value, CDate(sh.Range("B2").Value), CDate(sh.Range("B3").Value))
If rs.State = adStateOpen Then
'If rs.EOF Then
sh.Range("A8").CopyFromRecordset rs
Set pv = Worksheets("Report").PivotTables("СводнаяТаблица1")
pv.PivotTableWizard xlDatabase, "Source!R7C1:R" & (rs.RecordCount + 9) & "C" & rs.Fields.Count
pv.PivotCache.Refresh
Worksheets("Report").Activate
' Else
' MsgBox "Данные отсутствуют"
'End If
Else 'state
MsgBox "проблема получить данные"
End If
ElseIf UCase(oSheet.Name) = "REport 1 " then
.... do something else....
End If
Next
End Sub
Function getDataSP(Param1 type1, Param2 type2)
Set conn = CreateOBject("ADODB.Connection")
Set rs = CreateOBject("ADODB.RecordSet")
.....
set getDataSP=rs.Execute
End Function
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах