• 👏 Bienvenido a nuestra comunidad Excel

    ¿Todavía no estás registrado? 😲

    Registrate gratis aquí y podrás:

    💪 Hacer preguntas a los expertos
    ⬇️ Descargar ejemplos y plantillas
    🏅 
    Acceder a contenidos premium

alguna forma de que las filas no cambien su tamaño en T.Dinamica

ALBER100

Member
hola a todos.
Tengo creada una tabla dinámica. He marcado las filas y he aumentado el ancho de las celdas a 21,60 pero cuando actualizo la tabla dinámica vuelve a su tamaño anterior.
¿hay algún truco para "bloquear" el tamaño de las FILAS? gracias por vuestros comentarios.

saludos
 

Héctor Miguel

Well-known member
una tabla dinámica...
¿hay algún truco para "bloquear" el tamaño de las FILAS?
op1:
selecciona (toda) la fila en el rango de la TD que necesites modificar altura y establece el alto que prefieras

como esas tablas son "dinamicas", es muy probable que el refrescar haya filas agregadas "fuera" de las ajustadas, entonces...

op2:
ten lista una macro para (RE)ajustar el alto de fila de la TD
 

ALBER100

Member
op1:
selecciona (toda) la fila en el rango de la TD que necesites modificar altura y establece el alto que prefieras

como esas tablas son "dinamicas", es muy probable que el refrescar haya filas agregadas "fuera" de las ajustadas, entonces...

op2:
ten lista una macro para (RE)ajustar el alto de fila de la TD
Hola Hector. Gracias por las opciones. De ambas, creo que sería mejor introducir una macro. He navegado por webs, y he visto algo así:
Range(«D5:D8»).RowHeight = 28
... es decir, defino el rango de la tabla dinámica (Range) y escribo el ancho (RowHeight) ¿es correcto? ¿me podrías enviar el código completo por favor? gracias
 

ALBER100

Member
op1:
selecciona (toda) la fila en el rango de la TD que necesites modificar altura y establece el alto que prefieras

como esas tablas son "dinamicas", es muy probable que el refrescar haya filas agregadas "fuera" de las ajustadas, entonces...

op2:
ten lista una macro para (RE)ajustar el alto de fila de la TD
hola Héctor. gracia por los comentarios.
Tienes algún código para que lo pueda insertar en VBA? ... de ser así, ¿me indicas por favor en qué módulo lo tendría que insertar? gracias
 

Héctor Miguel

Well-known member
algún código para que lo pueda insertar en VBA?
esto seria para una macro de ejecucion manual (a voluntad o necesidad) en un modulo de codigo estandar:
Código:
Sub altoFilaTD()
  With Worksheets("hoja1")
    .UsedRange.Rows.AutoFit
    .PivotTables("tabla dinámica1").DataBodyRange.RowHeight = 25
  End With
End Sub

adapta:
- nombre de la hoja
- nombre de la tabla dinamica (puede ser su numero de indice)
- al alto de fila requerido

o puedes agregar las instrucciones en un evento en el modulo de codigo de esa hoja ?
(entre otras aternativas)
 

ALBER100

Member
esto seria para una macro de ejecucion manual (a voluntad o necesidad) en un modulo de codigo estandar:
Código:
Sub altoFilaTD()
  With Worksheets("hoja1")
    .UsedRange.Rows.AutoFit
    .PivotTables("tabla dinámica1").DataBodyRange.RowHeight = 25
  End With
End Sub

adapta:
- nombre de la hoja
- nombre de la tabla dinamica (puede ser su numero de indice)
- al alto de fila requerido

o puedes agregar las instrucciones en un evento en el modulo de codigo de esa hoja ?
(entre otras aternativas)
muchas gracias Héctor. Lo probaré y te confirmo. saludos
 

Héctor Miguel

Well-known member
la he probado y no fija el ancho de las celdas
tu consulta resulto confusa por otro mensaje...
defino el rango de la tabla dinámica (Range) y escribo el ancho (RowHeight) ¿es correcto?
para que un "refresh" de TD no modifique "el ancho" (de columna), no requieres de macros
en las opciones de la TD (diseño y fomato) solo DESmarca la opcion para: "autoajustar anchos de columnas al actualizar"
 

ALBER100

Member
tu consulta resulto confusa por otro mensaje...

para que un "refresh" de TD no modifique "el ancho" (de columna), no requieres de macros
en las opciones de la TD (diseño y fomato) solo DESmarca la opcion para: "autoajustar anchos de columnas al actualizar"
perdona ... que yo también me confundí en el mensaje. el "refresh" que necesito es para el ancho de FILAS (no de columnas) y es por eso que con macro se debe resolver.
 

Héctor Miguel

Well-known member
también me confundí en el mensaje. el "refresh" que necesito es para el ancho de FILAS (no de columnas)
creo que la confusion persiste (?)
el "ancho" aplica a toda la columna
para una fila se trata de el "alto" (?)

para el "ancho" (de columna) no se requiere de macros, es cosa de las opciones de la TD
para el "alto" (de fila) es la propuesta de la macro (se puede buscar automatizacion dependiendo del modelo "real" ?)
 

Cacho R

Well-known member
Hola! Alberto
Me parece que te estás "haciendo lío" entre el alto de las filas o el ancho de las columnas (así es como debes llamarlas), pues te están ayudando correctamente en función de lo que pides.
En cualquer caso:
  • Actualiza la tabla dinámica;
  • Y luego ejecuta la siguiente macro:
JavaScript:
With Worksheets("td DISPONIBLE")
  .PivotTables("RiesgoDisponible").TableRange2.RowHeight = 25 'Alto de las filas
  .PivotTables("RiesgoDisponible").TableRange2.ColumnWidth = 25 'Ancho de las columnas
End With
¿Fuentes de error?...
  • Asegúrate que cuando presiones "Click" en el botón se esté ejecutando esta macro y no otra.
  • Confirma que la tabla dinámica (TD) que deseas ajustar esté en la hoja: td DISPONIBLE.
  • Confirma que la TD que deseas ajustar se llame: RiesgoDisponible.
  • La macro asigna "25" al Alto y al Ancho de las celdas de la TD: ¡Alguna de las dos tiene que ser!... :ROFLMAO: :giggle:
Saludos, Cacho R.
 

Héctor Miguel

Well-known member
también me confundí en el mensaje. el "refresh" que necesito es para el ancho de FILAS (no de columnas)
doy por entendido que para el "ancho" (de columna) ya lo resolviste por las opciones de las TD (?), sin embargo...

para el "alto" (de filas), si la TD se reduce por filtros y NO "previenes" que podrias ir "dejando regadas" filas con altos "donde no" (?)...
analiza el adjunto y modifica/adapta/... mis supuestos
 

Adjuntos

ALBER100

Member
creo que la confusion persiste (?)
el "ancho" aplica a toda la columna
para una fila se trata de el "alto" (?)

para el "ancho" (de columna) no se requiere de macros, es cosa de las opciones de la TD
para el "alto" (de fila) es la propuesta de la macro (se puede buscar automatizacion dependiendo del modelo "real" ?)
Hola Héctor. Efectivamente, sobre el "ancho" de la columna, se que no se requiere macros. En opciones de TD desmarco AUTOAJUSTAR ANCHOS DE COLUMNAS AL ACTUALIZAR y nada más.
En lo que se refiere al "ALTO" de la Fila (que es como bien dices) sí que necesita una macro.
Probaré tu archivo y te cuento.
Gracias como siempre por tus aportaciones !!
 

ALBER100

Member
Hola! Alberto
Me parece que te estás "haciendo lío" entre el alto de las filas o el ancho de las columnas (así es como debes llamarlas), pues te están ayudando correctamente en función de lo que pides.
En cualquer caso:
  • Actualiza la tabla dinámica;
  • Y luego ejecuta la siguiente macro:
JavaScript:
With Worksheets("td DISPONIBLE")
  .PivotTables("RiesgoDisponible").TableRange2.RowHeight = 25 'Alto de las filas
  .PivotTables("RiesgoDisponible").TableRange2.ColumnWidth = 25 'Ancho de las columnas
