Macro para activar y desactivar modo compartido en Excel

, necesito que me ayuden con algo si es posible. Tengo un equipo de trabajo de 30 miembros y cada uno utiliza un libro de excel modo compartido diferente, yo me encargo de alimentar sus tablas datos a diario y cree un macro que que abre cada archivo e inserta los datos, durante el proceso la macro desactiva el modo compartido para insertar lista de validaciones y luego cierra el libro con el modo compartido activado. El problema esta en que cuando guarda el modo compartido se crea prácticamente un archivo nuevo y eso hace que el trabajo que hayan tenido los demás miembros no puedan guardarlo. ¿Alguna otra solución para activar el modo compartido por macro?

Respuesta

[Hola

Supongo que cuando dices "prácticamente" te refieres a que se crea/guarda sí o sí un archivo nuevo, con lo que el dilema debe radicar en la forma en que guardas dicho archivo, pero no lo has enviado, así que solo queda sugerirte que uses algo así:

ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.FullName, _
accessMode:=xlShared

Utilizo ese mismo código, el problema es que guarda un archivo nuevo, aunque siga siendo el mismo, es un archivo nuevo. Lo que pasa es que los usuarios están trabajando sobre uno existente y le dan a guardar en su libro, dice que su libro libro actual ya no existe y pierden todo el trabajo realizado, Lo que ando buscando es que se active el modo compartido pero sin el "SaveAs". Ya que no quiero que se guarde otro archivo, solo quiero que se active la función modo compartido


                    

[Hola nuevamente

Si bien se usa Save. As, al usarse el ActiveWorkbook. FullName no se guarda en realidad un nuevo libro, sino el mismo y si previamente desactivaste las alertas del Excel (supuse que lo hacías), menos dilemas debería haber.

Si el dilema es que justamente al hacer esos cambios con macros casualmente hay varios usuarios conectados, como parece ser tu dilema, ahí sí pues que hay dilemas y eso pasas porque, por más macros que se usen, Microsoft desde el inicio ha dicho que los Libros Compartidos tienen límites imposibles de superar.

Como entiendo que trabajas en LAN, una opción es usa un archivo como Front End y otro como Back End (solo datos), mira este ejemplo, ya los detalles, que di en esta conversación:

https://foro.todoexcel.com/threads/trabajar-con-libros-id%C3%A9nticos-a-la-vez.62252/

Estuve revisando el post, y es básicamente lo que yo tengo. Lamento que no pueda mandar los archivos porque no los tengo en casa. Pero tratare de explicarlo

Tengo un archivo 30 archivos de excel
Flujo de entrada y salida.xlsm
persona1.xls

persona2.xls

.etc, etc

persona29.xls

Todas las personas siempre mantiene su libro abierto y yo siempre le estoy insertando datos desde "flujo de entrada y salida" que es donde tengo mis macros.

Todas las personas tienen su libro compartido

Mi macro debe insertar una fila y con celdas datos.

En 2 celdas de ellas tiene que tener una lista de validación (valor lista 1, valor lista 2, etc)

Como el libro compartido no me admite insertar lista de validación. Yo opto por desactivar el modo compartido, insertar la lista de validación y volver a compartir libro.

Y ellos que sigan trabajando normal.

[Hola nuevamente

Quisiera comentar que no es óptima la forma en que manejas hoy todo, pero bueno, entiendo que ya está así y que en base a eso debes buscar soluciones, pero sí recomiendo una reingeniería a futuro siguiendo las pautas que recomendé en el enlace que te envié y estas otras:

https://abrahamexcel.blogspot.com/2018/10/excel-como-base-de-datos.html

Sobre tu dilema actual se me ocurre algo un poco "invasivo", pero que creo te ayudará, claro que tendrás que explicar a los empleados que no se molesten jajaja. Como insertar datos como lo que comentas dura menos de un segundo, sugiero que tu macro no deje de compartir el libro, sino que abra el libro, elimine a cualquier otro usuario que no seas tú, inserte los datos o lo que desees, guarde el libro y listo, sales tú de ahí. El libro nunca se dejó de compartir y por ende es el mismo (usando los términos que mencionabas antes), el empleado no tuvo tiempo de entrar cuando lo sacaste generando algún conflicto y cuando entra nuevamente ya todo está con los cambios que necesitas. Para expulsar otros usuarios:

    Dim UsrList()
    UsrList = ThisWorkbook.UserStatus
    For i = UBound(UsrList, 1) To 1 Step -1
        If UsrList(i, 1) <> Application.UserName Then 
            ThisWorkbook.RemoveUser i
        End If
    Next

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas