Страницы: 1
RSS
Связь с Microsoft OfficeOutlook
 
Как прописать в Excel отправку эл. почты через Outlook? Макрос   записывается только до момента открытия окна сообщения, как еще дописать добавление имени получателя письма(одно и то же) и сам факт отправки письма?(нажатие Send)
 
на форуме нашел макрос от мастера ZVI, который (макрос) сохраняет выделенный диапазон в отдельную книгу, помещает ее в качестве вложения в письмо, с уже заранее определенным адресом, пишет заголовок письма и текст в теле письма...  
но на "отправить" не нажимает :-)  
сейчас, к сожалению, не могу его предоставить, ибо он на рабочем компе прижился (только я его несколько напильником обработал).  
тут одно из двух  
либо в поиск  
либо завтра выложу  
:-)
 
ну так вот :-)  
обещанный обработанный напильником макрос от ZVI, за что ему спасибо!  
 
Sub "название макроса"()  
'Working in 2000-2007  
   Dim Source As Range  
   Dim Dest As Workbook  
   Dim wb As Workbook  
   Dim TempFilePath As String  
   Dim TempFileName As String  
   Dim FileExtStr As String  
   Dim FileFormatNum As Long  
   Dim OutApp As Object  
   Dim OutMail As Object  
     
   Set Source = Nothing  
   On Error Resume Next  
'копируемый диапазон  
   Set Source = Range("E28:T65")  
 
   On Error GoTo 0  
 
     
 
   With Application  
       .ScreenUpdating = False  
       .EnableEvents = False  
   End With  
 
   Set wb = ActiveWorkbook  
   Set Dest = Workbooks.Add(xlWBATWorksheet)  
 
   Source.Copy  
   With Dest.Sheets(1)  
       .Cells(1).PasteSpecial Paste:=8  
       .Cells(1).PasteSpecial Paste:=xlPasteValues  
       .Cells(1).PasteSpecial Paste:=xlPasteFormats  
       .Cells(1).Select  
       Application.CutCopyMode = False  
   End With  
'диапазон в новой книге где выставляются границы печати  
Range("A1:P38").Select  
 
   Range("P38").Activate  
   ActiveSheet.PageSetup.PrintArea = "$A$1:$P$38"  
   With ActiveSheet.PageSetup  
       .PrintTitleRows = ""  
       .PrintTitleColumns = ""  
   End With  
   ActiveSheet.PageSetup.PrintArea = "$A$1:$P$38"  
   With ActiveSheet.PageSetup  
       .LeftHeader = ""  
       .CenterHeader = ""  
       .RightHeader = ""  
       .LeftFooter = ""  
       .CenterFooter = ""  
       .RightFooter = ""  
       .LeftMargin = Application.InchesToPoints(0.787401575)  
       .RightMargin = Application.InchesToPoints(0.787401575)  
       .TopMargin = Application.InchesToPoints(0.984251969)  
       .BottomMargin = Application.InchesToPoints(0.984251969)  
       .HeaderMargin = Application.InchesToPoints(0.5)  
       .FooterMargin = Application.InchesToPoints(0.5)  
       .PrintHeadings = False  
       .PrintGridlines = False  
       .PrintComments = xlPrintNoComments  
       .PrintQuality = 600  
       .CenterHorizontally = True  
       .CenterVertically = True  
       .Orientation = xlLandscape  
       .Draft = False  
       .PaperSize = xlPaperA4  
       .FirstPageNumber = xlAutomatic  
       .Order = xlDownThenOver  
       .BlackAndWhite = False  
       .Zoom = False  
'разместить на одной странице по горизонтали и вертикали          
       .FitToPagesWide = 1  
       .FitToPagesTall = 1  
 
       .PrintErrors = xlPrintErrorsDisplayed  
   End With  
   TempFilePath = Environ$("temp") & "\"  
   TempFileName = "имя файла " & " " & Range("H6") & ", auoia " & Range("I6")  
 
   If Val(Application.Version) < 12 Then  
       'You use Excel 2000-2003  
       FileExtStr = ".xls": FileFormatNum = -4143  
   Else  
       'You use Excel 2007  
       FileExtStr = ".xls": FileFormatNum = 56  
   End If  
 
   Set OutApp = CreateObject("Outlook.Application")  
   OutApp.Session.Logon  
   Set OutMail = OutApp.CreateItem(0)  
 
   With Dest  
       .SaveAs TempFileName & FileExtStr, FileFormat:=FileFormatNum  
       'TempFilePath &  
       On Error Resume Next  
       With OutMail  
           .To = "адрес кому"  
           .cc = ""  
           .BCC = ""  
           .Subject = TempFileName  
           .Body = "текст в теле письма"  
           .Attachments.Add Dest.FullName  
           'You can add other files also like this  
           '.Attachments.Add ("C:\test.txt")  
           .Display   'or use .Display  
       End With  
       On Error GoTo 0  
       .Close SaveChanges:=False  
   End With  
 
   'Kill TempFilePath & TempFileName & FileExtStr  
 
   Set OutMail = Nothing  
   Set OutApp = Nothing  
 
   With Application  
       .ScreenUpdating = True  
       .EnableEvents = True  
   End With  
