Datos externos Access

Recientemente elabore un macro que consulta en una base de datos access una información y la vacía en una tabla dinámica. Elaborando la tabla dinámica yo puedo elegir el periodo de tiempo del cual quiero obtener los datos. Eso funciona muy bien, pero ahora quiero modificar el macro de manera tal que colocando la fecha de inicio y final en dos celdas de excel, el código del macro tome estos dos datos.
Te envío parte del código, podrás ver las fechas que refieren al periodo que yo asigne en la macro. Estos valores yo quisiera sustituirlos desde dos celdas de excel o un cuadro de dialogo. Yo intente haciendo lo siguiente:
Dim name As String
Dim nome As String
Range("C1").Select
name = ActiveCell.Value
Range("C2").Select
nome = ActiveCell.Value
Y colocando el registro name y nome en el lugar de la fecha, pero no resulto!
Parte del Codigo de la macro, podras ver las fechas en un lado de (ts):
With ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
.Connection = Array(Array( _
"ODBC;DBQ=\\VPCU_REPORTES\RSVIEW\CRU_REPORTE_02.mdb;DefaultDir=\\VPCU_REPORTES\RSVIEW\;Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;MaxBufferSize=2048;" _
), Array( _
"MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UserCommitSync=Yes;") _
)
.CommandType = xlCmdSql
.CommandText = Array( _
"SELECT FloatTable.DateAndTime, FloatTable.TagIndex, FloatTable.Val, TagTable.TagName, TagTable.TagIndex" & Chr(13) & "" & Chr(10) & "FROM `Z:\CRU_REPORTE_02`.FloatTable FloatTable, `Z:\CRU_REPORTE_02`.TagTable TagTable" & Chr(13) & "" & Chr(10) & "WHERE Fl" _
, _
"oatTable.TagIndex = TagTable.TagIndex AND ((FloatTable.DateAndTime>={ts '2003-06-01 00:01:01'} And FloatTable.DateAndTime<={ts '2003-06-01 23:59:47'}))" & Chr(13) & "" & Chr(10) & "ORDER BY FloatTable.DateAndTime" _
)
.CreatePivotTable TableDestination:= _
"'[REPORTE PRODUCCION CRD.xls]Hoja1'!R10C1", TableName:="TABLA PRODUCCION", _
DefaultVersion:=xlPivotTableVersion10
Gracias

2 Respuestas

Respuesta
1
Como habrás notado, modificar algo de las propiedades de tu conexión o de tu tabla dinámica no es muy practico, te recomiendo usar ADO para la conexión y después solo relacionar un recordset obtenido con la tabla dinámica...
Si solo quieres formatear la linea donde le pasas la fecha y hora, usa el siguiente código...
Dim strFecha1 As String
Dim strFecha2 As String
strFecha1 = Format(Range("C1"). Value, "yyyy-mm-dd HH:mm:ss")
strFecha2 = Format(Range("C1"). Value, "yyyy-mm-dd HH:mm:ss")
Observa como no tengo que seleccionar la celda donde esta la fecha, por supuesto debes de tener una fecha y hora válido
En la siguiente linea, que por supuesto tienes que completar con tu demás código, solo concateno los valores perviamente formateados de las fecha y horas
((FloatTable.DateAndTime>={'" & strFecha1 & "'} And FloatTable.DateAndTime<={'" & strfecha & "'}))
El campo DateAndTime en tu base de datos, por supuesto, debe existir, aunque cuando se manejan fechas, en consultas SQL casi siempre hay que encerrarlas entre los símbolos ##, puedes probar con...
((FloatTable.DateAndTime>={#" & strFecha1 & "#} And FloatTable.DateAndTime<={#" & strfecha & "#}))
recuerda que en SQL, tambien puedes usar el operador BETWEEN como en la siguiente linea
SELECT * FROM cuentas WHERE fecha BETWEEN #7/1/97# AND #7/31/97#
Mauricio
Respuesta
Por lo que alcanzo a entender de tu sofisticada macro, ella se encarga de armar la Tabla dinámica.
Opino que tendrías que tener otra macro (en el entorno de VBA para Excel) que seleccione el campo correspondiente de la tabla que armó tu otra macro.
Tal código sería algo similar a esto:
Dim Selecc As String
Selecc = Range("C1").Value
ActiveSheet.PivotTables("Tu").PivotFields("Dia").CurrentPage = Selecc
Sin embargo, hasta la versión que conozco (de Office 97) no es posible elegir un rango de fechas dentro de la tabla dinámica.
Solía resolverlo con un campo más que hacía ese control vía una fórmula de hoja y colocaba un 1 si el registro estaba dentro del período y un cero si no.
Luego este campo auxiliar era el que determinaba en la tabla dinámica si el registro correspondía incluirse o no (Usualmente ubicado en el campo "Página" al armar la tabla dinámica)
Podrías intentar con esto. Lamentablemente, no puedo reproducir lo que hace tu macro pero estimo que entenderás la idea.
Que tengas un muy buen fin de semana
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas