【问题标题】:How to save attachments and rename it如何保存附件并重命名
【发布时间】:2020-06-24 15:43:59
【问题描述】:

我在让我的代码正常工作时遇到问题。这是我第一次运行 VBA 脚本。我有大量来自传真机的电子邮件,我希望能够下载附件,将文件重命名为主题行,然后将它们存储在我的计算机上。

我的第一次尝试是编写一个宏以便我可以手动执行它,但在做了一些研究之后,我的印象是我想让规则起作用。

这是我第一次尝试 VBA,所以我什至不确定我是否正确运行了宏或规则脚本,但我觉得我只是在代码中遗漏了一些东西。有什么想法吗?

Public Sub saveAttachtoDiskRule(itm As Outlook.MailItem)

    Dim objAtt As Outlook.Attachment
    Dim saveFolder As String
    Dim fso As Object
    Dim oldName

    Dim file As String
    Dim DateFormat As String
    Dim newName As String

    Dim enviro As String
    enviro = CStr(Environ("USERPROFILE"))
    saveFolder = enviro & "\" & "\destinationfolder\"

    Set fso = CreateObject("Scripting.FileSystemObject")

     For Each objAtt In itm.Attachments
     file = saveFolder & objAtt.DisplayName
     objAtt.SaveAsFile file

     Set oldName = fso.GetFile(file)
     newName = itm.Subject
     oldName.Name = newName

     Set objAtt = Nothing
     Next

     Set fso = Nothing
End Sub

【问题讨论】:

  • On Error Resume Next 这一行有点抑制所有错误。删除它并再次尝试运行代码,以便正确诊断代码。
  • 删除 For Each 会引发错误。我删除了 On Error Resume Next 并且发生了同样的事情,我运行脚本并且它运行并且什么也不做,没有错误。
  • 请通过设置断点(F9 键)跟踪脚本,然后反复按 F8 键并告诉我们它的行为方式。在此期间,您可以将鼠标指针悬停在变量上方以检查其内容。
  • 您的变量 saveFolder 结合了环境配置文件和路径,因此它很可能是 c:\users\\C:destination。你做的文件 = saveFolder & objAtt.DisplayName 所以它将是 c:\users\\C:destination 你仍然需要一个路径分隔符所以 saveFolder & "\" & objAtt.DisplayName。那是在你修复 saveFolder 路径之后
  • 好的,我相信我已经修复了文件路径。我现在在 saveFolder 中获得了正确的值,但是使用 F8 单步执行程序会因“file = saveFolder & objAtt.DisplayName”处的运行时错误 434 而挂起。我相信 objAtt.DisplayName 是空的,永远不会得到值,但我不确定。

标签: vba outlook


【解决方案1】:

这里是简单的规则脚本

Public Sub saveAttachtoDisk(olItem As Outlook.MailItem)
    Dim olAttachment As Outlook.Attachment
    Dim SaveFolder As String

    SaveFolder = "c:\temp\"

    For Each olAttachment In olItem.Attachments
        olAttachment.SaveAsFile SaveFolder & "\" & olAttachment.DisplayName
        Set olAttachment = Nothing
    Next
End Sub

Environ Function

Environ 函数可让您获取当前运行代码的计算机的 Windows 环境变量,例如 user nametemporary folder 的名称

例子

用户的个人资料文件夹示例是

Environ("USERPROFILE") & "\Documents\Temp\"
result
Windows Vista/7/8:  C:\Users\Omar\
Windows XP:         C:\Documents and Settings\Omar\

“所有用户”或“通用”配置文件文件夹

Environ("ALLUSERSPROFILE")

临时文件夹示例是

Environ("TEMP") (or Environ("TMP") - is the same)
result: C:\Users\omar\AppData\Local\Temp

【讨论】:

  • 我能够让它工作,这意味着它绝对是我的代码并且没有错误地运行规则,所以这是一个开始。您的代码保存了文件但没有重命名它,所以我目前正在处理它。我尝试了一些快速修改无济于事,所以我会继续尝试。
  • 所以我能够让我的代码执行与您的代码完全相同的操作,并且我在顶部修改了原始代码以反映我现在拥有的内容。它仍然不会使新文件名成为电子邮件的主题行。
  • 别担心,伙计。我真的让它工作了。代码很好,我只需要在文件名中添加 .pdf 扩展名,它现在就可以工作了。感谢您的帮助!
猜你喜欢
  • 2019-05-12
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
相关资源
最近更新 更多