Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2011, 05:31   #1
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию сохранение в PDF и отправка по почте

Уважаемые программисты!!!
Из одной таблицы сформировал другую, сохранил ее в формате PDF под именем = содержимому определенной ячейки. Как теперь этот же файл макросом через The Bat! перебросить по адресу, который лежит на другом листе? Макрос Игоря (спасибо ему, не раз выручали его штучки) для The Bat! конечно же работает. А вот как и где в нем указать, что адрес почты, на который отправлять файл, лежит на таком-то листе в такой-то ячейке? И как в пути к прикрепляемому файлу указать, что его имя = содержимому такой-то ячейки, но с расширением pdf? Вот попытался чего-то сделать:


Sub Send_Mail_with_TheBAT_from_Excel_VB A()
'Dim wsh As New WshShell
Set wsh = CreateObject("WScript.Shell")
' Chr(34) - это кавычка
' указываем полный путь к файлу программы
TheBatPath = Chr(34) & "C:\Documents and Settings\thebat.exe" & Chr(34)
' пишем адрес получателя (можно указать список адресов)
strTO = "TO=" & Chr(34) & "address@mail.ru" & Chr(34) 'вот тут, как я понимаю, должна быть указана ячейка, где лежит адрес получателя
' тема сообщения
strSUBJECT = "SUBJECT=" & Chr(34) & "проверка отправки почты из Excel" & Chr(34)
' текст сообщения (или путь к текстовому файлу с сообщением)
strTEXT = "TEXT=" & Chr(34) & "C:\Documents and Settings\Администратор\Рабочий стол\Текст сообщения.txt" & Chr(34)
' путь к прикреплённому файлу (можно прикрепить несколько файлов)
strATTACH = "ATTACH=" & Chr(34) & "C:\Documents and Settings\Администратор\Рабочий стол\ExcelWorkbook.xls" & Chr(34) 'а вот тут вместо ExcelWorkbook.xls должна быть ссылка на ячейку как имя файла с расширением pdf

' формируем командную строку
Cmd = TheBatPath & " /MAIL;" & strTO & ";" & strSUBJECT & ";" & strTEXT & ";" & strATTACH & " /SENDALL; /MINIMIZE;"
wsh.Exec Cmd ' выполняем команду

For i = 1 To 30000: DoEvents: Next ' пауза - без неё почему-то не происходит отправки
Cmd2 = TheBatPath & " /SENDALL;": wsh.Exec Cmd2 ' команда ОТПРАВИТЬ ВСЮ ПОЧТУ
End Sub

Разъясните мне убогому, а то уже потонул в этой луже.
strannick вне форума Ответить с цитированием
Старый 29.11.2011, 07:31   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Если использовать функцию для отправки почты через TheBAT!,
то код будет выглядеть так:

Код:
Sub ПримерИспользования()
    ПапкаДляПДФфайлов$ = "C:\Documents and Settings\Администратор\Рабочий стол\"
    ' адрес почты - из ячейки A1 = cells(1,1), имя файла (без расширения) - из ячейки D5
    ОтправитьПисьмоЧерезTheBat Cells(1, 1), "текст письма", "тема письма", ПапкаДляПДФфайлов$ & [d5] & ".pdf"
