【问题标题】:Call outlook macro from code从代码调用 Outlook 宏
【发布时间】:2016-09-11 14:16:47
【问题描述】:

运行下面的InvokeMember 方法时出现错误。错误是UNKNOWN NAME。我检查了拼写,它是正确的。在Outlook 我在信任中心有Enable Macros。有什么我可能会丢失以使其正常工作吗?谢谢

VB代码:

olApp.GetType().InvokeMember("Run", Reflection.BindingFlags.Default Or 
                                    Reflection.BindingFlags.InvokeMember, 
                                    Nothing, olApp, New Object() {"nameOfMacro"})

Research

【问题讨论】:

  • 为什么需要从托管代码运行 VBA 宏?为什么不就地实现所有功能?
  • @EugeneAstafiev,我是新手,起初并没有意识到这一点。如果您阅读下面的内容可以看到我就是这样做的 - 那么您的评论有什么意义?
  • 为什么需要调用 VBA 宏而不是在托管代码中实现所需的功能?

标签: vba vb.net outlook


【解决方案1】:

好吧,看来InvokeMember 行不通。答案是像在宏中那样制作代码并运行它。示例:

Private Sub MoveAttachmentToFolder()
  Dim olNs = olApp.GetNamespace("MAPI")
  Dim subFolderA = olNs.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox).Parent.Folders("subFolderA")
  Dim subFolderB = olNs.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox).Parent.Folders("subFolderB")
  For Each mi As Outlook.MailItem In subFolderA.Items
    If mi.Attachments.Count = 1 Then
      'remember interops use 1 based arrays not zero
      Dim fileName As String = "some path" & mi.Attachments(1).FileName
      mi.Attachments(1).SaveAsFile(fileName)
      mi.Move(subFolderB)
    End If
  Next
End Sub

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2023-03-30
    相关资源
    最近更新 更多