End With
¿Fuentes de error?...
  • Asegúrate que cuando presiones "Click" en el botón se esté ejecutando esta macro y no otra.
  • Confirma que la tabla dinámica (TD) que deseas ajustar esté en la hoja: td DISPONIBLE.
  • Confirma que la TD que deseas ajustar se llame: RiesgoDisponible.
  • La macro asigna "25" al Alto y al Ancho de las celdas de la TD: ¡Alguna de las dos tiene que ser!... :ROFLMAO: :giggle:
Saludos, Cacho R.
hola Cacho. Pues he copiado la macro en la hoja td DISPONIBLE y me salta una ventana con un aviso y ???? ni idea de lo que significa
adjunto print de pantalla con el código y el aviso. Gracias por tus comentarios.
 

Adjuntos

Cacho R

Well-known member
Mi estimado, escribiste: Sub td DISPONIBLE.
Pero resulta que los nombres de los procedimientos NO pueden tener espacios intermedios.
Cámbialo a: Sub tdDISPONIBLE.

Y no olvides verificar que el botón que haga ejecutar esta macro.. "apunte" a esta macro y no a otra.
Saludos, Cacho R.
 

ALBER100

Member
Mi estimado, escribiste: Sub td DISPONIBLE.
Pero resulta que los nombres de los procedimientos NO pueden tener espacios intermedios.
Cámbialo a: Sub tdDISPONIBLE.

Y no olvides verificar que el botón que haga ejecutar esta macro.. "apunte" a esta macro y no a otra.
Saludos, Cacho R.
de acuerdo Cacho. Ahora sí que funciona.
Con esto del lenguaje de macros ... cuando dices "los procedimientos" ... qué significa?
Cuando tengo que copiar y pegar el código en: Módulo de Libro (ThisWorkBook), Módulo de Hoja (WorkSheet) y Módulo Standard (ej. Módulo1) ... qué diferencia existe entre estos conceptos??

gracias por tus comentarios. Saludos y buen día
 

Cacho R

Well-known member
cuando dices "los procedimientos" ... qué significa?
Dicho de un modo general, un procedimiento es un conjunto de instrucciones escritas en lenguaje VBA.
Los más conocidos son: los Sub y los Function pero también hay otros no menos importantes: los Property, los Operador, etc.
Así que por eso lées:
Sub Macro1
...
End Sub

o
Function Cálculo
...
End Function

¿Ves que los nombres de los procedimientos no tienen espacios en blanco y que todos terminan con un End y el tipo de procedimiento?
______________________

... Módulo de Libro (ThisWorkBook), Módulo de Hoja (WorkSheet) y Módulo Standard (ej. Módulo1) ... qué diferencia existe entre estos conceptos??
Los módulos son los ámbitos en los que escribís (o ponés) los códigos VBA.
Sumados a los 3 que has consultado te agrego dos más: Módulo de un UserForm (adiviná que código se escribe aquí... Jajjjaja) y Módulo de Clase.

Como -en esencia- son iguales (ámbitos de escritura de códigos VBA) muchas veces un código que te funciona bien en un Módulo Estándar también te funciona en el Módulo del Libro o en el Módulo de una Hoja.

Pero lo más interesante es lo "inverso": hay procedimientos que sólo funcionan en el Módulo del libro, o sólo en el Módulo de la Hoja, etc.
Muchos de estos procedimientos ya los conoces pues los has utilizado. Por ejemplo:
  • Private Sub Worksheet_Change(ByVal Target As Range)
    End Sub
  • Este procedimiento detecta cambio de valor en una o varias celdas (Target) de una hoja hecho "por la mano" del usuario.
  • Te deberías estar preguntando:
    • Ok... Target es la celda (o las celdas) modificada(s). Pero: ¿Y donde está especificada la hoja en la que se dio este cambio?...
  • Y es que este procedimiento se coloca en el Módulo de la hoja que te interese evaluar por lo que "solamente" detectará cambios en las celdas de "esa" hoja: ¿Comprendes lo importante que es colocar este procedimiento en el módulo de hoja correcto?...

