【发布时间】:2018-08-03 04:51:21
【问题描述】:
更新:
以下当前代码符合推荐的 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 & "\AppData\Local\Temp\"
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 表查看我当前的收件箱。
我的 Access 数据库将被多个员工同时使用,我不能要求他们为他们登录的每一台不同的计算机运行该向导。
我正在使用从页面中间复制的代码..."Export Outlook Emails to Access table - 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 应用程序
- Microsoft Access 15.0 对象库
- OLE 自动化
- Microsoft Office 15.0 Access 数据库引擎对象库
- Microsoft Internet 控件
- Microsoft Outlook 15.0 对象库
【问题讨论】:
-
我建议单步执行代码(使用 F8)并使用监视窗口和/或对象浏览器检查 objProp(i) 对象,以了解正在发生的事情。以下是 Chip Pearson 在 Debugging VBA 上提供的更多信息。
-
您确定 MyInbox 是 foreign 表名,所以这就是在 Outlook 中调用文件夹的方式,没有空格? Email 是此处数据库中的表名。
-
@ErikvonAsmuth,有没有办法获取发件人的电子邮件地址? (或发件人的任何其他联系人属性?即电话号码、别名)