powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сводная табл. в Excel на основе рекордсета
25 сообщений из 28, страница 1 из 2
Сводная табл. в Excel на основе рекордсета
    #32640743
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открываю рекордсет. Дальше идет сводная. в SourceData:= что писать. Писал просто имя рекордсета ругается.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDAORecordSet, _
    SourceData:="?????").CreatePivotTable TableDestination:="", _
    TableName:="СводнаяТаблица1"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells( 5 ,  1 )
    ActiveSheet.Cells( 5 ,  1 ).Select
    ActiveSheet.PivotTables("СводнаяТаблица1").SmallGrid = False
    ActiveSheet.PivotTables("СводнаяТаблица1").AddFields RowFields:=Array( _
        "Группа", "Товар"), ColumnFields:="Дата", PageFields:="Марка"
    ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Заявка").Orientation = _
        xlDataField
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32640860
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
люди помогите кто-нибудь или хотя бы ссылку дайте. На форуме по поиску ничего на эту тему не нашел.
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32640902
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SourceData Property

Returns the data source for the PivotTable report, as shown in the following table. Read-write Variant.

Data source Return value
Microsoft Excel list or database The cell reference, as text.
External data source An array. Each row consists of an SQL connection string with the remaining elements as the query string, broken down into 255-character segments.
Multiple consolidation ranges A two-dimensional array. Each row consists of a reference and its associated page field items.
Another PivotTable report One of the above three kinds of information.

Remarks
This property is not available for OLE DB data sources.

Example
Assume that you used an external data source to create a PivotTable report on Sheet1. This example inserts the SQL connection string and query string into a new worksheet.

Set newSheet = ActiveWorkbook.Worksheets.Add
sdArray = Worksheets("Sheet1").UsedRange.PivotTable.SourceData
For i = LBound(sdArray) To UBound(sdArray)
newSheet.Cells(i, 1) = sdArray(i)
Next i
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32640925
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е это не то что тебе нужно.
Спроси как надо на форуме по OLAP.
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32640944
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
родной
это делается не так

или
ты создаешь в Access форму с лежащей на ней сводной таблицей (вкладка формы - новая - из списка мастеров выбираешь сводную)
и потом просто жмакаешь по табличке этой ОБНОВИТЬ и радуешься
при этом все у тебя лежит в базе Access

или
ты руками перекачиваешь сначала на специально отведенный для этого лист в ОТДЕЛЬНОМ от базы mdb файлике Excel весь свой рекордсет
а потом командуешь Excel обновить твою таблу
когда будешь командовать, не забудь, что диапазон выгруженных
данных может быть БОЛЬШЕ, чем ты задавал при разработке
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32640949
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelSourceData Property

Returns the data source for the PivotTable report, as shown in the following table. Read-write Variant.

Data source Return value
Microsoft Excel list or database The cell reference, as text.
External data source An array. Each row consists of an SQL connection string with the remaining elements as the query string, broken down into 255-character segments.
Multiple consolidation ranges A two-dimensional array. Each row consists of a reference and its associated page field items.
Another PivotTable report One of the above three kinds of information.

Remarks
This property is not available for OLE DB data sources.

Example
Assume that you used an external data source to create a PivotTable report on Sheet1. This example inserts the SQL connection string and query string into a new worksheet.

Set newSheet = ActiveWorkbook.Worksheets.Add
sdArray = Worksheets("Sheet1").UsedRange.PivotTable.SourceData
For i = LBound(sdArray) To UBound(sdArray)
newSheet.Cells(i, 1) = sdArray(i)
Next i
спасибо что откликнулся. Правда с английским у меня туго. пример посмотрел, но если не ошибаюсь там говориться о данных с другого листа Excel. У меня же рекордсет берет данные из базы и вставляет в Excel. Тут еще порылся и понял, что код в качестве примера выгрузил не правильный (он подходит для выгрузки данных с другого листа). Для рекордсета будет немного по другому. Сейчас буду рекордсет засовывать в массив и на основе массива делать сводную. Подскажи может чего получше есть?
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32640960
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexus12или
ты руками перекачиваешь сначала на специально отведенный для этого лист в ОТДЕЛЬНОМ от базы mdb файлике Excel весь свой рекордсет
а потом командуешь Excel обновить твою таблу
когда будешь командовать, не забудь, что диапазон выгруженных
данных может быть БОЛЬШЕ, чем ты задавал при разработке

