使用 VBA 从 Outlook 2010 保存 .XLSX 附件

2024-01-03

我们使用 Outlook 2010 并接收带有 Excel 附件的电子邮件。我们手动将附件保存在我们在网络驱动器上的分区文件夹中创建的子文件夹中。

我很好奇的是是否有可能

  1. 使用代码检查传入的电子邮件以查看它们是否有附件,
  2. 然后检查附件是否为 .XLSX,
  3. 如果是这样,请打开附件,检查特定单元格的值,
  4. 然后将帐户名和帐号存储为字符串和变量
  5. 然后使用它们在适当的 Windows 目录中创建子文件夹。

** 我忘了发布到目前为止我所做的事情。我相信布雷特回答了我的??,但也许其他人可以使用它的片段。

Private Sub cmdConnectToOutlook_Click()
Dim appOutlook As Outlook.Application
Dim ns As Outlook.Namespace
Dim inbox As Outlook.MAPIFolder
Dim item As Object
Dim atmt As Outlook.Attachment
Dim filename As String
Dim i As Integer

Set appOutlook = GetObject(, "Outlook.Application")
Set ns = appOutlook.GetNamespace("MAPI")
Set inbox = ns.GetDefaultFolder(olFolderInbox)
i = 0 

If inbox.Items.Count = 0 Then
    MsgBox "There are no messages in the Inbox.", vbInformation, _
           "Nothing Found"
    Exit Sub
End If

For Each item In inbox.Items
  For Each atmt In item.Attachments

    If Right(atmt.filename, 4) = "xlsx" Then
        filename = "\\temp\" & atmt.filename
        atmt.SaveAsFile filename
       i = i + 1
    End If

  Next atmt
Next item

MsgBox "Attachments have been saved.", vbInformation, "Finished"

Set atmt = Nothing
Set item = Nothing
Set ns = Nothing

End Sub


话虽如此,这里很长,这是一种方法。我的代码来自用于将另一封电子邮件中的 Outlook 电子邮件中的附件(Excel 文件)保存为附件的 VBA 代码 https://stackoverflow.com/q/7890612/641067可能也有兴趣

您将需要更新文件路径以及要打开的文件的单元格范围

在我的测试中,我向自己发送了一条消息,其中包含一个 pdf 文件和一个 Excel 工作簿,第一张纸的 A1 中包含“bob”

下面的代码找到excel文件,保存它,打开它,创建一个目录c:\temp\bob然后杀死保存的文件

Private Sub Application_NewMailEx _
    (ByVal EntryIDCollection As String)

'Uses the new mail techniquer from http://www.outlookcode.com/article.aspx?id=62

Dim arr() As String
Dim lngCnt As Long
Dim olAtt As Attachment
Dim strFolder As String
Dim strFileName As String
Dim strNewFolder
Dim olns As Outlook.NameSpace
Dim olItem As MailItem
Dim objExcel As Object
Dim objWB As Object

'Open Excel in the background
Set objExcel = CreateObject("excel.application")

'Set working folder
strFolder = "c:\temp"

On Error Resume Next
Set olns = Application.Session
arr = Split(EntryIDCollection, ",")
On Error GoTo 0

For lngCnt = 0 To UBound(arr)
    Set olItem = olns.GetItemFromID(arr(lngCnt))
    'Check new item is a mail message
    If olItem.Class = olMail Then
        'Force code to count attachments
        DoEvents
        For Each olAtt In olItem.Attachments
            'Check attachments have at least 5 characters before matching a ".xlsx" string
            If Len(olAtt.FileName) >= 5 Then
                If Right$(olAtt.FileName, 5) = ".xlsx" Then
                    strFileName = strFolder & "\" & olAtt.FileName
                    'Save xl attachemnt to working folder
                    olAtt.SaveAsFile strFileName
                    On Error Resume Next
                    'Open excel workbook and make a sub directory in the working folder with the value from A1 of the first sheet
                    Set objWB = objExcel.Workbooks.Open(strFileName)
                    MkDir strFolder & "\" & objWB.sheets(1).Range("A1")
                    'Close the xl file
                    objWB.Close False
                    'Delete the saved attachment
                    Kill strFileName
                    On Error Goto 0
                End If
            End If
        Next
    End If
