Моя попытка состояла в создании простой сводной таблицы на лету из нескольких таблиц из AS400 IBMi. Это было достигнуто, но сводная таблица не «обновляется».Сборка обновляемого запроса от нескольких подключений AS400 IBMi
Так я начал смотреть на посты о программном создании соединений и придумал пример ниже, что является обновляемым, но только в одну таблицу:
ActiveWorkbook.Connections.AddFromFile "N:\apps\excel\connections\PRD IS.odc"
With ActiveWorkbook.Connections("PRD IS").ODBCConnection
.BackgroundQuery = True
.CommandText = Array("SELECT * FROM ""PRD"".""Y2K"".""IS""")
.CommandType = xlCmdSql
.Connection = "ODBC;DSN=s11111111;"
.RefreshOnFileOpen = False
.SavePassword = False
.SourceConnectionFile = "N:\apps\excel\connections\PRD IS.odc"
.SourceDataFile = ""
.ServerCredentialsMethod = xlCredentialsMethodIntegrated
.AlwaysUseConnectionFile = False
End With
With ActiveWorkbook.Connections("PRD IS")
.Name = "PRD IS"
End With
ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, SourceData:= _
ActiveWorkbook.Connections("PRD IS"), Version:=xlPivotTableVersion14). _
CreatePivotTable TableDestination:=ActiveCell, TableName:="PivotTable1", DefaultVersion:=xlPivotTableVersion14
Можно ли использовать два соединения, объединить их, и создать конечный результат, который обновляется?
Второе соединение будет:
ActiveWorkbook.Connections.AddFromFile "N:\apps\excel\connections\PRD PM.odc"
With ActiveWorkbook.Connections("PRD PM").ODBCConnection
.BackgroundQuery = True
.CommandText = Array("SELECT * FROM ""PRD"".""Y2K"".""PM""")
.CommandType = xlCmdSql
.Connection = "ODBC;DSN=s111111111;"
.RefreshOnFileOpen = False
.SavePassword = False
.SourceConnectionFile = "N:\apps\excel\connections\PRD PM.odc"
.SourceDataFile = ""
.ServerCredentialsMethod = xlCredentialsMethodIntegrated
.AlwaysUseConnectionFile = False
End With
With ActiveWorkbook.Connections("PRD PM")
.Name = "PRD PM"
End With
В настоящее время работает код:
Sub CreatePivotTable()
'Declare variables
Dim Conn As ADODB.Connection
Dim Cmd As ADODB.Command
Dim Param As ADODB.Parameter
Dim rs As ADODB.Recordset
Set Conn = New ADODB.Connection
Set Cmd = New ADODB.Command
Set rs = New ADODB.Recordset
'Open Connection'
Conn.ConnectionString = "DSN=s11111111;"
Conn.Open
'Set and Excecute SQL Command'
Set Cmd.ActiveConnection = Conn
Cmd.CommandText = "SELECT ISWH as WH,ISPART as Part,PMDESC as Description,ISCF01 As AC, PMPCLS As PC, PMPLIN As PL" & _
" FROM Y2K.IS LEFT JOIN Y2K.PM ON Y2K.IS.ISPART = Y2K.PM.PMPART" & _
" WHERE(ISWH) in ('XX')" & _
" AND (ISCF01) not in ('B','D')" & _
" AND (PMPLIN) in ('YY')" & _
" AND (PMPCLS) like ('Z%')"
Cmd.CommandType = adCmdText
'Open Recordset'
Set rs.Source = Cmd
rs.Open
'Create a PivotTable cache and report.
Set objPivotCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
Set objPivotCache.Recordset = rs
objPivotCache.CreatePivotTable TableDestination:=ActiveCell, TableName:="PivotTable1"
With ActiveSheet.PivotTables("PivotTable1")
.SmallGrid = False
With .PivotFields("WH")
.Orientation = xlRowField
.Position = 1
End With
With .PivotFields("Part")
.Orientation = xlRowField
.Position = 1
End With
With .PivotFields("PL")
.Orientation = xlColumnField
.Position = 1
End With
With .PivotFields("PC")
.Orientation = xlDataField
.Position = 1
End With
End With
End Sub
Ничего себе! Что это за VBA? Я этого раньше не видел. Круто! – JFS
lol ... ты хотя бы сломал мой день. –
Есть ли причина, почему вы не создали комбинацию запросов на сервере? –