Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Outlook:Передача параметра в макрос через ярлык - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Outlook:Передача параметра в макрос через ярлык
Benos Дата: Понедельник, 30.08.2021, 14:05 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013 / 2016 / 365
Добрый день всем!
Очень часто приходится обмениваться файлам внутри корпоративной сети между сотрудниками.
Самый быстрый вариант через контекстное меню "Отправить...", но есть один нюанс. Все это барахло заседает на почтовом сервере...
Естественно ITшник ворчит ("На кой... вам общая сеть?!" и т.д.)... а жизнь у него и без того полна забот...
А каждый раз лазить по папкам сети копировать фаил... копировать путь и писать текст в письме... это все не очень удобно...

Собственно решил упростить жизнь всем коллегам (и ITшнику тоже...)

Суть вот в чем...
Хочу в контекстное меню Windows добавить команду, которая будет вызывать макрос в Outlook, он в свою очередь будет копировать выбранный фаил в сетевую папку и создавать письмо. О том что фаил "Имя" находится там то... делать ссылку на папку...

Как добавить ярлык в контекстное меню, вопросов нет...
Как запустить конкретный маркрос через ярлык Outlook тоже вроде как вопросов нет
Цитата
C:\Program Files\Microsoft Office\Office16\outlook.exe /mMyMacroName"

Написать макрос создания письма со ссылкой и текстом тоже вроде как не проблема...

А вот как передать "имя файла" и "путь к нему" в макрос для дальнейшей обработки... вот это для меня проблема...

Нашел немного информации о команде GetCommandLineA();
Вроде как она умеет обрабатывать параметры командной строки...
[vba]
Код
Declare Function GetCommandLineA Lib "Kernel32" () As String
[/vba]
Но честно скажу не понял ни чего...

Подскажите, где можно более подробно почитать информацию по этому вопросу...
Или может есть другие более простые варианты?)

Заранее спасибо!
 
Ответить
СообщениеДобрый день всем!
Очень часто приходится обмениваться файлам внутри корпоративной сети между сотрудниками.
Самый быстрый вариант через контекстное меню "Отправить...", но есть один нюанс. Все это барахло заседает на почтовом сервере...
Естественно ITшник ворчит ("На кой... вам общая сеть?!" и т.д.)... а жизнь у него и без того полна забот...
А каждый раз лазить по папкам сети копировать фаил... копировать путь и писать текст в письме... это все не очень удобно...

Собственно решил упростить жизнь всем коллегам (и ITшнику тоже...)

Суть вот в чем...
Хочу в контекстное меню Windows добавить команду, которая будет вызывать макрос в Outlook, он в свою очередь будет копировать выбранный фаил в сетевую папку и создавать письмо. О том что фаил "Имя" находится там то... делать ссылку на папку...

Как добавить ярлык в контекстное меню, вопросов нет...
Как запустить конкретный маркрос через ярлык Outlook тоже вроде как вопросов нет
Цитата
C:\Program Files\Microsoft Office\Office16\outlook.exe /mMyMacroName"

Написать макрос создания письма со ссылкой и текстом тоже вроде как не проблема...

А вот как передать "имя файла" и "путь к нему" в макрос для дальнейшей обработки... вот это для меня проблема...

Нашел немного информации о команде GetCommandLineA();
Вроде как она умеет обрабатывать параметры командной строки...
[vba]
Код
Declare Function GetCommandLineA Lib "Kernel32" () As String
[/vba]
Но честно скажу не понял ни чего...

Подскажите, где можно более подробно почитать информацию по этому вопросу...
Или может есть другие более простые варианты?)

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

Автор - Benos
Дата добавления - 30.08.2021 в 14:05
Gustav Дата: Вторник, 31.08.2021, 03:52 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2807
Репутация: 1183 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Я бы предложил вместо использования 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 это выглядит точно так же (ну, или почти так же).


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеЯ бы предложил вместо использования 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
Дата добавления - 31.08.2021 в 03:52
Benos Дата: Вторник, 31.08.2021, 17:30 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013 / 2016 / 365
Gustav, За наводку спасибо... придется погрузиться в WBS (раньше не трогал)
При чем как выяснилось запуск макроса Outlook через ключ /m не поддерживается с 2003 версии.
Так что мой подход был обречен :)
 
Ответить
Сообщение Gustav, За наводку спасибо... придется погрузиться в WBS (раньше не трогал)
При чем как выяснилось запуск макроса Outlook через ключ /m не поддерживается с 2003 версии.
Так что мой подход был обречен :)

Автор - Benos
Дата добавления - 31.08.2021 в 17:30
Benos Дата: Среда, 01.09.2021, 20:00 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 45
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013 / 2016 / 365
Реализовал...
Но не могу решить проблему с кликабельной ссылкой... все портит символ "#_" в имени общей папки:(
[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 - " и все тут :(

Еще вопрос... как скрыть консольное окно :)


Сообщение отредактировал Benos - Среда, 01.09.2021, 20:02
 
Ответить
СообщениеРеализовал...
Но не могу решить проблему с кликабельной ссылкой... все портит символ "#_" в имени общей папки:(
[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 - " и все тут :(

Еще вопрос... как скрыть консольное окно :)

Автор - Benos
Дата добавления - 01.09.2021 в 20:00
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!