2015-10-14 219 views
0

我正在将一些Outlook VBA \宏转换为加载项。 到目前为止,我没有很多运气将此代码传递给VS2015 w \ Office Dev Tools。Outlook VBA 宏转换为加载项

我创建了一个Ribbon \ group \按钮\我可以在Outlook中看到它,一切看起来不错,但我收到一个错误。

--ORIGINAL MACRO--

Sub Request() 
    Set myOlApp = CreateObject("Outlook.Application") 
    Set myNameSpace = myOlApp.Application.GetNamespace("MAPI") 
    Set objFolder = Session.GetDefaultFolder(olPublicFoldersAllPublicFolders).Folders("Shared Documents") 
    Set myItem = objFolder.Items.Add("IPM.Note.Request") 
     myItem.Display 
End Sub 

我看到这组将不再允许所以他们都被定义。

这条线似乎是问题所在。 Session和\或GetDefaultFolder返回Null并导致运行时异常。

错误 - “System.NullReferenceException” -

objFolder = Session.GetDefaultFolder(olPublicFoldersAllPublicFolders).Folders("Shared Documents") 

从VS的建议是使用子“新”与其他几个人说似乎并不适用一起。

请帮忙。 :-) 似乎我得到了混合了VS错误解决建议的各种编程类型。

谢谢。克里斯

+0

你可以检查它是Session还是GetDefaultFolder?如果它是Session,则可以尝试用myOlApp.Session替换上面的Session引用。 – DanL

+0

好吧,我给了一个尝试,但我收到了同样的结果。在交换OlApp.Session后,我得到一个带下划线的“olPublicFoldersAllPublicFolders”--- objFolder = myOlApp.Session.GetDefaultFolder(olPublicFoldersAllPublicFolders).Folders(“共享文档”)-----相同的空引用,我明白为什么它会是为空,因为在Outlook会话向程序提供路径之前未获取该值。 – CWB

+0

为了清楚我在做什么:我试图打开一个存储在所有公共文件夹\共享文档\ FormName中的自定义窗体 - 宏做这个很好,但我希望它是一个附加组件,因此我可以将它作为一个包与其他可用的函数一起部署。 – CWB

回答

0

好吧,它的工作喵。 发现万一有人这样方便的花花公子网页需要一些指点: https://support.microsoft.com/en-us/kb/313800

当你创建它在VB.Net被编码为Outlook加载项项目

谢谢DANL为输入,它让我思考并再次搜寻。

Private Sub Button1_Click(sender As Object, e As RibbonControlEventArgs) Handles Button1.Click 

    Dim objOutlook As Outlook._Application 
    objOutlook = New Outlook.Application() 
    Dim objNS As Outlook._NameSpace = objOutlook.Session 
    Dim objFolder As Outlook.MAPIFolder = 
     objNS.GetDefaultFolder(Outlook.OlDefaultFolders.olPublicFoldersAllPublicFolders).Folders("Shared Documents") 

    Dim myItem = objFolder.Items.Add("IPM.Note.CustomFormName") 
    myItem.Display() 

End Sub