Next
'tidy up
Set olns = Nothing
Set olItem = Nothing
objExcel.Quit
Set objExcel = Nothing
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 VBA 从 Outlook 2010 保存 .XLSX 附件 的相关文章

  • 如果 Excel 中的表格包含单元格引用,如何对其进行排序?

    我在工作表 1 中有一个 Excel 数据表 它引用了许多其他工作表中的各种不同单元格 当我尝试对工作表进行排序或过滤时 引用会随着单元格的移动而发生变化 但是 我不想手动进入每个单元格并在各处插入 符号 因为有些引用是连续的 我可能想稍后
  • 跳过行:将数据从 SSIS 导出到 Excel 文件

    我正在尝试使用 SSIS 将数据从 SQL Server 数据库导出到 Excel 文件中 我希望从第 6 行插入数据 第 5 行有标题 我可以映射标题名称Excel 目标编辑器 通过编写 SQL 命令到 SQL 表头 SELECT FRO
  • 如何在 C# 中使用 Outlook MAPI 打开 .eml 文件?

    我有一个 C 应用程序 可以读取 msg 文件并提取正文和附件 但是当我尝试加载 eml 文件时 应用程序崩溃了 我正在加载这样的文件 MailItem mailItem MailItem outlookApp CreateItemFrom
  • 将用户定义的表类型从 VBA 传递到 SQL

    我的任务是创建一个 Excel 电子表格作为 SQL 数据库的前端 以及一些对数据执行复杂计算的 C 我的老板想要前端作为电子表格 而计算对于 VBA 来说似乎太复杂了 目前 检索数据集的存储过程运行良好 然后 用户将在 Excel 中编辑
  • Excel 的 VBA - 如何检查范围的交集不为空

    我有两个问题 1 如何检查交集或范围是否不为空 例如 如果我想检查它是否为空 我会写 if application intersect r1 r2 is nothing 但有什么东西是否定虚无的吗 例如 并非没有任何事情不起作用 2 如何比
  • 在 Excel 中打开文件而不重新计算 NOW()

    在 Excel 2010 2011 和 2013 尝试了所有三个 中 以只读方式打开文件仍然会重新计算 NOW 有没有办法让excel在打开文件时不重新计算 最简单的方法是将自动 默认 计算选项切换为手动 update 首先打开一个空白的新
  • 如何区分列表框中显示的文本和实际值?

    我有一个带有多选选项的列表框 我使用以下方式填充它addItem功能 我在 Google 上找不到任何有关此内容的文章 但我需要区分列表框中显示的文本和实际值 例如 shown hiddenvalue monday A1 tuesday A
  • 如何检查python xlrd库中的excel文件是否有效

    有什么办法与xlrd库来检查您使用的文件是否是有效的 Excel 文件 我知道还有其他库可以检查文件头 我可以使用文件扩展名检查 但为了多平台性我想知道是否有任何我可以使用的功能xlrd库本身在尝试打开文件时可能会返回类似 false 的内
  • 将单元格内的任何单词与单元格范围内的任何单词相匹配

    我有一个短语列表 我想检查是否有任何新术语与该列表部分单词匹配 我正在寻找一个代码来在列表上实现模糊匹配 以返回具有紧密匹配的单元格 示例数据 Phrases Terms real term new words great work new
  • 如何在 iOS (safari) 中获取 mailto 链接以打开 Outlook 应用程序?

    我注意到 在使用 Outlook 应用程序且未配置本机邮件应用程序的 iPhone 用户上 当他们单击 mailto 链接时 系统会提示他们在 iOS 中创建新的电子邮件帐户 而不是打开 Outlook 应用程序 是否可以将 Outlook
  • 使用 VBA 将 Excel 工作表导入 Access

    我正在尝试使用一些简单的 VBA 代码将 Excel 电子表格导入到 Access 中 我遇到的问题是 Excel 文件中有 2 个工作表 我需要导入第二个工作表 是否可以在VBA代码中指定所需的工作表 Private Sub Comman
  • 如何使用Excel的墨迹工具添加手写签名?

    我想在我公司的一些表格中添加手写数字签名 目标是选择一个文档 添加签名 通过使用绘图板 这可以使用 Excel 的墨水工具完成 并将文件作为 PDF 存储在服务器中 这将消除打印然后扫描表格以获得签名的必要性 我使用 Excel 作为文件操
  • 从 Excel VBA 调用 Bloomberg BQL 查询

    出于复杂的原因 我想在 VBA 中自动调用 Bloomi BQL 查询 我正在从 VBA 脚本更改 Excel 工作表中 BQL Query 公式的输入 并调用 Application Calculate 来运行查询 显示更改为 N A 请
  • 将整个工作表复制到 Excel 2010 中的新工作表

    我发现了类似的问题 涉及复制一个工作簿中的整个工作表并将其粘贴到另一个工作簿 但我感兴趣的是简单地复制整个工作表并将其粘贴到同一工作簿中的新工作表 我正在将 2003 xls 文件转换为 2010 xlsm 用于在工作表之间复制和粘贴的旧方
  • 如何将工作表和范围作为变量传递?

    我想在子例程之间传递工作表的名称和范围 以下抛出 下标超出范围 错误 Sub This x Sheet1 y D3 MsgBox x Range y Value End Sub This is 我的项目资源管理器的示例 https i st
  • 自动电子邮件生成无法解析多个收件人

    我有一个 VBA 脚本 可以创建并保存草稿电子邮件 为了添加收件人 它从链接的 Excel 表中提取一个字符串并将其添加到 Recipients 对象中 对于只有单一收件人的电子邮件 这就像一个魅力 用户所需要做的就是打开草稿 花 5 秒钟
  • 将不连续范围从一张纸复制到另一张纸

    VBA 新手 也是第一次发帖 可能会问一个非常基本的问题 然而 我在互联网上 或在我拥有的参考书中 没有找到答案 所以我很困惑 如何将一张纸中的一堆间隔开的列放入另一张纸中 但没有间隙 例如 我想从这样的工作表中复制标记为 x 的单元格 x
  • 根据用户名获取广告详细信息

    我有一个代码可以从 AD 检索用户的详细信息 例如电子邮件地址 电话号码等 我当前使用的代码是 Set objSysInfo CreateObject ADSystemInfo strUser objSysInfo UserName msg
  • 在 BIRT 中导出的 Excel 中表格单元格的文本换行

    我在 eclipse 中使用 BIRT 4 4 1 来生成报告 我想包装表头的文本 它在网络查看器中工作正常 但是当我导出到 Excel 时 表单元格文本在一行中 并且文本也溢出 我不想使单元格宽度等于内容 我想根据其容器宽度来换行文本 我
  • 如果不是,则必须删除单元格的第一个字符 #3Created 循环永远不会结束

    所以基本上 我需要删除主键字段中第二位数字不为 3 的所有记录 例如可以如下所示 39001 或者没有 3 我想要的是所有以非 3 开头的单元格 它们的行都被删除我想出了以下代码 它删除了所有单元格 但宏永远不会停止运行 Sub keep3

随机推荐