英文:
Outlook VSTO Add-in VB - How to read the subject line of an email opened in the inbox?
问题
我已创建了一个插件,允许用户将有关电子邮件的信息添加到 SQL 表中。
我目前正在尝试实现一个提高用户体验的功能,它将从收件箱中打开的电子邮件的主题行读取到用户表单的相关字段中。我尝试了几种方法,但都没有成功。
这是我当前的代码:
Dim newMail As Outlook.MailItem
Dim oInspector As Outlook.Inspector
oInspector = Microsoft.Office.Interop.Outlook.Application.ActiveInspector()
newMail = oInspector.CurrentItem
[初始化表单的其他部分]
If oInspector Is Nothing Then
MsgBox("没有活动检查员")
Else
newMail = oInspector.CurrentItem
With AddEmailSubjectTextBox
.Text = newMail.Subject
End With
End If
除了抛出的"reference to a non-shared member requires an object reference"错误之外,我认为我的问题的一部分是 ActiveInspector 方法和 CurrentItem 应该表示一个在弹出窗口中编写但尚未发送的电子邮件。
英文:
I have created an add-in that allows a user to add information concerning an email into a SQL Table.
I am currently trying to implement a quality-of-life feature that will read the subject line of an opened email from the inbox into the relevant field of the user form. I have tried several methods and have had no success.
This is what I have currently:
Dim newMail As Outlook.MailItem
Dim oInspector As Outlook.Inspector
oInspector = Microsoft.Office.Interop.Outlook.Application.ActiveInspector()
newMail = oInspector.CurrentItem
[Initializing other parts of form]
If oInspector Is Nothing Then
MsgBox("No Active Inspector")
Else
newMail = oInspector.CurrentItem
With AddEmailSubjectTextBox
.Text = newMail.Subject
End With
End If
Besides the "reference to a non-shared member requires an object reference" error that is thrown, I believe part of my issue is that the ActiveInspector method and CurrentItem are supposed to represent an email that is being written in a pop-up window and has yet to be sent.
答案1
得分: 0
以下是翻译好的部分:
应处理有效的 Outlook `Application` 实例的以下代码行:
oInspector = Microsoft.Office.Interop.Outlook.Application.ActiveInspector()
但你试图在类型声明上调用一个方法。在 VBA 环境中,你可以使用全局的 `Application` 属性。例如:
oInspector = Application.ActiveInspector()
在基于 VSTO 的加载项中,你可以使用 `ThisAddin` 类的 `Application` 属性。你还可以使用 `Globals` 命名空间,它允许在加载项的任何代码中访问应用程序实例,详细信息请参见 [Office 项目中对象的全局访问][1]。对于 VSTO 加载项,代码应如下所示:
Dim newMail As Outlook.MailItem
Dim oInspector As Outlook.Inspector
oInspector = Globals.ThisAddIn.Application.ActiveInspector()
newMail = oInspector.CurrentItem
[初始化表单的其他部分]
If oInspector Is Nothing Then
MsgBox("没有活动检查员")
Else
newMail = oInspector.CurrentItem
With AddEmailSubjectTextBox
.Text = newMail.Subject
End With
End If
请注意,检查员窗口中打开的项可能是不同的 - 预约、任务、便笺、文档等。因此,还有意义添加检查员窗口中打开的项类型的检查。
最后,如果你需要获取 `Explorer` 窗口中当前选定的项,你需要使用 [Selection][2] 属性
[1]: https://learn.microsoft.com/en-us/visualstudio/vsto/global-access-to-objects-in-office-projects?view=vs-2022&tabs=csharp
[2]: https://learn.microsoft.com/en-us/office/vba/api/outlook.explorer.selection
英文:
The following line of code should deal with a valid Outlook Application
instance:
oInspector = Microsoft.Office.Interop.Outlook.Application.ActiveInspector()
But you are trying to call a method on a type declaration. In the VBA environment you can use the global Application
property. For example:
oInspector = Application.ActiveInspector()
In VSTO based add-ins you can use the Application
property of the ThisAddin
class. You may also use the Globals
namespace which gives access to the Application instance anywhere in the code of your add-in, see Global access to objects in Office projects for more information. For VSTO add-ins the code should look like that:
Dim newMail As Outlook.MailItem
Dim oInspector As Outlook.Inspector
oInspector = Globals.ThisAddIn.Application.ActiveInspector()
newMail = oInspector.CurrentItem
[Initializing other parts of form]
If oInspector Is Nothing Then
MsgBox("No Active Inspector")
Else
newMail = oInspector.CurrentItem
With AddEmailSubjectTextBox
.Text = newMail.Subject
End With
End If
Be aware, the item opened in the inspector window can be different - appointment, task, note, document. So, it also makes sense to add a check for the item type opened in the inspector window.
Finally, if you need to get the currently selected item in the Explorer
window, you need to use the Selection property
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论