Página 1 de 1

Iniciante | VBA Enviar e-mail e escolher como anexo a enviar o último ficheiro colocado na pasta

Enviado: 26 Mai 2022 às 07:39
por atcgfc
Bom dia,

Criei uma macro para enviar um e-mail, mas queria definir como anexo a enviar o último ficheiro colocado na pasta.

Podem ajudar-me ?

Sub enviar_email()

Set objeto_outlook = CreateObject("Outlook.Application")
Set Email = objeto_outlook.createitem(0)
Email.display
Email.to = ""
Email.cc = ""
Email.bcc = ""

Email.Subject = "Erros de Cálculo" & Format(Now, "ddmmyyyy")

Email.htmlbody = "Bom dia," & "<br><br>Segue em anexo o ficheiro relativo aos erros do processo desta madrugada. <br><br>" _
& "Com os melhores cumprimentos,<br><br> "

Email.Attachments.Add ("D:\Ambiente de Trabalho\Erros\Erros24052022.xlsx")


Email.send

End Sub


Cumprimentos,

Álvaro Gonçalves

Re: Iniciante | VBA Enviar e-mail e escolher como anexo a enviar o último ficheiro colocado na pasta

Enviado: 26 Mai 2022 às 10:15
por atcgfc
@osvaldomp consegues ajudar-me ?

Re: Iniciante | VBA Enviar e-mail e escolher como anexo a enviar o último ficheiro colocado na pasta

Enviado: 26 Mai 2022 às 10:51
por osvaldomp
Para descobrir qual arquivo foi salvo por último será preciso fazer um Loop pelos arquivos salvos na pasta de interesse.
O Loop pode ser direcionado para certo tipo de arquivo com base na sua extensão.

Veja se o Sábio Google pode lhe ajudar, pesquise por ~~~> vba DateLastModified

Re: Iniciante | VBA Enviar e-mail e escolher como anexo a enviar o último ficheiro colocado na pasta

Enviado: 03 Jun 2022 às 07:05
por atcgfc
Bom dia,

Tou a tentar através do código infra, no entanto tenho um erro na linha do dim objtmail.

Consegues ajudar @osvaldomp ?
Código: Selecionar todos
Sub email()
Set objeto_outlook = CreateObject("Outlook.Application")
Set Email = objeto_outlook.CreateItem(0)

Email.display
Email.To = " "
Email.bcc = ""

Email.Subject = "Erros de Cálculo" & Format(Now, "ddmmyyyy")

Email.htmlbody = "Bom dia," & "<br><br>Segue em anexo o ficheiro relativo aos Erros do processo desta madrugada. <br><br>" _
& "Com os melhores cumprimentos,<br><br> "

Dim objShell As Object
Dim objSelectedFolder As Object
Dim objFileSystem As Object
Dim strSourceFolderPath As String
Dim objSourceFolder As Object
Dim objFile As Object
Dim dLastModifiedDate As Date
Dim strLastModifiedFilePath As String
Dim objMail As Outlook.mailItem
    
On Error GoTo ErrorHandler

    'Select a local source folder
    Set objShell = CreateObject("Shell.Application")
    Set objSelectedFolder = objShell.BrowseForFolder(0, "Select the source folder", 0, "")
    strSourceFolderPath = objSelectedFolder.self.Path
    
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
    Set objSourceFolder = objFileSystem.GetFolder(strSourceFolderPath)
 
    If objSourceFolder.Files.Count > 0 Then
       For Each objFile In objSourceFolder.Files
           'Find the last modified file within "xlsx" file type in the selected Windows folder
           If (objFile.DateLastModified > dLastModifiedDate) And (objFileSystem.GetExtensionName(objFile) = "xlsx") Then
              'You can add or change criteria, such as
              'Left(objFile.Name, 4) = "Test" ---> file whose name begins with "Test"
              '(objFile / 1024) / 1024 > 2 --> File exceeds 2 MB
              'Note: Use "And" to connect more than one criteria
              strLastModifiedFilePath = objFile.Path
              dLastModifiedDate = objFile.DateLastModified
           End If
       Next
 
       If strLastModifiedFilePath <> "" Then
          'Confirm attaching it to the current outlook email
          strMsg = "The last modified file in the " & Chr(34) & strSourceFolderPath & Chr(34) & " is: " & vbCrLf & vbCrLf & "File: " & strLastModifiedFilePath & vbCrLf & "Date: " & dLastModifiedDate & vbCrLf & vbCrLf & "Do you want to attach it?"
          nPrompt = MsgBox(strMsg, vbQuestion + vbYesNo, "Confirm Attaching Last Modified File")
 
          If nPrompt = vbYes Then
             Set objMail = Outlook.Application.ActiveInspector.CurrentItem
             objMail.Attachments.Add strLastModifiedFilePath
         End If
      Else
         MsgBox "No file in the selected folder can meet your predefined criteria!", vbExclamation + vbOKOnly
      End If
    Else
      MsgBox "No file exists in the selected Windows folder!", vbExclamation + vbOKOnly
    End If
   
ErrorHandler:
    Exit Sub

MsgBox "E-mail enviado com sucesso", vbInformation


End Sub




Re: Iniciante | VBA Enviar e-mail e escolher como anexo a enviar o último ficheiro colocado na pasta

Enviado: 03 Jun 2022 às 08:02
por osvaldomp
Qual é a mensagem exibida ao ocorrer o erro ?

As declarações de variáveis devem ser colocadas logo abaixo do nome da Sub, e não lá pelo meio do código.

Sub AsnoBozo()
Dim ....
Dim ...
Dim ...

Re: Iniciante | VBA Enviar e-mail e escolher como anexo a enviar o último ficheiro colocado na pasta

Enviado: 03 Jun 2022 às 08:10
por atcgfc
Bom dia,

Compile error:

User-defined type not defined

Cumprimentos,

Álvaro Gonçalves

Re: Iniciante | VBA Enviar e-mail e escolher como anexo a enviar o último ficheiro colocado na pasta

Enviado: 03 Jun 2022 às 08:30
por osvaldomp
A referência abaixo precisa ser marcada no editor de VBA.
Microsoft Outlook 16.0 Object Library

No editor clique em Ferramentas | Referências | marque a referência citada.

Dependendo da versão do Excel o trecho 16.0 pode estar como 14.0

Re: Iniciante | VBA Enviar e-mail e escolher como anexo a enviar o último ficheiro colocado na pasta

Enviado: 03 Jun 2022 às 09:33
por atcgfc
Muito obrigado.

Funcionou bem.

Tava aqui a ver se era possível eu indicar a pasta para ele procurar o ficheiro em vez de abril a shell para eu indicar o caminho até lá.

Poupava-me uns minutos.

Se conseguir ajudar.

Cumprimentos,

Álvaro Gonçalves

Cumprimentos,

Álvaro Gonçalves

Re: Iniciante | VBA Enviar e-mail e escolher como anexo a enviar o último ficheiro colocado na pasta

Enviado: 03 Jun 2022 às 09:57
por atcgfc
Já cheguei lá. thks