Access y carpetas desde vba

Tengo un formulario en el cual tengo un botón que mueve una carpeta de un destino a otro basándose en dos campos del formulario y respectivamente de su tabla
Me gustaría que no tuviera que darle clic a cada registro si no reemplazar ese botón actual por uno que realice una consulta en la que recoja de la tabla el valor rutaalmacenado, rutaarchivado y que lo condicione con el campo Archivar de tipo texto de dos caracteres. (Si y No) son los valores que almacena este campo Archivar.
Hasta el momento el botón que hace esta función tiene este código
Private Sub Archivarcarpeta_Click()
Dim rutacontrol As String, rutaarchivo As String
Dim fso As Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
rutacontrol = (Me.Ruta) 'Ruta origina
rutaarchivo = (Me.rutaarchivado) 'Ruta nueva
If fso.FolderExists(rutaarchivo) Then
MsgBox "El proceso que intenta archivar ya fue archivado anteriormente", vbInformation, "Carpeta Duplicada"
Else
fso.MoveFolder rutacontrol, rutaarchivo
MsgBox "Proceso archivado correctamente", vbInformation, "Carpeta Archivada"
End If
End Sub

1 respuesta

Respuesta
1

No entiendo muy bien lo que intentas hacer...

¿Quieres qué el código que ya tienes se ejecute automáticamente en funcion del valor del campo archivar, sin tener que pulsar el boton?

Si es así, puedes programar el evento Despues de actualizar del campo Archivar para que te lo haga:

Private Sub Archivar_AfterUpdate

If Me.Archivar="Si" Then

Dim rutacontrol As String, rutaarchivo As String
Dim fso As Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
rutacontrol = (Me.Ruta) 'Ruta origina
rutaarchivo = (Me.rutaarchivado) 'Ruta nueva
If fso.FolderExists(rutaarchivo) Then
MsgBox "El proceso que intenta archivar ya fue archivado anteriormente", vbInformation, "Carpeta Duplicada"
Else
fso.MoveFolder rutacontrol, rutaarchivo
MsgBox "Proceso archivado correctamente", vbInformation, "Carpeta Archivada"
End If

Else

'Si lo ponemos en No, no hace nada

End If

End Sub

A ver si es esto.

Hola gracias por responder, pero creo que no fui muy claro. Te Explico, cuando yo indico en el campo [archivar] con la opción "Si" no necesariamente necesito mover la carpeta en ese momento, lo que necesito es que después de haber finalizado de editar todos los registros el comando ejecute una consulta y que conforme a esa consulta mueva las carpetas donde el registro con el campo [Archivar] sea igual a "Si". hasta el momento lo que hago es que cada vez que termino de editar todos los registros y genero otros informes me toca volver a pasar uno por uno todos los registros y mover las carpetas una a una. Es ahí donde no sé porque necesito que con un solo clic mueva todas las carpetas.

Muchas gracias, Saludos!

Que pena el abuso, también tengo otro inconveniente con este proceso. Y es que cuando Me.Ruta y Ruta.Archivado son direcciones dentro de una red me genera un error o me crea una carpeta local en un sitio como el escritorio o mis documentos y no en la carpeta en la red no se si deba agregar un código diferente para que reconozca los \\PCCONTROLES\carpetaarchivos\ como una carpeta en la red.

Gracias de nuevo.

Vale, ahora entiendo lo que intentas hacer.

En tu botón, escribe este código (te pongo en negrita lo que añado al que ya tienes, y en cursiva lo que tendrás que cambiar para adaptar a los nombre que tu tengas):

Private Sub Archivarcarpeta_Click()

Dim rst as DAO.Recordset
Dim rutacontrol As String, rutaarchivo As String
Dim fso As Scripting.FileSystemObject

Set rst=CurrentDb.OpenRecordset("NombreTabla",dbOpenDynaset)

If rst.Recordcount=0 Then Exit Sub

rst.MoveFirst

Do Until rst.EOF

If rst("Archivar")="Si" Then
Set fso = CreateObject("Scripting.FileSystemObject")
rutacontrol = rst("Ruta") 'Ruta origina
rutaarchivo = rst("rutaarchivado") 'Ruta nueva
If fso.FolderExists(rutaarchivo) Then

'Si ya existe, no hacemos nada, y no mostramos el mensaje para no molestar al usuario

Else

'Movemos el archivo/carpeta
fso.MoveFolder rutacontrol, rutaarchivo

End If

rst.MoveNext

Loop

'Cuando acaba, lanzamos mensaje confirmando:

MsgBox "Proceso archivado correctamente", vbInformation, "Carpetas Archivadas"
End Sub

El código lo que hace, cada vez que pulsas el botón, es ir recorriendo todos los registro de la tabla (tienes que ponerle el nombre donde yo puse NombreTabla), y si Archivar="Si", ejecuta el código para saber si tiene que moverla o no.

Debería funcionar, pero lo escribo "de cabeza" sin probarlo, aunque puse cuidado de hacerlo bien.

Para lo de la ruta de red, intenta hacerlo de esta manera: en vez de \\PCCONTROLES\carpetaarchivos\, empieza la ruta por la letra de la unidad de red, por ejemplo:

Z:\PCCONTROLES\carpetaarchivos\

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas