【发布时间】: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 是空的,永远不会得到值,但我不确定。