End Sub
Код:
Function ОтправитьПисьмоЧерезTheBat(ByVal Email As String, _
                                    ByVal Текст As String, Optional ByVal Тема As String = "", _
                                    Optional ByVal AttachFilename As String = "") As Boolean
    ' функция производит отправку письма с заданной темой и текстом на адрес Email
    ' с почтового ящика, настроенного в TheBAT для отправки писем "по-умолчанию"
    ' Если задан параметр AttachFilename, к отправляемому письму прикрепляется файл

    strTO = "TO=" & Chr(34) & Email & Chr(34)    ' адрес получателя (можно указать список адресов)
    strSUBJECT = "SUBJECT=" & Chr(34) & Replace(Тема, """", "`") & Chr(34)   ' тема сообщения

    Filename$ = Environ("temp") & "\mail." & Fix(Rnd() * 1E+15)
    ff = FreeFile: Open Filename$ For Output As #ff
    Print #ff, Текст: Close #ff    ' пишем текст в файл

    ' текст сообщения (или путь к текстовому файлу с сообщением)
    strTEXT = "TEXT=" & Chr(34) & Filename$ & Chr(34)    ' Chr(34) - это кавычка

    ' путь к прикреплённому файлу (можно прикрепить несколько файлов)
    If AttachFilename <> "" Then strATTACH = "ATTACH=" & Chr(34) & AttachFilename & Chr(34)

    TheBatPath = ПутьКФайлуПрограммыTheBAT: DoEvents
    Cmd$ = Chr(34) & TheBatPath & Chr(34) & " /MAIL;" & strTO & ";" & strSUBJECT & ";" & _
           strTEXT & ";" & strATTACH & " /SENDALL; /MINIMIZE;"    ' формируем командную строку

    CreateObject("WScript.Shell").Exec Cmd$    ' выполняем команду
End Function
Код:
Function ПутьКФайлуПрограммыTheBAT() As String
    ' читает из реестра путь к исполняемому файлу программы TheBAT!
   ' возвращает путь к файлу, или пустую строку, если TheBAT! не установлен
   On Error Resume Next: Err.Clear
    key$ = "HKEY_CURRENT_USER\Software\RIT\The Bat!\EXE path"
    ПутьКФайлуПрограммыTheBAT = CreateObject("WScript.Shell").RegRead(key$)
End Function

Цитата:
(добавлено позже - может, кому пригодится. Это результат слияния данного макроса с программой заполнения шаблонов.)
Посмотрите самый простой способ, как организовать отправку почты (рассылку писем)
(с использованием программы заполнения документов по шаблонам, с последующей отправке по почте)

В программе есть возможность формировать письма по шаблону (с подстановкой данных из таблицы Excel),
прикреплять сформированные документы и файлы из выбранной папки, и много других возможностей.


Последний раз редактировалось EducatedFool; 12.01.2013 в 10:45.
EducatedFool вне форума Ответить с цитированием
Старый 29.11.2011, 08:21   #3
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Оооо, какие люди!!! Искренне рад. Лично говорю, СПАСИБО огромное, многим помогли лично мне Ваши материалы и примеры.
Но, честно говоря, для новичков иногда бывает не то, чтобы не понятно, а излишне наворочено. Вот, к примеру, я новичок. В общем, полный новичок. Вроде и задача простая - взять адрес из конкретной ячейки А2, тема письма из ячейки В2, текст тела письма из ячейки С2 на листе под названием "Почта", куда специально вывел данные для формирования письма, прикрепить к нему заранее сохраненный файл под именем из ячейки D2 и отправить. Два дня ползаю по интернету, не могу понять. Ваш пример был вроде для меня самым понятным. Причем изначально все было реализовано одним макросом. Тут я так понимаю, что
Sub SendmailTheBat()
Fpath$ = "D:\Заказ\Счета\"
' адрес почты - из ячейки A2 = cells(1,2), тема письма из ячейки B2 = cells(2, 2), тело письма из ячейки C2 = cells(3, 2), имя файла (без расширения) - из ячейки D5
' итого получилась такая строка
SendmailTheBat Cells(1, 1), Cells(1, 2), Cells(1, 3), Fpath & [d5] & ".pdf"
End Sub

Правильно?
strannick вне форума Ответить с цитированием
Старый 29.11.2011, 08:45   #4
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Дальше.
Вот тут я и теряюсь.
Function SendmailTheBat(ByVal Email As String, _
ByVal Текст As String, Optional ByVal Тема As String = "", _
Optional ByVal AttachFilename As String = "") As Boolean

strTO = "TO=" & Chr(34) & Cells(1, 1) & Chr(34) ' адрес получателя из ячейки А(2)
strSUBJECT = "SUBJECT=" & Chr(34) & Cells(1, 2) & Chr(34) ' тема сообщения из ячейки B2
'а тут так можно? вместо этих трех строк
Filename$ = Environ("temp") & "\mail." & Fix(Rnd() * 1E+15)
ff = FreeFile: Open Filename$ For Output As #ff
Print #ff, Текст: Close #ff ' пишем текст в файл
'вставить текст тела письма
strTEXT = "TEXT=" & Chr(34) & Cells(1, 3) & Chr(34) ' Chr(34) - это кавычка

' путь к прикреплённому файлу ВОТ ТУТ НЕ ПОЙМУ, ТАК?
If AttachFilename <> "" Then strATTACH = "ATTACH=" & Chr(34) & D:\Заказ\Счета\ & [D5] & .pdf & Chr(34)
' ну, это понятно
TheBatPath = ПутьКФайлуПрограммыTheBAT: DoEvents
Cmd$ = Chr(34) & TheBatPath & Chr(34) & " /MAIL;" & strTO & ";" & strSUBJECT & ";" & _
strTEXT & ";" & strATTACH & " /SENDALL; /MINIMIZE;" ' формируем командную строку

CreateObject("WScript.Shell").Exec Cmd$ ' выполняем команду
End Function

Правильно?
strannick вне форума Ответить с цитированием
Старый 29.11.2011, 08:59   #5
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Ругается на
Function SendmailTheBat(ByVal Email As String, _
ByVal Текст As String, Optional ByVal Тема As String = "", _
Optional ByVal AttachFilename As String = "") As Boolean
strannick вне форума Ответить с цитированием
Старый 29.11.2011, 10:06   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Ругается на
Function SendmailTheBat
Как ругается? Грязными словами, человеческим голосом?
Не надо макрос называть также, как и функцию...


Цитата:
Вот тут я и теряюсь.
Function SendmailTheBat
Внутри кода функции не надо исправлять ни одного символа.
В статье же есть пример файла...


Цитата:
Тут я так понимаю, что
Sub SendmailTheBat()
Fpath$ = "D:\Заказ\Счета\"
' адрес почты - из ячейки A2 = cells(1,2), тема письма из ячейки B2 = cells(2, 2), тело письма из ячейки C2 = cells(3, 2), имя файла (без расширения) - из ячейки D5
' итого получилась такая строка
SendmailTheBat Cells(1, 1), Cells(1, 2), Cells(1, 3), Fpath & [d5] & ".pdf"
End Sub

Правильно?
нет.
Правильно так:
Код:
ОтправитьПисьмоЧерезTheBat Cells(2, 1), Cells(2, 3), Cells(2, 2), Fpath & Cells(5, 4) & ".pdf"
или так:
Код:
ОтправитьПисьмоЧерезTheBat [a2], [b2], [c2], Fpath & Cells(5, 4) & ".pdf"

Последний раз редактировалось EducatedFool; 29.11.2011 в 10:09.
EducatedFool вне форума Ответить с цитированием
Старый 29.11.2011, 10:24   #7
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Да, тут я с координатами намудрил, бессонная ночь, будь оно неладно. Исправил:

Sub SendmailTheBat()
FPath$ = "D:\Заказ\Счета\"
SendmailTheBat [a2], [f2], [g2], FPath & Cells(2, 2) & ".pdf"
End Sub

Ругается. Выделяет синим SendmailTheBat в третьей строке и выделяет желтым первую.???
strannick вне форума Ответить с цитированием
Старый 29.11.2011, 10:29   #8
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Функцию вставил без правок.
Игорь, я тебя прошу, удели мне еще немножко времени. Или добей.
strannick вне форума Ответить с цитированием
Старый 29.11.2011, 10:35   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Выделяет синим SendmailTheBat в третьей строке и выделяет желтым первую.???
Я же написал...
Не надо макрос называть также, как и функцию

Скопируйте весь нижеприведённый код в свой файл (что было - удалите),
и проверяйте:

Код:
Sub SendmailTheBat()
    FPath$ = "D:\Заказ\Счета\"
    ОтправитьПисьмоЧерезTheBat [a2], [f2], [g2], FPath & Cells(2, 2) & ".pdf"
End Sub

Function ОтправитьПисьмоЧерезTheBat(ByVal Email As String, _
                                    ByVal Текст As String, Optional ByVal Тема As String = "", _
                                    Optional ByVal AttachFilename As String = "") As Boolean
    ' функция производит отправку письма с заданной темой и текстом на адрес Email
    ' с почтового ящика, настроенного в TheBAT для отправки писем "по-умолчанию"
    ' Если задан параметр AttachFilename, к отправляемому письму прикрепляется файл

    strTO = "TO=" & Chr(34) & Email & Chr(34)    ' адрес получателя (можно указать список адресов)
    strSUBJECT = "SUBJECT=" & Chr(34) & Replace(Тема, """", "`") & Chr(34)   ' тема сообщения

    Filename$ = Environ("temp") & "\mail." & Fix(Rnd() * 1E+15)
    ff = FreeFile: Open Filename$ For Output As #ff
    Print #ff, Текст: Close #ff    ' пишем текст в файл

    ' текст сообщения (или путь к текстовому файлу с сообщением)
    strTEXT = "TEXT=" & Chr(34) & Filename$ & Chr(34)    ' Chr(34) - это кавычка

    ' путь к прикреплённому файлу (можно прикрепить несколько файлов)
    If AttachFilename <> "" Then strATTACH = "ATTACH=" & Chr(34) & AttachFilename & Chr(34)

    TheBatPath = ПутьКФайлуПрограммыTheBAT: DoEvents
    Cmd$ = Chr(34) & TheBatPath & Chr(34) & " /MAIL;" & strTO & ";" & strSUBJECT & ";" & _
           strTEXT & ";" & strATTACH & " /SENDALL; /MINIMIZE;"    ' формируем командную строку

    CreateObject("WScript.Shell").Exec Cmd$    ' выполняем команду
End Function

Function ПутьКФайлуПрограммыTheBAT() As String
    ' читает из реестра путь к исполняемому файлу программы TheBAT!
    ' возвращает путь к файлу, или пустую строку, если TheBAT! не установлен
    On Error Resume Next: Err.Clear
    key$ = "HKEY_CURRENT_USER\Software\RIT\The Bat!\EXE path"
    ПутьКФайлуПрограммыTheBAT = CreateObject("WScript.Shell").RegRead(key$)
End Function
EducatedFool вне форума Ответить с цитированием
Старый 29.11.2011, 10:36   #10
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Пишет:

Complite error:
Wrong number of arguments or invflid property assignment
strannick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание шаблона Outlook сообщения и отправка его по почте avos002 Microsoft Office Excel 2 25.01.2011 08:18
Вопрос по TService и отправка по почте. Sti.k Общие вопросы Delphi 2 10.06.2010 13:39
СОХРАНЕНИЕ В ФОРМАТЕ *.PDF provodnikam Microsoft Office Word 10 20.02.2010 10:31
отправка аипи+параметр по почте (Delphi/PHP) dyonysos Помощь студентам 0 05.10.2009 19:12
отправка файла по почте DeDoK Работа с сетью в Delphi 1 10.11.2008 10:13