Hola amigos ayudenme por favor
tengo una macro para hacer un reporte con una tabla dinámica, pero la misma naturaleza del reporte requiere que cambien los encabezados con fechas, tengo que meter fechas distintas en los enbabexados cada que hago el reporte y al insertar esos valores en datos me da error por que la macro tiene grabados los encabezados, ejem 10/5/2009 y el nuevo encabezado es 27/10/2009
como puedo hacer para que meta valores por ubicación tomando los encabezados actuales?
O que puedo hacer?
Gracias por tomarse el tiempo para leer mi petición?
Saludos desde Mexico :-) Bay.
Si los datos de los encabezados son pocos, puedes pedir al usuario que introduzca los valores al empezar la macro, por ejemplo mediante InputBox.
Si los datos están ya escritos en la hoja, haz que la macro los lea, por ejemplo recorriendo las celdas donde se encuentran estos encabezados escritos.
En cualquier caso, tendrás que modificar la macro para sustituir los valores de las fechas que están grabados, por unas variables, que en cada caso tomarán unos valores diferentes.
Si puedes adjuntar un ejemplo de la macro y de cómo están los encabezados, te podré ayudar mejor.
------
Ya sé Excel, pero necesito más
La potencia sin control no sirve de nada.
agradecimientos
------
Ya sé Excel, pero necesito más.
ahora coloco el link del archivo www.mediafire.com/file/j1iwgdzztzt/Tabla Dinamica.xls te explico nuevamente. mi problema es que el reporte lo hago cada semana pero cuando cambio la fecha inicial y corro la macro me da error por que los encabezados no coinciden.
muchas gracias por contestarme.
Respecto de los encabezados de las fechas, como suponía, están escritos en la macro, lo que obligaría a corregir el código cada vez.
Aparte de que no coinciden los nombres de la hoja ni de los campos, he retocado la macro para poder leer las fechas de las celdas donde están escritas. de la siguiente manera:
For contador = 1 To NumeroFechas
' leo la fecha
FechaActual = CStr(Worksheets(NombreHoja).Cells(2, 3).Offset(0, contador))
With ActiveSheet.PivotTables("TD1").PivotFields(FechaActual)
.Orientation = xlDataField
.Caption = "Suma de " & FechaActual
.Position = 1
.Function = xlSum
.NumberFormat = "#,##0.00"
End With
Next
el bucle contador se repite tantas veces como le definamos en NumeroFechas. en tu caso será 4
Guardo en FechaActual el valor de la celda que se encuentra en el encabezado de la hoja de los datos.
Utilizo el contedor del bucle para desplazarme a la derecha de la celda C2 Cells(2,3), mediante Offset
Como se trata de fechas, lo convierto a texto, para que no dé problemas al interpretar los meses y los días, mediante Cstr.
He empleado también una variable NombreHoja para especificar el nombre de la hoja donde están los datos
Utilizo la variable FechaActual para identificar el campo de la tabla dinámica (PivotFields), y para el encabezado, caption, que tendrá
------
Ya sé Excel, pero necesito más
La potencia sin control no sirve de nada.
agradecimientos
------
Ya sé Excel, pero necesito más.
Hola Hola.
Que crees que me da error. copio el codigo me dices si me equivoque en algo.
Sub Tabla()
NombreHoja = ActiveSheet.Name
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Hoja1!R2C1:R31C7"). CreatePivotTable TableDestination:="", TableName:="TD1"
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.PivotTables("TD1").AddFields RowFields:=Array("Companies", "Users", "Localidad", "Datos")
For contador = 1 To 4 'NumeroFechas
' leo la fecha
FechaActual = CStr(Worksheets(NombreHoja).Cells(2, 3).Offset(0, contador))
With ActiveSheet.PivotTables("TD1").PivotFields(FechaActual) 'El error me lo marca en esta linea
.Orientation = xlDataField
.Caption = "Suma de " & FechaActual
.Position = 1
.Function = xlSum
.NumberFormat = "#,##0.00"
End With
Next
ActiveSheet.PivotTables("TD1").PivotFields("Companies").Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False)
ActiveSheet.PivotTables("TD1").PivotFields("Users").Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False)
With ActiveSheet.PivotTables("TD1").DataPivotField
.Orientation = xlColumnField
.Position = 1
End With
End Sub
Estoy desesperada.
:-(
Te lo comentaba antes, no coinciden los nombres de los campos. En la macro te refieres a companies, users, pero en tu hoja tienes companias, usuarios. También en la macro haces referencia a un campo datos que no existe.
prueba a cambiar los nombres de los campos. Los puedes leer de la hoja, como hicimos con las fechas, por si acaso cambian en el futuro.
Elimina el campo datos en ActiveSheet.PivotTables("TD1").AddFields RowFields:=Array("Companies", "Users", "Localidad", "Datos")
a ver qué tal
------
Ya sé Excel, pero necesito más
La potencia sin control no sirve de nada.
agradecimientos
------
Ya sé Excel, pero necesito más.
Hola hola.
disculpas por tardarme tanto pero soy una mujer muy ocupada.
te anexo nuevamente el link con la tabla ahora si sirve sorry. www.mediafire.com/file/rgkyj0mmimo/Tabla Dinamica.xls
elimine el campo Datos con el ejemplo que me diste pero igual no funciono me dices en que me equivoque. Muchas Gracias.
Bay. :-)
El nombre del campo, Excel lo interpreta como un texto, así que no es lo mismo 10/10/09 que 10/10/2009. Esto se solventa leyendo de las celdas, para que coincidan.
Te adjunto tu ejemplo modificado, que funciona, al menos en mi equipo. Pruébalo a ver qué tal.
Una pregunta. ¿siempre va a haber los mismos datos, o puede haber más? lo digo porque la macro genera la tabla dinámica con los datos hasta la fila 31. tal vez sería bueno tomar todos los datos que haya. Si tu modelo se basa en una macro, has de prever más posibilidades que puedan darse en el futuro.
------
Ya sé Excel, pero necesito más
La potencia sin control no sirve de nada.
agradecimientos
------
Ya sé Excel, pero necesito más.
Hola nuevamente.
si mi reporte necesita mas datos, pero hay si le cambio donde dice source data y listo.
Me sigue saliendo un error. 1004
For contador = 1 To 4 'NumeroFechas
' leo la fecha
FechaActual = CStr(Worksheets(NombreHoja).Cells(2, 3).Offset(0, contador))
With ActiveSheet.PivotTables("TD1").PivotFields(FechaActual) '< Esta linea es la que se sombrea pongo el mause arriba y dice FechaActual=0
.Orientation = xlDataField
.Caption = "Suma de " & FechaActual
.Position = 1
.Function = xlSum
.NumberFormat = "#,##0.00"
End With
Next
muchas gracias. BAy ;-)
La idea es que no haya que entrar en el código para retocarlo cada vez que lo necesites.
Respecto del error, comprueba la fila de arriba, donde se establece el valor de FechaActual. Comprueba si está leyende de la celda correcta. en concreto fíjate en Cells(2, 3), por si acaso no está en esa celda.
igual queda más claro si empleas Range("C2") o la celda que sea.
------
Ya sé Excel, pero necesito más
La potencia sin control no sirve de nada.
agradecimientos
------
Ya sé Excel, pero necesito más.