А без перекачки на другой лист не ужто не реально? Как то через одно место получается
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32640968
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а без перекачки - как билли прописал
(формы - сводная таблица)
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32640998
Фотография Pavel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я думаю можно и программно, только гемора больше.
Посмотри метод PivotTableWizard.
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32641028
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PavelДа я думаю можно и программно, только гемора больше.
Посмотри метод PivotTableWizard.
Я тут просто воспользовался авт. написанием макроса в Excel и он мне дал следующий код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub Макрос5()
    With ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
        .Connection = Array(Array( _
        "ODBC;DSN=База данных MS Access;DBQ=C:\Work\База\001.mdb;DefaultDir=C:\Work\База;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTim" _
        ), Array("eout=5;PWD=Вася;UID=admin;"))
        .CommandType = xlCmdSql
        .CommandText = Array( _
        "SELECT Месяц.Область, Месяц.Фирма, Месяц.Марка, Месяц.Группа, Месяц.Товар, Месяц.Дата, Месяц.`Sum-Продано_кг`, Месяц.`Sum-Продано_руб`" & Chr( 13 ) & "" & Chr( 10 ) & "FROM `C:\Work\База\001`.Месяц Месяц" _
        )
        .CreatePivotTable TableDestination:=Range("A3"), TableName:= _
        "СводнаяТаблица2"
    End With
    ActiveSheet.PivotTables("СводнаяТаблица2").SmallGrid = ЛОЖЬ
    ActiveSheet.PivotTables("СводнаяТаблица2").AddFields RowFields:=Array( _
        "Группа", "Товар"), ColumnFields:="Дата", PageFields:="Марка"
    ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Sum-Продано_кг"). _
        Orientation = xlDataField
End Sub
И я так думаю, что если за место ODBC и прочего пропишу рекордсет, то по уму все должно работать
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32641104
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если вместо ODBC - ничего не заработает
поелику Excel одбцшным драйвером в Access ходит
что и видишь ты макрос записав

подправь SELECT на нужный тебе - и счастлив будешь
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32641187
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexus12если вместо ODBC - ничего не заработает
поелику Excel одбцшным драйвером в Access ходит
что и видишь ты макрос записав

подправь SELECT на нужный тебе - и счастлив будешь
веришь нет, но нашел в хэлпе вариант с рекордсетом, только рекорсет ADODB, а мне нужно DAO. И так его пробовал и сяк, а нифига не получается. Может поможете?
Хэлп:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
Dim cnnConn As ADODB.Connection
Dim rstRecordset As ADODB.Recordset
Dim cmdCommand As ADODB.Command

 ' Open the connection. 
Set cnnConn = New ADODB.Connection
With cnnConn
    .ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0"
    .Open "C:\perfdate\record.mdb"
End With

 ' Set the command text. 
Set cmdCommand = New ADODB.Command
Set cmdCommand.ActiveConnection = cnnConn
With cmdCommand
    .CommandText = "Select Speed, Pressure, Time From DynoRun"
    .CommandType = adCmdText
    .Execute
End With

 ' Open the recordset. 
Set rstRecordset = New ADODB.Recordset
Set rstRecordset.ActiveConnection = cnnConn
rstRecordset.Open cmdCommand

 ' Create a PivotTable cache and report. 
Set objPivotCache = ActiveWorkbook.PivotCaches.Add( _
    SourceType:=xlExternal)
Set objPivotCache.Recordset = rstRecordset
With objPivotCache
    .CreatePivotTable TableDestination:=Range("A3"), _
        TableName:="Performance"
End With

With ActiveSheet.PivotTables("Performance")
    .SmallGrid = False
    With .PivotFields("Pressure")
        .Orientation = xlRowField
        .Position =  1 
    End With
    With .PivotFields("Speed")
        .Orientation = xlColumnField
        .Position =  1 
    End With
    With .PivotFields("Time")
        .Orientation = xlDataField
        .Position =  1 
    End With
