2016-05-15 4 views
1

Я получаю сообщение об ошибке при запуске метода InvokeMember ниже. Ошибка UNKNOWN NAME. Я проверил правописание, и это правильно. В Outlook У меня есть Enable Macros в центре доверия. Есть ли что-то, что я могу потерять, чтобы заставить это работать? Благодаря кодВызов макроса вызова из кода

VB:

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

Research

+0

Зачем вам нужно запускать макрос VBA из управляемого кода? Почему бы вам не реализовать всю функциональность на месте? –

+0

@EugeneAstafiev, я новичок в этом и не понимал этого вначале. Если вы читаете ниже, можете видеть, что я сделал именно это - так в чем смысл вашего комментария? – OneFineDay

+0

Зачем вам нужно вызывать макрос VBA вместо реализации требуемой функциональности в управляемом коде? –

ответ

0

Ну, кажется, 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 
Смежные вопросы