Saltar al contenido

Problemas con VBA de Office 2013 en Office 365


Recommended Posts

publicado

Hola.

Tengo un problema con las macros que tenía creadas en Office 2013 al ejecutarlas en Office 365.

El office 365, a parte de ir lentísimo en comparación con el Office 2013.

Resultan que dan error, pero no siempre en el mismo punto, unas veces nada más empezar, otras veces casi al terminar, otras veces es capaz de terminarlas.

Casi siempre son errores al crear tablas dinámicas.

He mejorado un poco al incluir en la macro al principio el siguiente codigo:

screenUpdateStatus = Application.ScreenUpdating
    statusBarStatus = Application.DisplayStatusBar
    calcStatus = Application.Calculation
    eventsStatus = Application.EnableEvents
    displayPageBreakStatus = ActiveSheet.DisplayPageBreaks
    Application.ScreenUpdating = False
    Application.DisplayStatusBar = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    ActiveSheet.DisplayPageBreaks = False
    Application.DisplayAlerts = True

 

Tambien ha mejorado un poco mas al incluir este modulo:

Public Declare Function EmptyClipboard Lib "user32" () As Long
Public Declare Function CloseClipboard Lib "user32" () As Long
Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long



Public Sub vaciar_portapapeles()

OpenClipboard 0
EmptyClipboard
CloseClipboard

End Sub

 Pero no acaba de ir bien.

A alguien más le pasa este problema en Office 365 con macros que funcionaban a la perfección en Office 2013 ???

Muchas gracias a todos

publicado

Hola

Hablas en plural, mencionas que los errores se dan en diversos puntos, etc., pero no muestras ni un solo ejemplo de lo que en concreto ocurre. Quizás es solo cuestión de objetos ActiveX que no están en tu nuevo Office o en la PC, o algo por el estilo, o quién sabe si es cuestión de nombres de objetos o sus propiedades. Sin ver es imposible saber.

Por cierto, todo eso que pones, no siempre es necesario y solo es generar líneas que en muchas ocasiones en realidad solo hacen "bulto", a pesar de algunas webs que recomiendan "siempre" usarlas. Innecesario.

publicado
Hace 3 horas, avalencia dijo:

Hola

Hablas en plural, mencionas que los errores se dan en diversos puntos, etc., pero no muestras ni un solo ejemplo de lo que en concreto ocurre. Quizás es solo cuestión de objetos ActiveX que no están en tu nuevo Office o en la PC, o algo por el estilo, o quién sabe si es cuestión de nombres de objetos o sus propiedades. Sin ver es imposible saber.

Por cierto, todo eso que pones, no siempre es necesario y solo es generar líneas que en muchas ocasiones en realidad solo hacen "bulto", a pesar de algunas webs que recomiendan "siempre" usarlas. Innecesario.

Muchas gracias por tu respuesta Abraham:

La cuestión es que el departamento informático esta empezando a actualizar los equipos de la empresa a Office 365 y los usuarios están empezando a sufrir problemas.

Antes de nada comentar que una macro que llevo unos 6 años sin tocar funcionando perfectamente en Office 2010 y 2013, no funciona en 365 y después de probar ayer, tampoco en Office 2016 ni  2019.

Respecto a cuando hablo en plural, me explico, la macro crea en total, en base a una hoja de unas 1800 lineas, 8 tablas dinámicas en sus correspondientes hojas, unas veces da error al crear la primera, otras vez en en la tercera, etc....

El error lo da siempre en el momento de la creación de la tabla dinámica.

El código para la tabla es (muestro solo el de una tabla dinámica, pero el resto son iguales y sólo cambia la hoja de destino y el nombre de tabla dinámica):

        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "EXAL16DD!R1C1:R1847C47", Version:=xlPivotTableVersion10).CreatePivotTable _
        TableDestination:="DETALLADO!R3C1", TableName:="Tabladinámica1", _
        DefaultVersion:=xlPivotTableVersion10

Este código funciona perfectamente en Office 2010 y 2013, también he probado con la grabadora de macros a generar el código para la tabla desde Office 365 y luego al ejecutar la macro con el código generado con el propio Office 365 da error de la misma manera.

Este es el código generado por Office 365:

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"EXAL16DD!R1C1:R1847C47", Version:=6).CreatePivotTable TableDestination:= _
"DETALLADO!R3C1", TableName:="TablaDinámica1", DefaultVersion:=6

Y aún así, con el código generado con el propio Office 365, cuando le da la gana da error también:

Voy a mostrar un error con el código original (el primer código que muestro más arriba), el que lleva funcionando unos 6 años, aunque con el segundo código que muestro más arriba, hace lo mismo......

1914798681_Sinttulo-1.jpg.147e78c61cf61061dc09dff6ce125e5a.jpg

2047068291_Sinttulo-2.thumb.jpg.30c555b1a1583944cc0aff8877f4ab2e.jpg

 

A continuación muestro a versión de Office, la versión de Vba y las referencias activas.:

Office:

1422040056_Sinttulo-4.jpg.d68c7914445eeb7965f33a7bb670b30f.jpg

La versión de VBA:

943944523_Sinttulo-5.jpg.0a04b29c6eafe28c110be3926e5210a9.jpg

 

Las referencias activadas:

1396728515_Sinttulo-6.jpg.ae518bc7b46ed0e3717e6c6d4d15095b.jpg

 

Abraham, respecto a ....

  Cita

"todo eso que pones, no siempre es necesario y solo es generar líneas que en muchas ocasiones en realidad solo hacen "bulto", a pesar de algunas webs que recomiendan "siempre" usarlas. Innecesario."

He probado de todo, y he puesto eso "a la desesperada" pensando que liberando algo de "trabajo" al excel iría mejor, pues como comento en mi primer mensaje, aparte de estos errores, la ejecución de la macro en cuestión, en Excel 2013 lleva unos 15-20 segundos, en Office 365, Office 2016 y Office 2019 conlleva, hasta que salta un error alrededor de unos 2-3 minutos.....

Estoy desesperado ya....

Cuanto con vuestra ayuda.

Muchísimas gracias.

publicado
Hace 11 horas, MATRACOLA dijo:

Cuanto con vuestra ayuda.

Siento no darte otra respuesta, pero... cambia de Office. Es lo peor que ha creado Microsoft con mucho :angry:. Estas cosas pasan y nunca sabrás porqué.

Yo ahora estoy depurando una macro, y ni siquiera copia datos de una hoja a otra. ¿Por qué? Porque es Office 365. No le busques más respuestas

publicado

Hola nuevamente

No uso, ni usaré, Office 365, hay muchos errores que he visto han sido detectados por diversos usuario. Si bien es cierto que con las actualizaciones se van subsanando (alguno incluso pasan desapercibidos por los usuarios "comunes"). En todo caso, como para empezar anda a Archivo - Cuenta - Opciones de actualización y ahí elige "Actualizar ahora". Una vez actualizado tu Excel, vuelve a intentar todo y comentas. Ah, por cierto, no descarto que hay problema con los nombres de los objetos, o sea, que los estés repitiendo, pero eso solo lo podría confirmar viendo tu archivo. 

publicado

Hola.

Resuelto.

1. Despues de muchas pruebas, "Application.ScreenUpdating = False" al principio del modulo evita algunos errores.

2. Al principio del módulo, " Application.CutCopyMode = False", también ayuda  evitar otros errores del tipo "la imagen es demasiado grande y será cortada"

3. Y por último, el error al crear varias tablas dinámicas en sus correspondientes hojas:

El código que genera la grabadora de macros, da error al generar varias tablas dinámicas seguidas, porqué?, ni idea.....

Pero lo que he hecho ha sido sustituir este código:

Sheets.Add.Name = "DETALLADO"

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"EXAL16DD!R1C1:R1847C47", Version:=6).CreatePivotTable TableDestination:= _
"DETALLADO!R3C1", TableName:="TablaDinámica1", DefaultVersion:=6

Por este otro:

Sub prueba1()

    Dim td As PivotTable
    Set td = CrearTablaDinamica(ActiveWorkbook.Sheets("EXAL16DD").Range("A1:AT1847"))
	ActiveSheet.Name = "DETALLADO"

	' aqui se añaden los campos a la tabla dinamica, según cual sea.

End Sub

Function CrearTablaDinamica(ByRef srcData As Range) As PivotTable

	Dim tdPivot As PivotTable
    Dim tdSheet As Worksheet
    Dim tdCache As PivotCache
    
    Set tdCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
                                                  SourceData:=srcData)

    Set tdSheet = ActiveWorkbook.Sheets.Add

    Set tdPivot = tdCache.CreatePivotTable(TableDestination:=tdSheet.Range("A3"))
    Set CrearTablaDinamica = tdPivot

End Function

En el primer código, primero se crea la hoja y luego la tabla dinámica se hace de "un tirón", y cuando va por la 3ª, 4ª ó 7ª hoja con su respectiva tabla dinámica, pues nada, da error.

En el segundo código (parte extraído de Googlear....),  se llama a una función CrearTablaDinamica, y ésta primero crea el PivotCahe de la tabla dinámica, luego crea la hoja y por último crea la tabla dinámica. Por último renombro la hoja y  y de esta manera vuelvo a llamar a la funcíon 8 veces mas (8 hojas con sus respectivas tablas dinámicas) y no me genera ningún error en Office 365.

El porqué no falla no lo sé..., pero con esto he resuelto "MI" problema con esta macro y otras macros que crean tablas dinámicas en Office 365, 2016 y 2019. Macros que funcionaban a la perfección en Office 2013.

No se si a alguien más le puede ayudar esto pero a mi me ha resuelto el problema.

Saludos y gracias.

 

 

publicado

Hola, pues era esto que coloqué: "no descarto que hay problema con los nombres de los objetos, o sea, que los estés repitiendo, pero eso solo lo podría confirmar viendo tu archivo"

Claro, de haber visto tu archivo lo hubiésemos resuelto antes. Saludos.

publicado
Hace 9 horas, avalencia dijo:

Hola, pues era esto que coloqué: "no descarto que hay problema con los nombres de los objetos, o sea, que los estés repitiendo, pero eso solo lo podría confirmar viendo tu archivo"

Claro, de haber visto tu archivo lo hubiésemos resuelto antes. Saludos.

Hola Abraham.

Perdona, pero el motivo de no haber pasado el archivo es porque contiene datos confidenciales de la empresa.

La razón de tener que buscar soluciones en vez de cambiar de versión Office es porque el departamento de informática ha empezado a comprar licencias y actualizar unos equipos a Office 365 y otros a Office 2016, sin apenas consultar con nadie de los que trabajan con esos equipos.

Muchas gracias por el consejo de comprobar los nombres repetidos, y si!!, efectivamente tenía un objeto repetido, aparecía  2 veces, al principio de la macro , en las 2 primeras hojas/tablasdinamicas, y es justamente donde menos daba error, he cambiado esa parte y sin nombres de objetos repetidos en todo el módulo, seguía dando los mismos errores aleatorios.

Pienso mas bien en un bug del programa, pero como digo, pienso no confirmo......
 
Si por ejemplo (hablando de crear desde una misma macro, varias tablas dinámicas en sus respectivas hojas) se crea primero una hoja, luego el PivotCache y luego el PivotTable, da error en Office 365 y Office 2016, unas veces da error de que se está creando una tabla dinámica encima de otra y otras veces error en tiempo de ejecución, unas veces en la 3ª hoja/tabladinamica otras veces en la 4ª, 5ª, etc.....
 
También había probado en hacer un "Refresh" del PivotCache entre PivotTable y PivotTable, y nada.
 
Cuando he probado a crear primero el PivotCache, luego crear hoja, luego crear PivotTable ha dejado de dar error.
Por qué ?, pues no lo sé...., pero a mi me vale pues así he dejado de tener el problema.
 
Además, no solo daba errores en las tablas dinámicas, esto que digo, siempre hablando de mis macros que han funcionado durante algún que otro año en 2010 y 2013, en Office 365 y Office 2016 también se daban estos estos errores :
 
1. Un vaciado del portapapeles entre una hoja y otra le viene al pelo para otros errores que daba en puntos de la macro aleatorios, casi siempre de "error en tiempo de ejecución". Cosa que en Office 2010 y 2013 no pasaba.
 
2. Un "ScreenUpdating = False" al principio de cada modulo (insisto, hablando de mis macros que funcionaban bien en Office 2013), evita el error catastrófico "Ha ocurrido una excepción" y Excel se cierra.
 
Nota: Hechas las pruebas en varios equipos diferentes y en varias versiones de Office. Las que ha instalado el departamento de informática:
 
Office 365 32 bits.
Office 365 64 bits.
Office 2016 32 bits.
Office 2016 64 bits.
publicado

Se entiende estimado, igual para la próxima borra datos, deja unos pocos y reemplaza lo privado. Sobre los errores, ya encontraste el principal dilema, ahora es cuestión de ver bucle por bucle o uno por uno que no se repita ningún nombre y/o que se haga referencia a uno que no existe. Sobre crear primero el cache y luego la TD propiamente dicha, los cambios en las propiedades de algunos objetos (como las TD) hacen que macros muy "antiguas" (digamos, creadas en Excl 2003 o anteriores) a veces tengan ese tipo de errores.

Para continuar con nuestras críticas a Office 365 (jejeje) y a tu equipo de informática, la verdad no entiendo eso de instalar a unos 2016 y a otros 365. Sobre usar 32 bits en unos y 64 bits en otros, entiendo que algunos tienen una carga de datos mayor que otros pero ojo que en los Excel de 64 bits hay objetos que no son compatibles (como los dtpicker) y problemas con las funciones de la API de Windows.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.