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.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Current Donation Goals

    • Raised 0.00 EUR of 130.00 EUR target
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Hola nuevamente. Por eso la importancia de lo que mencionas tú como "ruta relativa". Tal cual comentas, y aún sin llegar a algunos detalles importantes para ayudarte, en realidad tal cual te comenté le día miércoles, pues sí podías hacer como comentabas, era cosa de obtener los Id de Windows (como tú los llamas) y la ruta de OneDrive en casa usuario y eso sí se puede obtener con VBA y luego pasarlo a PQ, pero medio que te cerraste en que "PQ no puede trabajar con rutas relativas", cosa cierta pero siempre hay formas. Si SAP puede o no guardar en OneDrive o SharePoint, pues si está mapeado en la PC ¡claro que se puede! Pero bueno, creo que si te es útil tu propia propuesta ¡avanza con eso!
    • Perdona @Abraham Valencia pero he estado liado estos días. En realidad todo el problema se reduce a estos dos problemas: Problema 1: El script que "fabrica" SAP y que luego "pego" en la macro, no es capaz de  guardar archivos en SharePoint. He estado buscando, y en realidad muchas personas tienen ese problema (no poder guardar un Excel en SAP a través de VBA). Eso muy probablemente sean problemas de permisos, que no puedo cambiar (no soy administrador de nada). Como no puedo solucionarlo así, paso al plan B, que es guardar en Excel que me genera SAP en el ordenador de cada usuario que ejecute la plantilla (y que sí está guardada en SharePoint), para después con PowerQuery llamar a ese Excel (el export). Para ello, pretendo guardar el export, en la ruta relativa "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" donde los \..\..\..\ saltan las rutas personales de cada usuario (tipo C:\users\IDusuario\). Eso lo hace bien, y el archivo se guarda en la ruta de cada usuario que lo usa, pero surge el problema 2 Problema 2: PowerQuery no trabaja con rutas relativas del tipo  "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" necesita que sea del tipo fija "C:\users\IDusuario\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" pero claro, IDusuario es diferente para cada usuario.   Pero escribiendo todo esto, creo que he dado con una posible solución, no grabar el export en una ruta de usuario, sino en una en la raiz de C:, que siempre será igual para todos los usuarios, del tipo C:\Sap\export.xlsx que seria igual en todos los ordenadores. Asi sí podría decirle a PowerQuery que vaya siempre a la ruta C:\Sap\ que existirá en todos los ordenadores. Mañana intentaré hacer pruebas, aunque mi solución ideal seria que se pudiera guardar en el SharePoint. Saludos.
    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
    • Hola nuevamente, mi duda sigue siendo la ruta, o rutas, finales que quedan, esas que llamas "relativas"; igual por si acaso pon 3 o 4 de esas, tal cual son y/o se ven en el explorador de cada PC y, de ser posible, en cualquier otro "lado" en que las veas.
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • 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.