Le preparé este ejemplo, aunque no me queda claro si está trabajando con un formulario continuo, la idea es ilustrar el proceso, solo es cuestión de adaptarlo.
FORMULARIO (Su caso puede ser un formulario continuo)
Fijo 3 botones a los cuales les asignó los nombres; Solicitud, Expediente y Tear. No confundir con los títulos de cada botón, estos nombres se requieren para hacer referencia al control en el código y así hacer el código más corto y legible.
Cuando hago cli en el botón "Solicitud" se abre el explorador de archivos para elegir el archivo, como muestra la imagen siguiente.
EXPLORADOR DE ARCHIVOS
En el ejemplo selecciono el archivo "ArribosPesca.acdb" (base de datos Access) hago doble clic y se copia en D:\Solicitud\CIF345678_Solicitud. Tomé la unidad D: pero se puede cambiar por C:. Si el proceso es correcto obtengo este mensaje:
Y en la carpeta D:\Solicitud\CIF345678_Solicitud queda así:
El ejemplo consta de una función y un procedimiento a nivel de formulario. Este es el código
FUNCIÓN PARA ELEGIR EL ARCHIVO
Function selectArchivo() As String
'Creamos un control de errores
On Error GoTo sol_err
'Declaramos las variables
Dim vFD As Object 'vFD=FileDialog
Dim vRutaIni As String
vRutaIni = Application.CurrentProject.Path
Set vFD = Application.FileDialog(msoFileDialogFilePicker)
With vFD
.Title = "Seleccione el archivo "
.ButtonName = "A seleccionado el Archivo"
.InitialView = msoFileDialogViewSmallIcons
.InitialFileName = vRutaIni
.Filters.Add "Todos los archivos", "*.*"
If .Show = -1 Then
selectArchivo = CStr(.SelectedItems.Item(1))
Else
MsgBox "Ha cancelado la selección", vbOKCancel Or vbExclamation Or vbMsgBoxSetForeground, "Access"
Exit Function
End If
End With
Salida:
Exit Function
sol_err:
MsgBox "Se ha producido un error: " & Err.Number & " - " & Err.Description
Resume Salida
End Function
PROCEDIMIENTO PARA COPIAR EL ARCHIVO ELEGIDO
Sub renombra()
On Error GoTo hay_error
Dim fs
Dim f
Dim strExtension As String
Dim strElegir As String
Dim strCIF As String
Dim ctrl As Control
Dim strCarpetaRenombra As String
strCIF = "CIF345678" ' Si los botones están en un formulario continuo puede
' toma strCIF=Me.CIF el ejemplo tomé solo como prueba
strElegir = selectArchivo()
If Len(strElegir) = 0 Then
Exit Sub
End If
Set ctrl = Screen.ActiveControl
Set fs = CreateObject("Scripting.FileSystemObject")
f = fs.GetBaseName(strElegir)
strExtension = fs.GetExtensionName(strElegir)
Select Case ctrl.Name
Case "Solicitud"
strCarpetaRenombra = "D:\Solicitud\" & strCIF & "_" & "Solicitud." & strExtension
Case "Expediente"
strCarpetaRenombra = "D:\Expedientes\" & strCIF & "_" & "Expediente." & strExtension
Case "Tear"
strCarpetaRenombra = "D:\Tear\" & strCIF & "_" & "Tear." & strExtension
End Select
FileCopy strElegir, strCarpetaRenombra
If Err.Number = 0 Then
MsgBox "Archivo procesado OK", vbInformation, "Le cuento.."
End If
hay_error_exit:
Exit Sub
hay_error:
MsgBox "Ocurrió el error " & Err.Number & vbCrLf & Err.Description, vbCritical, "Error..."
Resume hay_error_exit
End Sub
Bueno ya es cuestión de adaptarlo a sus necesidades.