¿Cómo se puede guardar un archivo excel por parte de un usuario externo que completa un formulario con macro?

Primero, lamento el título de la pregunta, ya que no sé como describir mi problema en tan poco espacio.

Lo que que ocurre es que desarrollé una macro que estoy por subir a la intranet de mi empresa, que tiene como objetivo el reportar eventos que puedan ocurrir en los diferentes procesos, que afecten la cadena de valor. Ejemplo: a una ejecutiva del área de venta se le olvidó pedir una firma en un formulario y esto afectó al área de operaciones, por ende, alguien del área de operaciones reporta este evento a través del formulario que hice.

Luego de que el formulario es completado por un usuario de cualquier área de la empresa, se activa una macro que hace dos cosas:
1.- Envía un mail a mi área de "calidad y procesos" que menciona el nuevo reporte ingresado.
2.- La macro guarda la información recolectada automáticamente en otro archivo excel que se encuentra en una carpeta "CP" (área donde trabajo) de la intranet.

El problema, es que las demás áreas sólo tienen acceso de lectura a este segundo archivo donde se guarda la información (esto lo averigüe con un compañero de otra área), debido a los permisos de carpeta que existen. Por ende, la macro al ejecutarse, efectivamente envía el mail a "CP", pero no guarda la información ingresada por el usuario, a menos que éste sea del área de "CP".

Mi pregunta... ¿es posible con algún código o algo, que el usuario que ingresa la información al formulario pueda guardar el archivo (sin que él lo sepa obviamente, porque la macro lo hace automáticamente) sólo con un permiso de lectura?

1 Respuesta

Respuesta
1

Se puede hacer con código, aunque deberías hablar con el administrador para que te diera permiso para modificar los permisos.

Mediante código, puedes poner la carpeta en modo lectura-escritura, grabar el fichero y volver a dejar la carpeta de solo lectura.

Algo cómo este código:

Sub Cambia_Permisos()
Dim a As VbFileAttribute
carpeta = "C:\Prueba\"
SetAttr carpeta, vbNormal ' Cambia los permisos de la carpeta para que se pueda grabar en ella.'
If ThisWorkbook.Saved = False Then 'Si no se han guardado los cambios, los graba'
    ThisWorkbook.Save
End If
SetAttr carpeta, vbReadOnly 'Volvemos a dejar la carpeta en Solo Lectura'
End Sub

Si te ha valido la respuesta.

Estimado Marcial,

agradezco tu respuesta, sin embargo, me queda una duda. Supongo que debo reemplazar la línea que poseo: "ActiveWorkbook.Save", por Call Cambia_Permisos(). ??

¿Estoy en lo correcto?

Saludos

Efectívamente.

Estimado Marcial,

gracias por responder. Te comento que todavía no he probado esta solución con usuarios externos a mi área, sin embargo, te comento que yo empecé las pruebas y ahora ocurre que al momento de guardar el segundo archivo, excel me pregunta "¿Desea guardar los cambios efecutados en el archivo....?"  

¿Es posible incluir en la función que me enviaste algún código que omita este paso?

Gracias de nuevo.

Saludos

Si, de esta forma

Sub Cambia_Permisos()
Dim a As VbFileAttribute
carpeta = "C:\Prueba\"
SetAttr carpeta, vbNormal ' Cambia los permisos de la carpeta para que se pueda grabar en ella.'
If ThisWorkbook.Saved = False Then 'Si no se han guardado los cambios, los graba'
Application.DisplayAlerts = False
    ThisWorkbook.Save
Application.DisplayAlerts = True
End If
SetAttr carpeta, vbReadOnly 'Volvemos a dejar la carpeta en Solo Lectura'
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas