Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Basic / VBA


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Гаряка Асмик
Статус: Профессионал
Рейтинг: 4451
∙ повысить рейтинг »
Vasiliy83
Статус: Бакалавр
Рейтинг: 1791
∙ повысить рейтинг »
Megaloman
Статус: Профессионал
Рейтинг: 1452
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Basic/VBA

Номер выпуска:1042
Дата выхода:06.07.2010, 21:30
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:211 / 90
Вопросов / ответов:1 / 2

Вопрос № 179368: Здравствуйте уважаемые эксперты, ниже следует мой макрос. Он делает: выделенный текст в документе сначала упаковывает его во временный файл помещает, далее этот файл прикрепляет в Оутлуке пользователь отправлет письмо самостоятельно, темпашка удал...



Вопрос № 179368:

Здравствуйте уважаемые эксперты, ниже следует мой макрос.
Он делает: выделенный текст в документе сначала упаковывает его во временный файл помещает, далее этот файл прикрепляет в Оутлуке пользователь отправлет письмо самостоятельно, темпашка удаляется. И тот Исходный файл открывается. Остался последний ньюанс.
А именно был например документ на 78 листах, я выделил часть, например на 63 листе, макрос всё сделал и отрывает мне исходный документ, с которого я отправил письмо уже на 1 стр., не логично, как сделать, чтобы он открыл его в том же самом месте и чтобы выделенное осталось выделенным. Подскажи как, где, куда, что надо добавить!!


'условие о том выделен ли текст, если длина текста равна нулю, то есть пустому месту - "", тогда ...
If Len(Application.Selection.Range.Text) = 0 Then
'вывести надпись указанную в кавычках
MsgBox$ "Никакой текст не выделен", vbOKOnly, "Отправка письма программой Outlook не может быть выполнена"
'выйти из программы
Exit Sub
End If

Dim TempDocPath As String 'путь для сохранения временного документа
Dim FSO As Object 'системный объект для получения имени временного файла
Dim sFileName As String 'имя временного файла
Dim SelStart As Long 'начало выделения
Dim SelEnd As Long 'конец выделения

CurrDocPath = ActiveDocument.FullName 'путь к папке Temp
TempDocPath = Environ("Temp") 'запоминаем границы выделения
SelStart = Selection.Start
SelEnd = Selection.End
'получаем имя для временного файла
Set FSO = CreateObject("Scripting.FileSystemObject")
sFileName = FSO.GetTempName() 'временное имя для файла
TempDocPath = TempDocPath & "\" & Mid(sFileName, 1, InStrRev(sFileName, ".")) & "doc" 'полный путь к временному файлу
ActiveDocument.SaveAs TempDocPath, 0, AddToRecentFiles:=False 'сохраняем активный докумен т, как временный файл
ActiveDocument.Range(SelEnd, ActiveDocument.Range.End).Delete 'удаляем всё, что находится после выделения
ActiveDocument.Range(0, SelStart).Delete 'удаляем всё, что находится до выделения

''''''''''''''''''''''''''''''''''''''''''
'таким образом в новом документе осталось только то, что было выделено в старом
''''''''''''''''''''''''''''''''''''''''''

Selection.Font.Color = wdColorRed 'окрасить выделенное в красный цвет
ActiveDocument.Close True 'закрываем активный документ с сохранением настроек

