Necesita una tabla temporal para almacenar los nombres de archivos que retorne la función, una función para obtener el siguiente archivo y una función para adjuntar el archivo. Le preparé este ejemplo.
TABLAS
Esta tabla se actualiza cada vez que se ejecute la función.
FORMULARIO
REPORTE
CÓDIGO DEL EVENTO DESPUES DE ACTUALIZAR DEL CUADRO COMBINADO
Private Sub cboNumero_AfterUpdate()
On Error GoTo hay_error
Dim strSgte As String
Dim strArchivoAdj As String
strSgte = sigtePDF(CurrentProject.Path, Me.cboNumero.Column(1), "PDF")
strArchivoAdj = CurrentProject.Path & "\" & strSgte & ".PDF"
DoCmd.OpenReport "rptInforme", acViewPreview, , "[nroreg] = " & Me.cboNumero.Column(1), acHidden
DoCmd.OutputTo acOutputReport, "rptInforme", acFormatPDF, strArchivoAdj, False
DoCmd.Close acReport, "rptInforme"
Call Adjunta("tblclientes", "archivo", "nroreg", Me.cboNumero.Column(1), strArchivoAdj)
If Err.Number = 0 Then
MsgBox "Archivo PDF creado satisfactoriamente", vbInformation, "Le informo"
End If
hay_error_exit:
Exit Sub
hay_error:
MsgBox "Ocurrió el error " & Err.Number & " - " & Err.Description, vbCritical, "Error..."
Resume hay_error_exit
End Sub
CÓDIGO DE LA FUNCION sigtePDF
Public Function sigtePDF(mpath As String, lnregistro As Long, mextension As String) As String
'Función obtener el siguiente archivo con base en el número de registro
'y la extensión
Dim MiPc, Carpeta, Archivos, archivo
Dim miext As String
Dim cant_tem As Long
CurrentDb.Execute "DELETE FROM tblTemporal"
Set MiPc = CreateObject("Scripting.FileSystemObject")
Set Carpeta = MiPc.GetFolder(mpath)
Set Archivos = Carpeta.Files
For Each archivo In Archivos
miext = MiPc.GetExtensionName(archivo.Name)
If miext = mextension And mid(archivo.Name, 1, 4) = lnregistro Then
CurrentDb.Execute "INSERT INTO tblTemporal(archivo) VALUES('" & mid(archivo.Name, 1, 7) & "')"
End If
Next
cant_tem = Nz(DMax("[archivo]", "tblTemporal"))
If cant_tem = 0 Then
sigtePDF = lnregistro & "001" & "." & mextension
Else
sigtePDF = cant_tem + 1 & "." & mextension
End If
End Function
CÓDIGO DE LA FUNCIÓN ADJUNTA
Public Function Adjunta(strTabla, strCampoAdjunto, strIDcampo As String, i As Long, strArchivo As String)
Dim cdb As DAO.Database, rstMain As DAO.Recordset, rstAttach As DAO.Recordset2, _
fldAttach As DAO.Field2
Set cdb = CurrentDb
Set rstMain = cdb.OpenRecordset("SELECT " & strCampoAdjunto & " FROM " & strTabla & " where " & strIDcampo & "= " & i, dbOpenDynaset)
rstMain.Edit
Set rstAttach = rstMain(strCampoAdjunto).Value
rstAttach.AddNew
Set fldAttach = rstAttach.Fields("FileData")
fldAttach.LoadFromFile strArchivo
rstAttach.Update
rstAttach.Close
Set rstAttach = Nothing
rstMain.Update
rstMain.MoveNext
rstMain.Close
Set rstMain = Nothing
Set cdb = Nothing
End Function
EJEMPLO DE ARCHIVOS
Utilicé funciones para poderlas llamar desde cualquier formulario.
Personalmente no utilizo archivos adjuntos, son un desastre. Preparé este ejemplo para dar respuesta a su pregunta, requiere conocimiento avanzado de VBA. Si quiere el ejemplo lo puede solicitar a [email protected] favor anotar la consulta en el asunto.