vb.net - Outlook 加载项错误
问题描述
我正在创建一个加载项,让用户单击一个按钮,它会打开一封新电子邮件并自动填充字段,并让他们在发送电子邮件之前编辑正文。
我收到一个不允许我使用的错误Outlook.Application
错误 BC30111 'Application' 是接口类型,不能用作表达式。
我究竟做错了什么?
我的代码:
Imports Microsoft.Office.Interop.Outlook
Imports Microsoft.Office.Tools.Ribbon
Public Class Ribbon1
Private olMailItem As Object
Private olImportanceHigh As OlImportance
Private Sub Ribbon1_Load(ByVal sender As System.Object, ByVal e As RibbonUIEventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(sender As Object, e As RibbonControlEventArgs) Handles Button1.Click
Dim obApp As Object
Dim NewMail As MailItem
obApp = Outlook.Application
NewMail = obApp.CreateItem(olMailItem)
'You can change the concrete info as per your needs
With NewMail
.Subject = " Test Email"
.To = "example@mail.com"
.Body = "This is just a test email template with Outlook VBA" & vbCrLf & vbCrLf & vbCrLf & "Yours Truly," & vbCrLf & vbCrLf & "John Smith"
.Importance = olImportanceHigh
.Display
End With
obApp = Nothing
NewMail = Nothing
End Sub
End Class
解决方案
您的 VSTO 加载项有一个入口点。那将是一个Partial Class
可能调用ThisAddIn
的 , 使用诸如ThisAddIn_Startup
and之类的方法ThisAddIn_Shutdown
(根据本文)。
该类继承了一个公开Application
类型属性的类Outlook.Application
- 这是您要使用的对象。
Ribbon1
因此,当您在启动时创建它时将该对象传递给您的实例:
Private Sub ThisAddIn_Startup(object sender, System.EventArgs e) Handles Something(?).Startup
Dim ribbon As Ribbon1 = New Ribbon1(Me.Application)
' ...
End Sub
为您的类公开一个构造函数Ribbon1
,以便您可以传递Application
实例:
Private olApp As Outlook.Application
Public Sub New(ByVal app As Outlook.Application)
olApp = app
End Sub
现在删除您的本地obApp As Outlook.Application
声明,并改用从构造函数传递的实例。
编辑:从头开始。通读我链接到的文章,有一个Application
现成的全局实例 - 只需使用它:
obApp = Globals.ThisAddIn.Application
这样,您的Ribbon1
类就不需要Application
通过其构造函数接收实例。虽然,使用全局变量是否是更好的设计是非常有争议的。
推荐阅读
- spring-boot - 使用源过滤获取 Spring Data Elasticsearch Query 中的所有非完整字段
- json - Azure ARM 模板部署。未提供模板参数的值
- flutter - 如何点击原生 iOS 弹出窗口以允许通知。(颤振集成测试)
- arrays - 从文本中提取不同的元素
- node.js - Mongoose:模式数组路径的值无效,得到值“未定义”
- javascript - React Native 中的组件不同步
- javascript - 如何将对象值从 Javascript 文件传递到 HTML 文件
- java - 打印出来的结果是什么意思。Java 中的 System.nanoTime()
- flutter - 堆叠多个图标以使 IconButton 颤动
- windows - 如何打开 IOCTL 的设备驱动程序