End With

 ' Close the connections and clean up. 
cnnConn.Close
Set cmdCommand = Nothing
Set rstRecordSet = Nothing
Set cnnConn = Nothing
Мой рекордсет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Sub Макрос3()
    
    Dim dbAccess As Database
    Dim TestTable As DAO.Recordset
    Dim Sql_String As String
    Dim a, b As Date
    Dim c As Integer
    
    On Error GoTo ErrorsDB
    
    Set dbAccess = OpenDatabase("\\ws228\A_Milk\База\0030.mdb")
    Sql_String = "SELECT [003].Дата, [2_Группы].Группа, [3_ Марки].Марка, [2_Ассортимент1].Товар, Sum([003].Продано_кг) AS Заявка" & _
    " FROM [3_ Марки] INNER JOIN (2_Группы INNER JOIN (2_Виды INNER JOIN ((2_Ассортимент INNER JOIN 2_Ассортимент1 ON [2_Ассортимент].Ключ = [2_Ассортимент1].Ключ) INNER JOIN 003 ON [2_Ассортимент1].Ключ = [003].Ассортимент) ON [2_Виды].Ключ = [2_Ассортимент].Вид) ON [2_Группы].Ключ = [2_Виды].Группа) ON [3_ Марки].Ключ = [2_Ассортимент].Марка" & _
    " GROUP BY [003].Дата, [2_Группы].Группа, [3_ Марки].Марка, [2_Ассортимент1].Товар;"

    Set TestTable = dbAccess.OpenRecordset(Sql_String)
    
    If (TestTable.RecordCount >  0 ) Then
        Cells( 2 ,  1 ).CopyFromRecordset TestTable
        intFildCount = TestTable.Fields.Count -  1 
        For intI =  0  To intFildCount
        Cells( 1 , intI +  1 ).Value = TestTable.Fields(intI).Name
        Next intI
    Else: MsgBox "Not Found"
    End If

    TestTable.Close
    GoTo Ends
        
ErrorsDB:
    MsgBox "Произошла ошибка"
Ends:

End Sub

...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32641280
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чем тебя не устроил АДО?
подставь в пример из хэлпа свои переменные - и вперед
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32641316
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexus12чем тебя не устроил АДО?
подставь в пример из хэлпа свои переменные - и вперед
дело в том, что смотрю я на этот пример, ну уж больно он большой. Уверен на 99,9%, что его можно укоротить чуть ли не вдвое. А в связи с тем, что я только начинающий хотелось бы начинать писать кратко, но точно. а с ADO просто не работал. начал писать рекорсеты с DAO, так и пишу.
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32641457
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди ну помогите пожалуйста засунуть этот DAO.Recordset напрямую в PivotTable в Excell без всяких побочных выгрузок. Ведь на сто процентов уверен, что это реально
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32641608
v-metallic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сему цепляю мдб-шник с реально работающим модулем експорта в ексель

Влад
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32641961
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v-metallicК сему цепляю мдб-шник с реально работающим модулем експорта в ексель

Влад
спасибо конечно, но где вставка в сводную таблицу? Экспортировать в Excel при помощи рекордсета для меня проблем не составляет
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32642054
v-metallic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Свводную таблицу вы формируете а Аксессе. Вернее, запрос.
Приведенный мною пример создает Ексель-файл с нуля, а данные в него вставляются из рекордсета.
Возможно вам следовало бы сделать аналогично: создаете Ексель файл и вставляете в него данные из рекордсета, который, в свою очередь, сделан на базе т.н. "сводного" запроса.
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32642080
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v-metallicСвводную таблицу вы формируете а Аксессе. Вернее, запрос.
Приведенный мною пример создает Ексель-файл с нуля, а данные в него вставляются из рекордсета.
Возможно вам следовало бы сделать аналогично: создаете Ексель файл и вставляете в него данные из рекордсета, который, в свою очередь, сделан на базе т.н. "сводного" запроса.
1.Что есть "сводный" запрос? Обыкновенный запрос в базе данных?
2.Мне нужна выгрузка DAO.Recordset напрямую в PivotTable(Сводная таблица)
3.Создать из базы xls файл, выгрузить в него рекордсет на основе запроса в базе НЕ ПРОБЛЕМА.
ПРОБЛЕМА В PivotTable
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32642157
гостик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NikP Alexus12чем тебя не устроил АДО?
подставь в пример из хэлпа свои переменные - и вперед
дело в том, что смотрю я на этот пример, ну уж больно он большой. Уверен на 99,9%, что его можно укоротить чуть ли не вдвое. А в связи с тем, что я только начинающий хотелось бы начинать писать кратко, но точно. а с ADO просто не работал. начал писать рекорсеты с DAO, так и пишу.

