【问题标题】:Run Outlook VBA Code from R从 R 运行 Outlook VBA 代码
【发布时间】:2018-04-25 01:38:37
【问题描述】:

我知道一个潜在的 shell/vbs 脚本解决方案。 但是,我正在寻求使用 library(RDCOMClient) 包的解决方案。

我调查了:

我在 Outlook 中的一些尝试(在 ThisOutlookSession 中给出 Public Sub dss()):

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

【问题讨论】:

  • 您不能从 Excel 或任何其他应用程序调用 Outlook vba
  • 根据我提供的第二个链接,有可能:stackoverflow.com/questions/5096353/call-outlook-vba-from-excel
  • @TarunLalwani:我不确定我是否理解正确:我面临与上面发布的相同的挑战,并且无法通过 RDCOMClient 从 R 运行 Outlook 宏。上面列出的尝试对我也不起作用,...
  • @TarunLalwani。啊,我明白了。我进行了编辑!
  • @BigDataScientist,请同时更新您正在使用的 Outlook 版本

标签: r vba outlook


【解决方案1】:

两种方式

1。在 Outlook 应用程序中

Outlook.Application 没有可见属性,请参阅这篇文章 -> http://www.vbaexpress.com/forum/archive/index.php/t-8287.html 您将使用文件夹或邮件项目的显示方法来显示 Outlook 要显示 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 中复制它不是手头的问题。谢谢!
  • os&lt;-OutApp$Session$dss() 尝试对Outlook.Application.Session 执行上述过程。
  • 返回:Error in OutApp$Session$dss : object of type 'closure' is not subsettable。该代码对您有用吗?
【解决方案2】:

据我所知,无法从其他应用程序运行存储在 Outlook 中的宏。 Outlook 缺少 Word 和 Excel 中可用的 Application.Run 方法。

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 宏的组合,恐怕现在不可能。它可能在 2007 年左右的旧版 Outlook 中,但现在不是

如果您可以在 VBScript 或 Outlook 中使用它,它也可以在 R 中使用。但恐怕你不能让它在任何地方工作

您可以做的可能的解决方法可能是

  • 使用触发点定义规则并将宏与触发点相关联。尝试模拟触发器,而不是直接调用宏。
  • 在工具栏中创建一个自定义按钮,看看是否可以从外部 vba 调用命令(这将很难破解)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-23
    • 2012-08-28
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多