Re Tabla Dinamica - ADO

03/01/2005 - 21:35 por jhidalgo18 | Informe spam
Colisteros feliz año nuevo.
Hector primero crie la tabla dinamica (excel le da el
nombre de Tabla Dinamica3, lo verifique con el grabador de
macros y este es el nombre).
Ahora bien con el recorset capturado me quedaria solo
asignarlo al Pivot Cache de la tabla pero es aqui donde me
da el error.
Dime donde estoy errando: independientemente que el nombre
de la tabla dinamica sea (1) (2) o (3) es a esa que se
cria que le quiero asignar el recorset sin criar mas hojas
y mas tablas dinamimas es solo "cambiar" su banco de datos
(recorset).
Aunque hay varias hojas con tablas dinamicas con el mismo
nombre (Tabla Dinamica3) me parece que con la instruccion
[ActiveSheet] evito mal entendidos, o por lo menos eso
creo.

Me da el error : El objeto no acepta la propiedad o el
metodo.

Asunto: Re: Re TablaDinamica - ADO
De: "Héctor Miguel" <NOhemiordiSPAM@PLShotmail.com>
Enviado: 12/29/2004 10:29:35 PM

hola, jhidalgo !


... en el ejemplo de John Green ... se crea una nueva


hoja con una nueva tabla dinamica

... yo quiero ... solamente actualizar la que ja existe.
He intentedo con algunos metodos del Objeto Tabela


Dinamicas pero todos me dan error [...]

'Create the PivotTable cache
Set PC = ActiveWorkbook.PivotCaches.Add


(SourceType:=xlExternal)

Set PC.Recordset = rs
'Hasta aqui perfecto creando el cache
'Create the PivotTable
Set PT = ActiveSheet.PivotTables("Tabela dinâmica3")
'Designo la variable PT como la tabla dinamica que ya


existe

PT.PivotCache = PC '' Aqui es donde no logro asignar el


recorset a la tabla dinamica [...]

si ya has logrado 'meter' el recordset/ado al pivotcache...
[probablemente] queda alguna 'discrepancia' entre el
nombre de la td [codigo vs 'real'] ???
[segun el ejemplo que utilizas] el codigo esta 'asumiendo'
que:
-> en la hoja ->activa<- [ActiveSheet]
-> existe una tabla dinamica que 'se llama' [exactamente] -

"Tabela dinâmica3"<-


[me parece que es en respuesta a una consulta donde
excel esta en portugues]
[y existen -o alguna vez existieron- dos
tablas 'anteriores']

-> revisa el nombre 'real' de la td y... ¿comentas?
saludos,
hector.
 

Leer las respuestas

#1 Héctor Miguel
06/01/2005 - 09:45 | Informe spam
hola, jhidalgo !

... con el recorset capturado me quedaria solo asignarlo al Pivot Cache de la tabla [...]
... sin criar mas hojas y mas tablas dinamimas es solo "cambiar" su banco de datos (recorset).
... da el error : El objeto no acepta la propiedad o el metodo.



'regresando' al ejemplo de John Green [crear una TD desde un RecordSet SIN 'bajar' los datos a excel]
solo 'apuntar' a que se trata de dos acciones 'distintas'...
la primera es 'crear' la tabla [en caso de que no exista]
la segunda es ->modificar y 'refrescar'<- el RecordSet/PivotCache
=>SIN siquiera 'hacer el intento' de crear mas PivotCaches NI PivotTables<= OJO
estuve 'jugando' con la BD 'Neptuno' intercambiando el RecorSet entre las tablas 'Clientes' y ' Proveedores'
[obviamente] despues de 'crear' la tabla con la primera macro, la segunda... ha trabajado 'sin chistar'

si cualquier duda o los datos de origen entre los cambios que haces, fueran diferentes... ¿comentas?
saludos,
hector.
en un modulo de codigo 'normal' + referencias a ActiveX Data Objects + Excel 2000 o 'superior' ==Sub CrearTablaADO_RS()
Dim Con As New ADODB.Connection, RS As New ADODB.Recordset, _
Sql As String, PC As PivotCache, PT As PivotTable
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Neptuno.mdb;"
Sql = "Select * From Clientes"
Set RS = New ADODB.Recordset
Set RS.ActiveConnection = Con
RS.Open Sql
Set PC = ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
Set PC.Recordset = RS
Set PT = ActiveSheet.PivotTables.Add(PivotCache:=PC, TableDestination:=Range("a3"))
With PT
.NullString = "0": .SmallGrid = False
.AddFields RowFields:="Ciudad", ColumnFields:="País"
.PivotFields("Región").Orientation = xlDataField
End With
End Sub
Sub ModificarADO_RS_de_Tabla()
Dim Con As New ADODB.Connection, RS As New ADODB.Recordset, _
Sql As String, PC As PivotCache, PT As PivotTable
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Neptuno.mdb;"
' Sql = "Select * From Clientes"
Sql = "Select * From Proveedores"
Set RS = New ADODB.Recordset
Set RS.ActiveConnection = Con
RS.Open Sql
Set PC = ActiveWorkbook.PivotCaches(1)
Set PC.Recordset = RS
Set PT = ActiveSheet.PivotTables(1)
PT.PivotCache.Refresh
End Sub

Preguntas similares