Excel: Последнее изменения в файле на почту?

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

shao
Сообщения: 19
Зарегистрирован: 27 мар 2008, 12:19

День добрый,
подскажите а можно ли как-то оповещать , паример на email следующее:

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

Спасибо
Огромное.
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Код модуля:

Код: Выделить всё

Global ChangeBook As Boolean
Sub SendOutlook()
    Dim OutlookApp As Outlook.Application
    Dim MyItem As Outlook.MailItem
    Set OutlookApp = New Outlook.Application
    Set MyItem = OutlookApp.CreateItem(olMailItem)
    With MyItem
        .To = "Mymail@mymail.zu"
        .Subject = "Изменение файла"
        .Body = "Файл «" & ThisWorkbook.Name & "»" & Chr(10) & "изменён " & Application.Text(Now, "mm.dd.yyyy h:mm") _
                & Chr(10) & "пользователем «" & Application.UserName & "»."
        .Send
    End With
End Sub
Модуль "ЭтаКнига":

Код: Выделить всё

Private Sub workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If ChangeBook = True Then SendOutlook
End Sub
Модуль листов, где отслеживаются изменения:

Код: Выделить всё

Sub WorkSheet_Change(ByVal Target As Range)
    ChangeBook = True
End Sub
К сожалению, всё это работает, если у пользователей настроен на отправку сообщений Outlook и в нём установлен низший уровень безопасности. Кроме того, неизвестно, как всё это будет взаимодействовать с установленными файерволами и антивирусами. Как всё это обойти - это вопрос к макровирусописателям.


P.S: С учётом замечаний коллег http://forum.developing.ru/showthread.php?t=16268 правильнее заменить "Application.UserName" на "Environ("USERNAME")".
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Blat - Win32 utility to send
SMTP mail from the command line.
Useful for sending mail from
automated jobs, HTML CGI scripts,
etc. Includes source code.
Public Domain.
see http://www.blat.net
Андрей Энтелис,
aentelis.livejournal.com
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Есть куча програм оповещалок которые умеют при изменении файла высылать E-Mail и которые легко можно запустить службами на сервере
На крайний случай есть WMI
Конечно имя пользователя последним правившего файл будет доступно только на NTFS
Предполагается что есть домен
Андрей Энтелис,
aentelis.livejournal.com
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Интересная утилита, надо будет с ней разобраться... Это-ж с помощью неё из Экселя можно целый почтовик сварганить! Одно плохо: опять из эксель-проекта целая сборка для инсталляции получается. :(
&quot писал(а):Есть куча програм оповещалок которые умеют при изменении файла высылать E-Mail и которые легко можно запустить службами на сервере
На крайний случай есть WMI
Вот это, наверное, действительно оптимальное решение в данном случае. А имя пользователя, последнего изменившего файл, можно в Excel в отдельную ячейку макросом записывать.
shao
Сообщения: 19
Зарегистрирован: 27 мар 2008, 12:19

&quot писал(а):Есть куча програм оповещалок которые умеют при изменении файла высылать E-Mail и которые легко можно запустить службами на сервере
А что за програмы не подскажите? и как их правильно насторить?
shao
Сообщения: 19
Зарегистрирован: 27 мар 2008, 12:19

AlexZZZ,
Sub SendOutlook()
Dim OutlookApp As Outlook.Application
при сохранение следующая ошибка:
Compile error:
User-defined type not defined

что это может быть?

спасибо
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

shao писал(а):AlexZZZ,
при сохранение следующая ошибка:
Compile error:
User-defined type not defined
что это может быть?


Дык, Outlook.Application у Вас - неизвестный тип. Либо не установлен аутлук, либо просто не добавлеена библиотека к проекту. См. свойства проекта.

shao писал(а):А что за програмы не подскажите? и как их правильно насторить?


Там ссылка была выше.
shao
Сообщения: 19
Зарегистрирован: 27 мар 2008, 12:19

Naeel Maqsudov, аутлук установлен, всё почта через аутлук отправлется, при клике на e-mail адрес открывается сразу окно аутлука.

наверное что-то с библиотекой? а где взять куда добавить? спасибо.
Аватара пользователя
demon416
Сообщения: 178
Зарегистрирован: 30 янв 2006, 14:03
Откуда: kirovskoe

в редакторе vba
tools - refrences
ака хинт: коментируйте код, самим же легче будет разобраться ;)
Ответить