- хочу собрать мерседес, что нужно?
- запчасти от мерседеса
- есть запчасти от запорiжца, хочу из них, как?
- сходить на завод мерседес и переплавить на его запчасти, больше никак
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32642166
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гостик NikP Alexus12чем тебя не устроил АДО?
подставь в пример из хэлпа свои переменные - и вперед
дело в том, что смотрю я на этот пример, ну уж больно он большой. Уверен на 99,9%, что его можно укоротить чуть ли не вдвое. А в связи с тем, что я только начинающий хотелось бы начинать писать кратко, но точно. а с ADO просто не работал. начал писать рекорсеты с DAO, так и пишу.

- хочу собрать мерседес, что нужно?
- запчасти от мерседеса
- есть запчасти от запорiжца, хочу из них, как?
- сходить на завод мерседес и переплавить на его запчасти, больше никак
А по конкретнее?
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32642541
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ау! Help me please
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32642637
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. ну не занимаются здесь люди сводными таблицами Ёксель-мокселя, что ты хочешь?

2. как можно сделать - тебе подсказали многожды
и даже сам ты нашел пример
но почему-то хочешь сделать все старьем-DAO вместо свежака ADO
это как вылезти сейчас в DOS Shell запускать mkdir
вместо аналога из VBA - для мдбшки пройдет, а подрастешь - упрешься в свой ДАОсизм как в ворота

3. ты пробовал заменить SELECT в макросе, записанном тобой же
(где ODBC в коннекте прописан?)
не пробовал?
думаешь, за тебя попробуют?
тогда смотри п.1
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32642688
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexus121. ну не занимаются здесь люди сводными таблицами Ёксель-мокселя, что ты хочешь?

2. как можно сделать - тебе подсказали многожды
и даже сам ты нашел пример
но почему-то хочешь сделать все старьем-DAO вместо свежака ADO
это как вылезти сейчас в DOS Shell запускать mkdir
вместо аналога из VBA - для мдбшки пройдет, а подрастешь - упрешься в свой ДАОсизм как в ворота

3. ты пробовал заменить SELECT в макросе, записанном тобой же
(где ODBC в коннекте прописан?)
не пробовал?
думаешь, за тебя попробуют?
тогда смотри п.1
Ну шо могу сказать. Спасибо на добром слове. Хотя бы за то, что надежды развеял. А то все жду чего-то жду.
...
Рейтинг: 0 / 0
Сводная табл. в Excel на основе рекордсета
    #32644328
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С ADODB пример работает и все делает нормально. Но возник вопрос. Почему если rstRecordset
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 ' Open the recordset. 
Set rstRecordset = New ADODB.Recordset
Set rstRecordset.ActiveConnection = cnnConn
rstRecordset.Open cmdCommand

 ' Create a PivotTable cache and report. 
Set objPivotCache = ActiveWorkbook.PivotCaches.Add( _
    SourceType:=xlExternal)
Set objPivotCache.Recordset = rstRecordset
With objPivotCache
    .CreatePivotTable TableDestination:=Range("A7"), _
        TableName:="СводнаяТаблица1"
End With
Заменяю на TestTable
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Set TestTable = dbAccess.OpenRecordset(Sql_String)
Set objPivotCache = ActiveWorkbook.PivotCaches.Add( _
    SourceType:=xlExternal)
Set objPivotCache.Recordset = TestTable
With objPivotCache
    .CreatePivotTable TableDestination:=Range("A7"), _
        TableName:="СводнаяТаблица1"
End With
Он ругается
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сводная табл. в Excel на основе рекордсета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]