'''''''''''''' 9;'''''''''''''''''''''''''''
'отправка письма по Microsoft Outlook

'для работоспособности нужно добавить ссылку на библиотеку
'зайдите в меню Tools-References, найдите Microsoft Outlook Object Library, поставьте птичку

Dim objOL As Outlook.Application
Set objOL = Outlook.Application

Dim objMail As Outlook.MailItem
Set objMail = objOL.CreateItem(olMailItem)

Dim objAttach As Object
Set objAttach = objMail.Attachments

With objMail
.To = "" '"mm@mm.ru; dd@dd.ru" 'адрес e-mail для отправки письма, если несколько адресов e-mail, пишем, отделяя их точкой с запятой - ";"
.CC = "" 'копия
.Subject = "" 'это тема письма
'.Body = "Это текст письма" 'вариант отправки определённого текста
'.Body = ActiveDocument.Selecti on 'вариант отправки выделенного текста
.Attachments.Add TempDocPath '
'.Attachments.Add 'если надо второе вложенное письмо, тогда добавляем второй Attachments
.OriginatorDeliveryReportRequested = True 'уведомление о доставке письма
.ReadReceiptRequested = True 'уведомление о прочтении письма
.Save ' сохраним письмо
.Display 'показать окно письма, то есть показать открытую программу Outlook
'.Send 'отправить письмо автоматом
End With
Set objMail = Nothing
Set objOL = Nothing
Set objAttach = Nothing

Documents.Open CurrDocPath 'открываем старый, исходный документ
Kill TempDocPath 'удаляем временный документ
Set FSO = Nothing 'установка объекта в значение Nothing требуется для освобождения памяти, которая была выделена для создания этого объекта
Спасибо

Отправлен: 01.07.2010, 21:01
Вопрос задал: Ципихович Эндрю, Посетитель
Всего ответов: 2
Страница вопроса »


Отвечает PsySex, Специалист :
Здравствуйте, Ципихович Эндрю.
Данная процедура копирует и сохраняет выделенное в файл с именем sFile.
В вашем случае вставляете ее после после определения имени файла TempDocPath
Call SaveSelected(TempDocPath)
и до слов 'отправка письма по Microsoft Outlook ваш код не нужен. Также в конце убрать Documents.Open CurrDocPath, т.к. исходный документ и не закрывался.
Код:
Sub SaveSelected(sFile as String)
Dim nSymbCnt As Long
Dim dcNew As Document
nSymbCnt = Selection.End - Selection.Start 'запоминаем колличество выделенных символов
Selection.Copy 'копируем выделенный текст в текущем документе в буфер обмена
Set dcNew = New Document & #39;создаем новый документ
dcNew.Activate 'делаем его активным
Selection.PasteAndFormat (wdPasteDefault) 'вставляем скопированное
Selection.Start = 0 'выбираем текст для покраски в красный цвет
Selection.End = nSymbCnt
Selection.Font.Color = wdColorRed 'красим
dcNew.SaveAs sFile, 0, AddToRecentFiles:=False 'сохраняем документ
dcNew.Close
Set dcNew = Nothing
End Sub

-----
Bom Shankar!

Ответ отправил: PsySex, Специалист
Ответ отправлен: 02.07.2010, 15:16
Номер ответа: 262383

Оценка ответа: 5

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 262383 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает Иноземцева Ольга Степановна, 2-й класс :
    Здравствуйте, Ципихович Эндрю!
    Если правильно поняла, получатель письма должен работать с тем же документом, что и отправитель, по почте получает фрагмент этого документа. При получении письма, у получателя Word-ом нужно открыть этот документ, найти в нем такой же фрагмент, как в письме и выделить его. Тогда у получателя должен быть известен путь к документу .
    Но полученным письмом в почте автоматически документ не откроешь.
    Можно указать в письме гиперссылку на документ, чтобы его открыть. Но тогда в Word'e на стороне получателя должен быть макрос, который при открытии документа проверял бы почту, искал нужное письмо, считывал из него фрагмент, искал бы его в тексте документа и выделял.
    Чтобы из макроса найти нужное письмо, оно должно быть как-то помечено, например в теме.

    Наверное так можно сделать, но придется потрудиться, написать еще один макрос для Word-а и установить его на стороне получателя.

    Ответ отправил: Иноземцева Ольга Степановна, 2-й класс
    Ответ отправлен: 02.07.2010, 18:10
    Номер ответа: 262384

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 262384 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.16 от 26.05.2010

    В избранное