Добрый день всем! Очень часто приходится обмениваться файлам внутри корпоративной сети между сотрудниками. Самый быстрый вариант через контекстное меню "Отправить...", но есть один нюанс. Все это барахло заседает на почтовом сервере... Естественно ITшник ворчит ("На кой... вам общая сеть?!" и т.д.)... а жизнь у него и без того полна забот... А каждый раз лазить по папкам сети копировать фаил... копировать путь и писать текст в письме... это все не очень удобно...
Собственно решил упростить жизнь всем коллегам (и ITшнику тоже...)
Суть вот в чем... Хочу в контекстное меню Windows добавить команду, которая будет вызывать макрос в Outlook, он в свою очередь будет копировать выбранный фаил в сетевую папку и создавать письмо. О том что фаил "Имя" находится там то... делать ссылку на папку...
Как добавить ярлык в контекстное меню, вопросов нет... Как запустить конкретный маркрос через ярлык Outlook тоже вроде как вопросов нет
Написать макрос создания письма со ссылкой и текстом тоже вроде как не проблема...
А вот как передать "имя файла" и "путь к нему" в макрос для дальнейшей обработки... вот это для меня проблема...
Нашел немного информации о команде GetCommandLineA(); Вроде как она умеет обрабатывать параметры командной строки... [vba]
Код
Declare Function GetCommandLineA Lib "Kernel32" () As String
[/vba] Но честно скажу не понял ни чего...
Подскажите, где можно более подробно почитать информацию по этому вопросу... Или может есть другие более простые варианты?)
Заранее спасибо!
Добрый день всем! Очень часто приходится обмениваться файлам внутри корпоративной сети между сотрудниками. Самый быстрый вариант через контекстное меню "Отправить...", но есть один нюанс. Все это барахло заседает на почтовом сервере... Естественно ITшник ворчит ("На кой... вам общая сеть?!" и т.д.)... а жизнь у него и без того полна забот... А каждый раз лазить по папкам сети копировать фаил... копировать путь и писать текст в письме... это все не очень удобно...
Собственно решил упростить жизнь всем коллегам (и ITшнику тоже...)
Суть вот в чем... Хочу в контекстное меню Windows добавить команду, которая будет вызывать макрос в Outlook, он в свою очередь будет копировать выбранный фаил в сетевую папку и создавать письмо. О том что фаил "Имя" находится там то... делать ссылку на папку...
Как добавить ярлык в контекстное меню, вопросов нет... Как запустить конкретный маркрос через ярлык Outlook тоже вроде как вопросов нет
Я бы предложил вместо использования Outlook в качестве контейнера VBA-кода написать программу в отдельном файле на Visual Basic Script (практически тот же VBA, но с некоторыми ограничениями). Собственно, я набросал примерную пошаговую инструкцию до момента получения полного имени файла внутри кода VBS. Ну, а дальше - дело техники и объектов Outlook.
Итак, что я сделал в процессе подготовки:
1. Вошёл в "Редактор реестра" (regedit.exe) 2. Добавил раздел: [vba]
Код
HKEY_CLASSES_ROOT\*\shell\test
[/vba] 3. В раздел добавил строковый параметр (фраза будет отображаться в контекстном меню при щелчке ПКМ на файле в Проводнике): [vba]
Код
MUIVerb = При тестовом щелчке на файле
[/vba] 4. Добавил раздел: [vba]
Код
HKEY_CLASSES_ROOT\*\shell\test\command
[/vba] 5. В раздел добавил строковый параметр: [vba]
Код
(По умолчанию) = "C:\testdir\test.cmd" "%1"
[/vba] 6. В папке C:\testdir создал командный файл test.cmd следующего содержания: [vba]
Код
@echo off C:\testdir\test.vbs "%~f1"
[/vba] 7. В папке C:\testdir создал файл Visual Basic Script test.vbs следующего содержания: [vba]
Код
if WScript.Arguments.Count = 0 then WScript.Echo "Missing parameters" else WScript.Echo "Путь к файлу под ПКМ: " & WScript.Arguments(0) end if
[/vba] 8. Теперь при выборе на любом файле в Проводнике в контекстном меню появляется пункт "При тестовом щелчке на файле", по которому появляется сообщение с именем файла, на котором был произведен щелчок ПКМ.
Дальше, используя имя файла под курсором в переменной WScript.Arguments(0), можно написать в файле test.vbs желаемую его обработку, задействуя нужные объекты Outlook.
Всё это было выполнено в Windows 7. Надеюсь, в Windows 10 это выглядит точно так же (ну, или почти так же).
Я бы предложил вместо использования Outlook в качестве контейнера VBA-кода написать программу в отдельном файле на Visual Basic Script (практически тот же VBA, но с некоторыми ограничениями). Собственно, я набросал примерную пошаговую инструкцию до момента получения полного имени файла внутри кода VBS. Ну, а дальше - дело техники и объектов Outlook.
Итак, что я сделал в процессе подготовки:
1. Вошёл в "Редактор реестра" (regedit.exe) 2. Добавил раздел: [vba]
Код
HKEY_CLASSES_ROOT\*\shell\test
[/vba] 3. В раздел добавил строковый параметр (фраза будет отображаться в контекстном меню при щелчке ПКМ на файле в Проводнике): [vba]
Код
MUIVerb = При тестовом щелчке на файле
[/vba] 4. Добавил раздел: [vba]
Код
HKEY_CLASSES_ROOT\*\shell\test\command
[/vba] 5. В раздел добавил строковый параметр: [vba]
Код
(По умолчанию) = "C:\testdir\test.cmd" "%1"
[/vba] 6. В папке C:\testdir создал командный файл test.cmd следующего содержания: [vba]
Код
@echo off C:\testdir\test.vbs "%~f1"
[/vba] 7. В папке C:\testdir создал файл Visual Basic Script test.vbs следующего содержания: [vba]
Код
if WScript.Arguments.Count = 0 then WScript.Echo "Missing parameters" else WScript.Echo "Путь к файлу под ПКМ: " & WScript.Arguments(0) end if
[/vba] 8. Теперь при выборе на любом файле в Проводнике в контекстном меню появляется пункт "При тестовом щелчке на файле", по которому появляется сообщение с именем файла, на котором был произведен щелчок ПКМ.
Дальше, используя имя файла под курсором в переменной WScript.Arguments(0), можно написать в файле test.vbs желаемую его обработку, задействуя нужные объекты Outlook.
Всё это было выполнено в Windows 7. Надеюсь, в Windows 10 это выглядит точно так же (ну, или почти так же).Gustav
Gustav, За наводку спасибо... придется погрузиться в WBS (раньше не трогал) При чем как выяснилось запуск макроса Outlook через ключ /m не поддерживается с 2003 версии. Так что мой подход был обречен
Gustav, За наводку спасибо... придется погрузиться в WBS (раньше не трогал) При чем как выяснилось запуск макроса Outlook через ключ /m не поддерживается с 2003 версии. Так что мой подход был обречен Benos
Реализовал... Но не могу решить проблему с кликабельной ссылкой... все портит символ "#_" в имени общей папки:( [vba]
Код
if WScript.Arguments.Count = 0 then WScript.Echo "Missing parameters" else Dim OutLookApp Dim OutLookItem Dim NameFile NameFile = Split(WScript.Arguments(0), "\")
On Error Resume Next Set OutLookApp = GetObject(, "Outlook.Application") Set OutLookApp = CreateObject("Outlook.Application")
Set OutLookItem = OutLookApp.CreateItem(0) With OutLookItem .Subject = "Ссылка: " & NameFile(UBound(NameFile)) .HTMLBody = "Фаил находится: <A HREF=" & Chr(34) & "C:\Users\atv\Drive-PRO - #_ОП\#_Обмен\" & Chr(34) & ">" & NameFile(UBound(NameFile)) & "</A>" .Display 'Отображение сообщения End With end if
[/vba] Пробовал через Chr(35)... тоже не получилось... режет ссылку после "Drive-PRO - " и все тут
Еще вопрос... как скрыть консольное окно
Реализовал... Но не могу решить проблему с кликабельной ссылкой... все портит символ "#_" в имени общей папки:( [vba]
Код
if WScript.Arguments.Count = 0 then WScript.Echo "Missing parameters" else Dim OutLookApp Dim OutLookItem Dim NameFile NameFile = Split(WScript.Arguments(0), "\")
On Error Resume Next Set OutLookApp = GetObject(, "Outlook.Application") Set OutLookApp = CreateObject("Outlook.Application")
Set OutLookItem = OutLookApp.CreateItem(0) With OutLookItem .Subject = "Ссылка: " & NameFile(UBound(NameFile)) .HTMLBody = "Фаил находится: <A HREF=" & Chr(34) & "C:\Users\atv\Drive-PRO - #_ОП\#_Обмен\" & Chr(34) & ">" & NameFile(UBound(NameFile)) & "</A>" .Display 'Отображение сообщения End With end if
[/vba] Пробовал через Chr(35)... тоже не получилось... режет ссылку после "Drive-PRO - " и все тут