Otro ejemplo MUY importante:
  • En un procedimiento te encuentras con:
    • Range("A1") = "Hola"
  • Viendo "esto" tú "te agrandas" (Jejjjeje) y afirmas: - "Esto escribe la palabra 'Hola' en la celda A1".
  • Entonces yo "te freno el entusiasmo" y te pregunto: - "Celda A1 ok... ¿Pero de qué hoja?"... :oops: o_O
  • Y la respuesta es:
    • Si ese Range("A1") = "Hola" está en un módulo estándar, en un Userform o en el ThisWorkbook -por ejemplo- entonces el "Hola" se escribe en la Hoja Activa (cualquiera sea ésta).
    • Pero si esa instrucción estuviese en el módulo de una hoja, el "Hola" se escribe en esa Hoja sin importar cual sea la hoja activa.
    • ¡"Flor" de diferencia operativa!, ¿Verdad?...
______________________

En resumidas cuentas, mi estimado:
Haciendo muchísimas pruebas, buscando en la Web y preguntando -a veces- es como vas a ir acumulando experiencias y conocimientos.

¿Te sirvió?...
Saludos, Cacho R.
 
Última edición:

ALBER100

Member
Dicho de un modo general, un procedimiento es un conjunto de instrucciones escritas en lenguaje VBA.
Los más conocidos son: los Sub y los Function pero también hay otros no menos importantes: los Property, los Operador, etc.
Así que por eso lées:
Sub Macro1
...
End Sub

o
Function Cálculo
...
End Function

¿Ves que los nombres de los procedimientos no tienen espacios en blanco y que todos terminan con un End y el tipo de procedimiento?
______________________


Los módulos son los ámbitos en los que escribís (o ponés) los códigos VBA.
Sumados a los 3 que has consultado te agrego dos más: Módulo de un UserForm (adiviná que código se escribe aquí... Jajjjaja) y Módulo de Clase.

Como -en esencia- son iguales (ámbitos de escritura de códigos VBA) muchas veces un código que te funciona bien en un Módulo Estándar también te funciona en el Módulo del Libro o en el Módulo de una Hoja.

Pero lo más interesante es lo "inverso": hay procedimientos que sólo funcionan en el Módulo del libro, o sólo en el Módulo de la Hoja, etc.
Muchos de estos procedimientos ya los conoces pues los has utilizado. Por ejemplo:
  • Private Sub Worksheet_Change(ByVal Target As Range)
    End Sub
  • Este procedimiento detecta cambio de valor en una o varias celdas (Target) de una hoja hecho "por la mano" del usuario.
  • Te deberías estar preguntando:
    • Ok... Target es la celda (o las celdas) modificada(s). Pero: ¿Y donde está especificada la hoja en la que se dio este cambio?...
  • Y es que este procedimiento se coloca en el Módulo de la hoja que te interese evaluar por lo que "solamente" detectará cambios en las celdas de "esa" hoja: ¿Comprendes lo importante que es colocar este procedimiento en el módulo de hoja correcto?...

Otro ejemplo MUY importante:
  • En un procedimiento te encuentras con:
    • Range("A1") = "Hola"
  • Viendo "esto" tú "te agrandas" (Jejjjeje) y afirmas: - "Esto escribe la palabra 'Hola' en la celda A1".
  • Entonces yo "te freno el entusiasmo" y te pregunto: - "Celda A1 ok... ¿Pero de qué hoja?"... :oops: o_O
  • Y la respuesta es:
    • Si ese Range("A1") = "Hola" está en un módulo estándar, en un Userform o en el ThisWorkbook -por ejemplo- entonces el "Hola" se escribe en la Hoja Activa (cualquiera sea ésta).
    • Pero si esa instrucción estuviese en el módulo de una hoja, el "Hola" se escribe en esa Hoja sin importar cual sea la hoja activa.
    • ¡"Flor" de diferencia operativa!, ¿Verdad?...
______________________

En resumidas cuentas, mi estimado:
Haciendo muchísimas pruebas, buscando en la Web y preguntando -a veces- es como vas a ir acumulando experiencias y conocimientos.

¿Te sirvió?...
Saludos, Cacho R.
muchas gracias por las aclaraciones ... poco a poco voy tomando nota de los conceptos y para qué sirve cada uno. aunque veo que esto de las "macros y VBA" es un mundo
 
Arriba