End Sub  
 
 
надеюсь поможет.
 
Добавлю: в таком виде будет выводится на экран подготовленное письмо (с вложенными файлами, заполнеными полями "кому", "тема" и т.п.), чтобы его не выводить а отправить надо вместо .Display напсать .Send  
Но кнопочку нажимать все равно придется - Аутлук будет ругаться на автоматическую отправку, думая что вирус. Что в Аутлуке поменять - не знаю.  
Я в конце концов отказался от этого метода, благо корпоративные ИТ технологии позволяют сделать выгрузку на веб-портал
 
{quote}{login=Лузер™}{date=25.04.2008 12:37}{thema=}{post}Добавлю: в таком виде будет выводится на экран подготовленное письмо (с вложенными файлами, заполнеными полями "кому", "тема" и т.п.), чтобы его не выводить а отправить надо вместо .Display напсать .Send  
Но кнопочку нажимать все равно придется - Аутлук будет ругаться на автоматическую отправку, думая что вирус. Что в Аутлуке поменять - не знаю.  
Я в конце концов отказался от этого метода, благо корпоративные ИТ технологии позволяют сделать выгрузку на веб-портал{/post}{/quote}  
 
ухты!  
надо попробовать :-)  
 
вопрос:  
 
это в этом кусочке with- end with?  
 
With Dest  
.SaveAs TempFileName & FileExtStr, FileFormat:=FileFormatNum  
'TempFilePath &  
On Error Resume Next  
With OutMail  
.To = "адрес кому"  
.cc = ""  
.BCC = ""  
.Subject = TempFileName  
.Body = "текст в теле письма"  
.Attachments.Add Dest.FullName  
'You can add other files also like this  
'.Attachments.Add ("C:\test.txt")  
.Display 'or use .Display  
End With  
On Error GoTo 0  
.Close SaveChanges:=False  
End With  
 
надо написать вместо  
.Display 'or use .Display  
просто    
.Send  
так?
 
Так. Но без победы над аутлуком выйдет дольше - аутлук еще несколько секунд кнопку "ОК" не делает активной.
 
да, действмтельно страшновато выглядит :-)  
девки перепугаются... а я только их приучил кнопочку нажимать  
оставлю .Display
 
{quote}{login=Лузер™}{date=25.04.2008 12:48}{thema=}{post}Так. Но без победы над аутлуком выйдет дольше - аутлук еще несколько секунд кнопку "ОК" не делает активной.{/post}{/quote}  
 
еще можно немного уточнить-пояснить?  
спасибо :-)  
в какое место надо воткнуть эту строку?  
 
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True  
 
перед этой?  
 
.SaveAs TempFileName & FileExtStr, FileFormat:=FileFormatNum
 
Да.  
А пароль на защиту листа не хотим поставить?
 
хм... в принципе можно было бы  
 
так?  
 
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True  
.SaveAs TempFileName & FileExtStr, FileFormat:=FileFormatNum  
   Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _  
       , CreateBackup:=False
 
Я не о защите книге, а о защите листа:  
ActiveSheet.Protect "мой_секретный_пароль" DrawingObjects:=True, Contents:=True, Scenarios:=True
 
то есть вот так, просто в теле макроса в кавычках прописать пароль?  
забавно :-)  
интересно, почему макрорекордер не написал его? я ведь пароль при защите листа набирал...  
спасибо! сейчас внедрю в код добавочку
 
{quote}{login=mazayZR}{date=25.04.2008 03:31}{thema=}{post}  
интересно, почему макрорекордер не написал его? {/post}{/quote}Для секретности :)  
А дело-то простое: записываем нечто макрорекордером, видим нечто (например, метод .Protec), лезем в справку, видим:  
expression.Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables)
 
Я чего-то в шоке... а если попробовать  
 
Sub имя  
 
Application.Dialogs(xlDialogSendMail).Show ("имя получателя@mail.ru")  
 
End Sub  
 
Что делает: прикрепляет книгу из которой запущен макрос (или активную книгу) к письму и прописывает получателя. На кнопочку Send правда не нажимает...    
Найдено методом ненаучного 20-ти минутного тыка..
 
нет слов :-)  
 
представляю, в каком ты шоке ))))))))  
у тебя одна строчка по сути, а тут...  
но у тебя "улетит" вся книга, а в том, который я привел, определенный диапазон с определенного листа...  
в общем, тут уж кому чего. мне надо диапазон отправлять и этот макрос справляется (только вот пароль так и не заработал, да и шут с ним)  
))))
 
я так сделал: макросом нужный диапазон в новую книгу перекидываю, сохраняю эту новую на диск с нужным именем(значение одной из ячеек), отправляю этой строчкой, потом t=ActiveWindow.FullName, ActiveWindow.Close и  Kill t, чтоб диск не захламлять. Где-то так... Спасибо подсказку прислали, как книгу удалить, не знал :)
Страницы: 1
Наверх