正在Access中创建Outlook收件箱电子邮件表



更新:

下面的当前代码符合建议的SQL构造:SqlString=中的错误

运行时错误"3011":Microsoft Access数据库引擎找不到对象"。请确保该对象存在,并正确拼写其名称和路径名。如果"不是本地对象,请检查网络连接或与服务器管理员联系。

值得注意的是,我正在使用美国空军的非保密网络系统,并通过CAC登录。

Sub InboxImport
Dim SqlString As String
Dim ConnectionString As String
Dim EmailTableName As String
Dim UserIdNum As String
Dim EmailAddr As String
Dim olNS As Outlook.NameSpace
Dim olFol As Outlook.Folder`
Set ol = CreateObject("Outlook.Application")
Set olNS = ol.GetNamespace("MAPI")
Set olFol = olNS.GetDefaultFolder(olFolderInbox)
EmailTableName = "MyInbox" 'My table name
UserIdNum = Environ("USERNAME")  '1277523A... acct #
EmailAddr = olFol.Parent.name 'user's email address
ConnectionString = "Outlook 9.0;MAPILEVEL=" & EmailAddr & "|;PROFILE=Default Outlook Profile;TABLETYPE=0;TABLENAME=MyInbox;COLSETVERSION=12.0;DATABASE=C:Users" & UserIdNum & "AppDataLocalTemp"
SqlString = "SELECT [From] As [Sender], [Sender Name] As SenderName, [Subject Prefix] & [Normalized Subject] As Subject, [Contents] As [Body], [Received] As [ReceivedTime]" & _
" INTO [Email]" & _
" From [" & ConnectionString & "].[MyInbox]"
DoCmd.RunSQL SqlString
end sub

原始文本:

我正在尝试将默认的Outlook收件箱电子邮件拉入Access中的表中。我可以使用该向导成功检索电子邮件,填充各个列,并通过名为"收件箱"的访问表查看我当前的收件箱。

我的Access数据库将由几名员工同时使用,我不能要求他们为登录的每台不同的计算机运行向导。

我正在使用从页面中间复制的代码。。。"将Outlook电子邮件导出到Access表-VBA"。

我正在尝试使用

DoCmd.RunSQL "INSERT INTO [Email] " & _
"([Sender], [SenderName], [Subject], [Body], [ReceivedTime])" & _
"VALUES " & _
"'" & objProp(i).Sender & "', '" & _     'ERROR!
objProp(i).SenderName & "', " & _  'ERROR!
objProp(i).Subject & "', '" & _
objProp(i).Body & "', '" & _       'ERROR!
objProp(i).ReceivedTime & "';"

该代码在查看除.ReceivedTime.Subject之外的任何MailItem属性时出错,并且这些属性会抛出错误。。。

运行时错误"287":应用程序定义或对象定义错误

对于我的参考文献-数据库:

  1. Visual Basic For Applications
  2. Microsoft Access 15.0对象库
  3. OLE自动化
  4. Microsoft Office 15.0 Access数据库引擎对象库
  5. Microsoft Internet控件
  6. Microsoft Outlook 15.0对象库

我强烈建议您在从Outlook导入邮件时不要采取尝试过的方法。Access可以在SQL查询中使用Outlook数据文件。当然,您可以使用VBA执行这些查询。但它将更加优化。

诀窍在于获得正确的连接字符串。您可以使用以下过程轻松获取连接字符串:

  1. 在"外部数据"->"更多"->"outlook"文件夹下创建一个链接表到所需的outlook文件夹,选择链接表,选择文件夹
  2. 使用Debug.Print CurrentDb.TableDefs!MyLinkedOutlookFolder.Connect获取连接字符串,使用Debug.Print CurrentDb.TableDefs!MyLinkedOutlookFolder.SourceTableName获取外部表名
  3. 使用您获得的变量执行以下查询:

    SELECT [From] As [Sender], [Sender Name] As SenderName, [Subject Prefix] & [Normalized Subject] As Subject, [Contents] As [Body], [Received] As [ReceivedTime]
    INTO [Email]
    FROM [ThatConnectionString].[ThatSourceTableName]
    

示例连接字符串:

Outlook 9.0;MAPILEVEL=me@example.com|;PROFILE=Default Outlook Profile;TABLETYPE=0;TABLENAME=Inbox;COLSETVERSION=12.0;DATABASE=C:UsersMeAppDataLocalTemp

样品来源表名称:

Inbox

这就是你所需要的,不需要复杂的VBA。

最新更新