Страницы: 1
RSS
Сохранение вложения из Outlook средствами VBA, Не могу найти ошибку
 
Всем привет. Помогите, пожалуйста, голову сломала, а дебагер в Outlook не запускается )
Понадобилось сохранить файлы, которые присылает один и тот же адресат, нашла в интернете код, попыталась его упростить и использовать для своих целей, но работает он рандомно... то работает, то нет и сохраняет разное кол-во файлов, а в данный момент вообще не работает )). Не могу понять в чем может быть проблема.
Создала правило, при получении письма с вложением от данного адресата, письмо перемещается в папку с его именем в outlook и запускается макрос, который не срабатывает...
Код
Public Sub SaveAttachments(msg As MailItem)
Dim att As Attachment
Dim base_path As String
Dim file_ext As String        
Dim s As String
Dim pd As Integer
Dim n As String, w As String


base_path = "C:\База цен"
file_ext = "xlsx_xls"
  
    For Each att In msg.Attachments

        s = att.FileName
        pd = InStrRev(s, ".")
        n = Left(s, pd - 1)
        w = Right(s, Len(s) - pd)

        If InStr(file_ext, w) > 0 Then
            att.SaveAsFile base_path & "\" & n & "." & w
        End If
    Next
End Sub
 
что и как передается в качестве аргумента msg???
По вопросам из тем форума, личку не читаю.
 
БМВ, msg - это само письмо, оно берется в результате выполнения правила.
Немного еще упростила код. Заработало. Единственное не работает когда я хочу применить его ко всем уже полученным письмам. Но на новые хорошо действует
Вот, может пригодится кому:
Код
Option Compare Text

Public Sub SaveAttachments(msg As MailItem)
Dim att As Attachment
Dim base_path As String
Dim file_ext As String
Dim s As String
Dim w As String
Dim pd As Integer

base_path = "C:\База цен"
file_ext = "xlsx_xls"
  
    For Each att In msg.Attachments
 
        s = att.FileName
        pd = InStrRev(s, ".")
        w = Right(s, Len(s) - pd)
 
        If InStr(file_ext, w) > 0 Then
            att.SaveAsFile base_path & "\" & s
        End If
    Next
End Sub
 
сейчас проверил Ваш код на своём компе. Всё работает.
OFF.
в этом (file_ext = "xlsx_xls") нет смысла, ибо xls тоже входит в xlsx, так что достаточно file_ext = "xlsx"
И если ещё упрощать, то надо избавиться от ненужных переменных, а брать сразу расширение файла.
Код
Public Sub SaveAttachments(msg As MailItem)
Dim att As Attachment
Dim base_path As String
Dim file_ext As String
base_path = "D:\temp"
file_ext = "xlsx"
  For Each att In msg.Attachments
    If InStr(file_ext, CreateObject("Scripting.FileSystemObject").GetExtensionName(att.FileName)) > 0 Then
      att.SaveAsFile base_path & "\" & att.FileName
    End If
  Next
End Sub
Изменено: Мартын - 22.04.2019 09:16:36
Страницы: 1
Наверх