Страницы: 1
RSS
Отправка документов на почту через макрос, Отправка нескольких книг на почту через CDO
 
Добрый вечер. прошу помощи, в книге реализована отправка на почту через макрос без outlook. Т.е. при нажатии на кнопку эта книга отправляется на почту. все работает прекрасно но, нужно что бы с этой книгой отправлялась вторая которая лежит в директории с ней, но не открыта. никак не могу понять что надо добавить в код.
Код
Sub ОтправитьТабель() 'Отправить текущую книгу, как вложение по эл.почте

    Dim newMail As CDO.Message
    Dim mConfig As CDO.Configuration
    Dim wb As Workbook
    Dim Flds As Variant
    Dim TempFilePath, TempFileName, FileExtStr, msConfigURL As String
    
    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    
    Set wb = ActiveWorkbook

    If Val(Application.Version) >= 12 Then
        If wb.FileFormat = 51 And wb.HasVBProject = True Then
            MsgBox "Текущий файл содержит код VBA, в отправляемом вам файле кода VBA не будет." & vbNewLine & _
            "Сохраните файл как .xlsm, а затем попробуйте макрос еще раз.", vbInformation
            Exit Sub
        End If
    End If

    ' Создание временной копии текущей книги
    TempFilePath = Environ$("temp") & "\"

    TempFileName = "33333.xlsm"
    FileExtStr = ""
    wb.SaveCopyAs TempFilePath & TempFileName & FileExtStr
    
    On Error Resume Next
    SentTo = InputBox("Введите почту (обязательное поле):", "Запрос информации", "3434@yandex.ru")

    
    If SentTo = Empty Then
        MsgBox "Отмена отправки", vbCritical, "Получатели не указаны"
        Kill TempFilePath & TempFileName & FileExtStr ' Удаление времеого файла
        Application.CutCopyMode = False 'очистка буфера обмена
        Application.ScreenUpdating = True: Application.DisplayAlerts = True
        Exit Sub
    End If
    
    SentSubject = InputBox("Введите тему письма (обязательное поле):", "Запрос информации", "ТЕМА")
    
    If SentSubject = Empty Then
        MsgBox "Отмена отправки", vbCritical, "Тема письма не указана"
        Kill TempFilePath & TempFileName & FileExtStr ' Удаление времеого файла
        Application.CutCopyMode = False 'очистка буфера обмена
        Application.ScreenUpdating = True: Application.DisplayAlerts = True
        Exit Sub
    End If
    
    SentText = InputBox("Введите коментарий (не обязательно):", "Запрос информации", "")
    
    On Error GoTo ErrHandle
    Set newMail = New CDO.Message
    Set mConfig = New CDO.Configuration
    mConfig.Load -1
    
    Set Flds = mConfig.Fields
    msConfigURL = "http://schemas.microsoft.com/cdo/configuration"
    
    With Flds
        .Item(msConfigURL & "/smtpusessl") = True
      
         .Item(msConfigURL & "/smtpserver") = "smtp.yandex.ru"
       
        .Item(msConfigURL & "/smtpserverport") = 465
        .Item(msConfigURL & "/smtpauthenticate") = 1
        .Item(msConfigURL & "/sendusing") = 2
        .Item(msConfigURL & "/sendusername") = "3434@yandex.ru"
        .Item(msConfigURL & "/sendpassword") = "34"
        .Update
    End With
    
    With newMail
        .Subject = SentSubject ' Тема письма
        .From = "3333@yandex.ru" ' От кого = username почты
        .To = SentTo ' Кому
        .CC = "3333@mail.ru" ' Копия
        .BCC = "" ' Скрытая копия
        ' Чтобы установить тело письма, как текст, используйте .TextBody
        ' Чтобы отправить полную веб-страницу, используйте .CreateMHTMLBody
        .HTMLBody = SentText & "<hr>" & "<br>" & "С уважением 3333"  'Для форматирования используйте HTML теги.
        .AddAttachment TempFilePath & TempFileName & FileExtStr ' Ссылка на вложение
    End With
    
    newMail.Configuration = mConfig
    newMail.Send
    MsgBox "E-mail отправлен!", vbInformation, "Сообщение об отправке"
    
ExitLine:
    'Удаление времеого файла
    Kill TempFilePath & TempFileName & FileExtStr
    ' Очистка памяти
    Set newMail = Nothing: Set mConfig = Nothing
    Application.CutCopyMode = False 'очистка буфера обмена
    Application.ScreenUpdating = True: Application.DisplayAlerts = True
    Exit Sub
    
ErrHandle:
    MsgBox "Ошибка: " & Err.Description, vbInformation, "Внимание"
    GoTo ExitLine
    
End Sub



 
Код
.AddAttachment TempFilePath & TempFileName & FileExtStr ' Ссылка на вложение
.AddAttachment ThisWorkBook.Path& "\" & <Имя второй книги>   ' Ссылка на 2е вложение
По вопросам из тем форума, личку не читаю.
 
Цитата
написал:
Код ? 12.AddAttachment TempFilePath & TempFileName & FileExtStr ' Ссылка на вложение.AddAttachment ThisWorkBook.Path& "\" &     ' Ссылка на 2е вложение
Ошибка expected end of statement,  
 
Приведите что вы там вставили.
По вопросам из тем форума, личку не читаю.
 
Все дошло , в коде у вас не хватает скобок: будет выглядеть так:
Код
.AddAttachment (ThisWorkBook.Path & "\" & "Имя второй книги" ) 

спасибо за помощ

 
Цитата
sanya2323 написал:
не хватает скобок
да нет, скорее надо было просто отделить пробелом амперсанд от Path и все. Скобки там не нужны совершенно.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
надо было просто отделить пробелом амперсанд от Path и все
Совершенно верно

P.S. все время удивляло что это столь принципиально для интерпретатора   :D
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
все время удивляло что это столь принципиально для интерпретатора
это так сказать рудимент :)
Потому что знак амперсанда, поставленный сразу после слова без пробела, указывает на тип переменной - Long. Вот VBA и пытается определить для какой переменной нужно тип задать. И в данном случае, конечно, не находит и выдает закономерную ошибку.
А амперсанд, записанный через пробел - это уже оператор объединения.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх