更新:
下面的当前代码符合建议的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":应用程序定义或对象定义错误
对于我的参考文献-数据库:
- Visual Basic For Applications
- Microsoft Access 15.0对象库
- OLE自动化
- Microsoft Office 15.0 Access数据库引擎对象库
- Microsoft Internet控件
- Microsoft Outlook 15.0对象库
我强烈建议您在从Outlook导入邮件时不要采取尝试过的方法。Access可以在SQL查询中使用Outlook数据文件。当然,您可以使用VBA执行这些查询。但它将更加优化。
诀窍在于获得正确的连接字符串。您可以使用以下过程轻松获取连接字符串:
- 在"外部数据"->"更多"->"outlook"文件夹下创建一个链接表到所需的outlook文件夹,选择链接表,选择文件夹
- 使用
Debug.Print CurrentDb.TableDefs!MyLinkedOutlookFolder.Connect
获取连接字符串,使用Debug.Print CurrentDb.TableDefs!MyLinkedOutlookFolder.SourceTableName
获取外部表名 -
使用您获得的变量执行以下查询:
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。