Запустить код Outlook VBA из R

Мне известно о возможном решении сценария оболочки / vbs. Однако я ищу решение с пакетом library(RDCOMClient).

Я посмотрел:

Некоторые попытки от меня (учитывая Public Sub dss() в ThisOutlookSession) в Outlook:

library(RDCOMClient)
> OutApp <- COMCreate("Outlook.Application")
> oa<-OutApp[["Session"]][["Accounts"]]
> OutApp$dss()
Error in .COM(x, name, ...) : 
  Cannot locate 0 name(s) dss in COM object (status = -2147352570)
> OutApp$Application$dss()
Error in OutApp$Application$dss : 
  object of type 'closure' is not subsettable
> OutApp$Run("dss")
Error in .COM(x, name, ...) : 
  Cannot locate 0 name(s) Run in COM object (status = -2147352570)

Макрос может быть просто:

Public Sub dss()
    Dim excApp As Object
    Dim excWkb As Object
    Dim excWks As Object

    Set excApp = CreateObject("Excel.Application")
    Set excWkb = excApp.Workbooks.Add()

    excWkb.SaveAs "AXX.xlsx"
    excWkb.Close
End Sub

Вы не можете вызвать Outlook vba из Excel или любого другого приложения

0m3r 15.04.2018 05:36

Согласно второй ссылке, которую я предоставил, это возможно: stackoverflow.com/questions/5096353/call-outlook-vba-from-ex‌ cel

Tlatwork 16.04.2018 08:37

@TarunLalwani: Я не уверен, что правильно вас понимаю: я столкнулся с той же проблемой, что и опубликовано выше, и не смог запустить макрос Outlook из R через RDCOMClient. Перечисленные попытки у меня тоже не сработали, ...

Tonio Liebrand 18.04.2018 20:55

@TarunLalwani. Я понял. Я сделал правку!

Tonio Liebrand 18.04.2018 23:29

У объекта Outlook.Application нет свойства Visible. Это твой вопрос?

Ryan Wildry 19.04.2018 03:47

@BigDataScientist, пожалуйста, также обновите версию Outlook, которую вы используете

Tarun Lalwani 19.04.2018 06:34

Для меня это Outlook 2016; @RyanWildry: Свойство Visible мне не актуально. Я просто хочу вызвать запуск макроса Outlook из R через RDCOMClient.

Tonio Liebrand 19.04.2018 11:09

@BigDataScientist Мне было бы интересно посмотреть документацию по этому поводу. Кроме того, ваш вопрос действительно неясен, каков ваш ожидаемый результат. Рассмотрите возможность его пересмотра.

Ryan Wildry 19.04.2018 13:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
8
1 086
2

Ответы 2

Два пути

1. В приложении Outlook

Outlook.Application не имеет видимого свойства, см. Этот пост -> http://www.vbaexpress.com/forum/archive/index.php/t-8287.html Для отображения внешнего вида вы будете использовать папку или почтовый элемент. Чтобы отобразить окно Outlook, добавьте приведенный ниже код в макрос dss. ThisOutlookSession.ActiveExplorer.Display

Также вам нужно будет поместить свой общедоступный макрос «dss» в Outlook ThisOutLookSession, чтобы иметь возможность вызывать его вне Outlook.

Затем попробуйте свой код R таким образом

    library(RDCOMClient)
    OutApp <- COMCreate("Outlook.Application")
    OutApp$Run("dss")

2. В приложении Excel

Если ваш макрос предназначен просто для создания книги Excel, почему вы делаете это в Outlook.Application, используйте Excel.Application. Создайте книгу Excel с макросом в модуле и выполните, как показано ниже.

    library(RDCOMClient)
    #Open a specific workbook in Excel:
    xlApp <- COMCreate("Excel.Application")
    xlWbk <- xlApp$Workbooks()$Open("C:\\Temp\\macro_template.xlsm")

    # this line of code might be necessary if you want to see your spreadsheet:
    xlApp[['Visible']] <- TRUE 

    # Run the macro called "dss":
    xlApp$Run("dss")

    # Close the workbook and quit the app:
    xlWbk$Close(FALSE)
    xlApp$Quit()`

Выше немного измененный код от https://stackoverflow.com/a/43222477/5871610

хм, ... прежде всего спасибо за ваши усилия. 1) Выполняется: OutApp$Run("dss") возвращает Error in .COM(x, name, ...) : Cannot locate 0 name(s) Run in COM object (status = -2147352570) , как описано в вопросе. Макрос размещается, как описано в «ThisOutlook ...», и работает правильно, если вызывается в Outlook. Сам макрос является лишь примером. Воспроизведение его в R не было бы вопросом. Спасибо!

Tonio Liebrand 19.04.2018 11:21
os<-OutApp$Session$dss() Попробуйте выполнить процедуру для Outlook.Application.Session, как указано выше.
steve biko 19.04.2018 11:53

что возвращает: Error in OutApp$Session$dss : object of type 'closure' is not subsettable. Этот код вам подходит?

Tonio Liebrand 19.04.2018 13:23

As far as I can tell, it's not possible to run macros that are stored in Outlook from other applications. Outlook lacks the Application.Run method that is available in Word and Excel.

https://social.msdn.microsoft.com/Forums/office/en-US/5a6396c4-ad24-42a4-b711-101e24254334/how-to-fire-outlook-macro-through-excel-vba?forum=exceldev

Так что оставьте здесь R вне вопроса, я могу заверить, что вы даже не можете выполнить это из самого редактора макросов Outlook, начиная с объекта Application верхнего уровня.

Я перепробовал все возможные комбинации с макросом Outlook, и боюсь, что сейчас это невозможно. Возможно, это было в более старой версии Outlook, например, 2007 года или около того, но не сейчас

Not working

Если вы можете заставить это работать в VBScript или Outlook, это будет работать и в R. Но я боюсь, вы не можете заставить его работать нигде

Возможный обходной путь, который вы могли бы сделать, может быть

  • Определите правило с точкой срабатывания и свяжите с ним макрос. Попробуйте смоделировать триггер вместо прямого вызова макроса.
  • Создайте настраиваемую кнопку на панели инструментов и посмотрите, можно ли вызвать команду из внешнего vba (это будет действительно сложно взломать)

Другие вопросы по теме