我有一个共享邮箱,每天都会收到带有 Excel 附件的电子邮件。
我有一个强大的查询功能可以从该收件箱中的每个附件中读取 Excel 文件内容。它失败了,因为
延期未如预期。
我相信这是由于 Excel 附件的附件名称中包含“.XLS”,因此文件名为 M12345.XLS.XLS
是否有 VBA 代码或函数可以在每次收到电子邮件时从文件名中删除 .XLS?
免费的 Power Automate 不允许 Excel 转换。
(与此同时,我要求发件人检查命名约定并从文件名中删除 .xls。)
更正:该文件为html格式。我正在寻找将文件转换为 xlsx。
所以这应该可行,如果你进入 VBA 找到
ThisOutlookSession
并添加:
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim mail As Outlook.MailItem
Dim att As Attachment
Dim nameWithoutExtension As String
Dim itemID As Variant
Dim sharedMailbox As Outlook.Folder
Dim targetFolder As Outlook.Folder
' Set references to the shared mailbox and target subfolder
Set sharedMailbox = Session.Folders("[email protected]")
Set targetFolder = sharedMailbox.Folders("mastercardemails")
itemID = Split(EntryIDCollection, ",")
On Error Resume Next
For Each id In itemID
Set mail = Application.Session.GetItemFromID(id)
' Check if the email is in the target folder
If mail.Parent = targetFolder Then
If mail.Attachments.Count > 0 Then
For Each att In mail.Attachments
' Check if filename contains ".XLS.XLS"
If InStr(att.FileName, ".XLS.XLS") > 0 Then
' Strip the redundant extensions
nameWithoutExtension = att.FileName
Do While InStr(nameWithoutExtension, ".XLS.") > 0
nameWithoutExtension = Replace(nameWithoutExtension, ".XLS.", ".")
Loop
' Final check if filename ends with redundant ".XLS"
If Right(nameWithoutExtension, 4) = ".XLS" Then
nameWithoutExtension = Left(nameWithoutExtension, Len(nameWithoutExtension) - 4) & ".XLS"
End If
' Save the cleaned file
att.SaveAsFile "C:\YourFolderPath\" & nameWithoutExtension
End If
Next
End If
End If
Next
On Error GoTo 0
End Sub
显然将文件夹路径替换为正确的位置。至于您的更新:对上述内容进行更正。该文件是 html 格式,所以我希望将文件转换为 xlsx - 不知道如何在 VBA 中实现这一目标 - 我建议在文件打开后提出一个单独的问题,如何将 HTML 转换为 XLS磁盘。