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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2009, 20:25   #1
Koddo
 
Регистрация: 26.03.2009
Сообщений: 3
Счастье из Excel в OutLook (не всё так просто...)

Добрый день.

Задача, на первый взгляд тревиальная, но...

Определённым адресатам нужно отправить определённые (уникальные) файлы:
N_2_*.xls - Петров@почта.ru,
N_3_*.xls - Сидоров@почта.ru
NS_*.xls - Иванов@почта.ru и т.п.
Файлы находятся всегда в одной и той же папке. Но, часть имени (дата) файла меняется: "N_2_290309.xls"
Тема письма: название файла (если можно, то без разширения)
Текст письма: произвольный (например "Добрый день.")

Т.е. в идеале нужно что бы макрос искал в папке файл (по неизменной части имени файла) соответствующий адресату из списка и отправлял его.

Просто отправка адресатам определённых файлов из папки получилась (макрос прилагается).

Затык в следующем:
1. Как макрос будет искать файл, если часть его имени изменится (в имени файла присутствует дата).
2. Если файла для этого адресата в папке нет, то макрос не должен отправлять пустое письмо без вложения.

Первое, в принципе, но не желательно, можно реализовать, убрав изменяемую часть файла (но очень не желательно).

Заранее спасибо.


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

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

Вложения
Тип файла: zip Книга3.zip (14.5 Кб, 22 просмотров)

Последний раз редактировалось EducatedFool; 12.01.2013 в 10:39.
Koddo вне форума Ответить с цитированием
Старый 26.03.2009, 20:57   #2
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Вот этот функция :
Function FileYesNo (fname) As boolean
Dim fileSys As Object
Set fileSys = CreateObject("Scripting.FileSystemO bject")
FileYesNo = fileSys.FileExists(fname)
End Function
возвращает True или False если файл существует

fname = "D:\temp\N_2_290309.xls"

используй ее. Правило именования файла известно? Тогда можно собрать имя файла, путь и передать этой функции.
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 26.03.2009, 21:06   #3
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Хотя вот еще один вариант.

Sub test()
File1 = ThisWorkbook.Path & "\" & "N_2*.xls"
File1 = Dir(File1)
If File1 <> "" Then Debug.Print File1
End Sub

Он подходит больше.
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 27.03.2009, 14:25   #4
Koddo
 
Регистрация: 26.03.2009
Сообщений: 3
По умолчанию

Простите за дилетанство, но вот второй вариат если использовать, куда его помещать в коде макроса, что бы он работал?
Koddo вне форума Ответить с цитированием
Старый 28.03.2009, 12:06   #5
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

В прикрепленном файле макрос проверяет наличие файлов по заданной маске в своей директории.
Т.е. если файл "Книга 3.xlsm" сохранен в папке C:\TEMP\ он проверит все файлы в этой директории по маске заданной на странице "Лист2". Если файл удовлетворяет маске он прикрепляется, иначе нет.
Вложения
Тип файла: zip Книга3.zip (15.7 Кб, 21 просмотров)
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 30.03.2009, 11:17   #6
Koddo
 
Регистрация: 26.03.2009
Сообщений: 3
Радость

Добрый день.
Сперва хочу выразить благодарность за помощь и то что откликнулись.

Возможно, я не точно или неверно задал требования к макросу и Вы меня не поняли.

Если нужного файла в папке нет (допустим, там вообще нет никаких файлов), то макром не должен создавать (и отправлять как результат) пустых писем без вложений. Т.е. , если папка пустая, то ни одного письма создано быть не должно, как бы макрос отработает "в пустую".

Я признателен за помощь, но и исходный макрос (без Вашего дополнения) делал абсолютно тоже самое - есть файл, он создаёт письмо и прикрепляет его, нет файла - он создаёт пустое письмо. А хотелось бы что бы он его не создавал вовсе. - возможно ли такое реализовать (к сожалению сам несколько далёк от VBA).

Опять обращаюсь к Вам за помощью.
Koddo вне форума Ответить с цитированием
Старый 30.03.2009, 14:45   #7
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Вот пример в котором при отсутствии файла для прикрепления письмо не создается. Но работает только если количество адресов 1, если более то его надо переделывать...
Вложения
Тип файла: zip Книга3.zip (15.3 Кб, 25 просмотров)
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 27.05.2009, 14:53   #8
honeybeer
Новичок
Джуниор
 
Регистрация: 27.05.2009
Сообщений: 2
По умолчанию

Код:
Sub Test()
Dim msrFso As New FileSystemObject
Dim msrFolder As Folder
Dim msrFile As File
    FileTemplates = Array("N_2_", "N_3_", "NS_")                            'вот так делать не надо, я это сделал только из тестовых целей
    If Not msrFso.FolderExists("C:\TestFolder\") Then Exit Sub
    Set msrFolder = msrFso.GetFolder("C:\TestFolder\")
    If msrFolder.Files.Count = 0 Then Exit Sub
    For Each msrFile In msrFolder.Files
        For Each Item In FileTemplates
            If msrFile.ShortName Like (Item & "*") Then SendMail FileSpec:=msrFile.Path, Addresses:=GetAssociatedAddr(CStr(Item))
        Next Item
    Next msrFile
End Sub

Public Function GetAssociatedAddr(Key As String) As Collection
'На самом деле я не знаю где у вас хранятся адреса электронной почты и связи
    Set GetAssociatedAddr = Nothing
End Function

Public Sub SendMail(FileSpec As String, Addresses As Collection)
Dim msrFso As New FileSystemObject
Dim olApp As New Outlook.Application
Dim olMail As Outlook.MailItem
On Error GoTo Catch
'---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' формирование письма и его отправка произойдет только при соблюдении трех условий:
'1) файл FileSpec существует
'2) Addresses не пустая ссылка
'3) в Addresses есть минимум один элемент(адрес)
'---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    If Not msrFso.FileExists(FileSpec) Or Addresses Is Nothing Or Addresses.Count = 0 Then GoTo Catch
    Set olMail = olApp.CreateItem(olMailItem)
    olMail.Subject = msrFso.GetFileName(FileSpec)
    olMail.Body = "Не дождетесь."
    For Each Address In Addresses
        olMail.Recipients.Add Name:=Address
    Next Address
    olMail.Attachments.Add Source:=FileSpec
    olMail.Send
Catch:
    If Not olApp Is Nothing Then olApp.Quit
    Set olApp = Nothing
    Set fso = Nothing
End Sub
попробуйте разобраться в этом.
honeybeer вне форума Ответить с цитированием
Старый 19.01.2011, 14:34   #9
Мартовский
Новичок
Джуниор
 
Регистрация: 19.01.2011
Сообщений: 1
По умолчанию

Цитата:
Сообщение от Koddo Посмотреть сообщение
Добрый день.
Задача, на первый взгляд тревиальная, но...
Заранее спасибо.
Подскажите, решили ли?
Есть похожая задача:
Есть таблица Эксел. в ней мыло и номер договора
Есть набор файлов, в именах которых есть номер договора.
Нужно, чтобы прога посылала адресату файлы, соответствующие номеру договора.(на каждый адрес их может быть до 4х)

Подойдет ли ваша прога?
Мартовский вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Так всё начиналось JTG Софт 2 11.08.2008 14:34
Вроде на первый взгляд всЁ просто...... Solny6ko YasnoE Помощь студентам 4 17.09.2007 08:23
Скока парился ни чё не получилось, а вроде всё просто! Cherni Voron Общие вопросы Delphi 14 07.08.2007 16:25
Не всё так просто с кусором! TCursor и Aslan Общие вопросы Delphi 1 11.07.2007 18:31