Viva!
A instrução é feita por completo no Access.
Passo a descrever em detalhe:
1.º O utilizador gera os anexos e guarda-os dentro de uma pasta, obedecendo a um critério de identificação do ficheiro (Código do destinatário-nome do ficheiro);
2.º De seguida o utilizador, através do VBA abaixo, aciona o processo de envio de anexos, fazendo correr neste passo uma série de procedimentos simultâneos (verificação de existência de anexos na pasta, captação de caminhos dos ficheiros, transferência de dados para tabelas temporárias,…) e a abertura de um formulário com um subformulário. Neste estão contidos os dados de cada destinatário (código, designação, endereço eletrónico,…), sendo aqui que pretendo dispor dos nomes dos anexos para os incluir no assunto das mensagens que são geradas no passo seguinte.
- Código:
If Caixa_de_combinação177 = "Enviar Anexos" Then
On Error GoTo PastaInexistente:
Application.DoCmd.SetWarnings False
Dim TheFile As String
Dim Results As String
Dim fso As New FileSystemObject
Dim result() As String
Dim Pasta As Folder
Dim Arquivo As File
Dim Indice As Long
ReDim result(0) As String
'Verifica se existe ficheiro de importação na pasta de origem
TheFile = "C: \Envio_Anexos\" & Me.Utilizador & "\*.pdf"""
Results = Dir$(TheFile)
'Se não existe
If Results = "" Then
MsgBox "Não existem enexos pendentes de envio deste Utilizador!", vbCritical, "Assistente de Atualização!"
Cancel = True
'Se existe
Else
Dim fso1
Dim strOrigem As String, strDestino As String
strOrigem = "C:\ Envio_Anexos\" & Me.Utilizador ' caminho de origem da pasta"
strDestino = "C:\ Envio_Anexos\EATemp\" & Me.Utilizador & "EATemp" ' caminho de destino"
Set fso1 = CreateObject("Scripting.FileSystemObject")
fso1.CopyFolder strOrigem, strDestino
'MsgBox "Pasta e ficheiros copiados com sucesso !"
If fso.FolderExists("C:\Envio_Anexos\EATemp\" & Me.Utilizador & "EATemp") Then
Set Pasta = fso.GetFolder("C:\Envio_Anexos\EATemp\" & Me.Utilizador & "EATemp")
For Each Arquivo In Pasta.Files
Indice = IIf(result(0) = "", 0, Indice + 1)
ReDim Preserve result(Indice) As String
result(Indice) = Arquivo.Name
Me.Texto291 = result(Indice)
Me.Texto299 = Me.Utilizador
Me.Texto302 = strOrigem & "\" & result(Indice)
'Inserir nome do ficheiro e utilizador na tabela
CurrentDb.Execute "INSERT INTO NE(ID_Destinatario,Utilizador,Caminho) VALUES('" & Me.Texto291 & "','" & Me.Texto299 & "','" & Me.Texto302 & "');"
'Limpar os campos
Me.Texto291.Undo
Me.Texto302.Undo
Next
Set fso = Nothing
Set Pasta = Nothing
Set Arquivo = Nothing
'Transferência de nomes ficheiros para tabela de envio
DoCmd.OpenQuery "EA_EliminarFicheirosThumbs"
DoCmd.OpenQuery "EA_EnviarAnexos_Adicionar"
DoCmd.OpenForm "EA_EnviarAnexos"
End If
End If
PastaInexistente:
If Err.Number = 73 Then
MsgBox "Não existe pasta de utilizador definida! Contate o administrador do programa.", vbCritical, "Erro!"
Resume Next
End If
End If
End Sub
3.º O utilizador confirma a pretensão de envio, acionando outro botão, que faz surgir as várias mensagens, uma para cada destinatário com os respetivos anexos correspondentes, endereço eletrónico, ASSUNTO, entre outros.
Julgo que a chave para a resolução deste tópico passa por criar uma instrução Loop, para que os nomes passem a constar, de forma corrida dentro do mesmo campo (ex: file1.pdf – file2.pdf – file3.pdf) e correspondente a cada destinatário.
A construção seria mais ou menos esta:
1. Existência de uma tabela (tblNomeFicheiros) com os nomes dos ficheiros, com os campos: ID_Destinatario, NomeFicheiros;
2. Existência de uma tabela temporária (tblNomeFicheiros_Temp) já com os códigos dos destinatários, com os campos: ID_Destinatario, NomeFicheiros;
3. Através do Loop reconhecer na tblNomeFicheiros os códigos do destinatários e copiar os nomes dos ficheiros para a tblNomesFicheiros_Temp, campo NomeFicheiros, em correspondência com os códigos de destinatários também já lá existentes. NOTA: os nomes dos ficheiros pertencentes a cada destinatário apenas deverão apresentar-se no campo único NomeFicheiros.
Precisava de alguma orientação/sugestão na construção deste VBA, é possível ?
Abraço,
Pepe