Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 保存附件时替换文件名中的特殊字符_Vba_Outlook - Fatal编程技术网

Vba 保存附件时替换文件名中的特殊字符

Vba 保存附件时替换文件名中的特殊字符,vba,outlook,Vba,Outlook,我制作了一个脚本来自动保存附件并打印它们 Sub SaveAttachment(Item As MailItem) If Item.Class = olMail Then If Item.Attachments.Count > 0 Then Dim objAtt As Outlook.Attachments Set objAtt = Item.Attachments For Each objAt

我制作了一个脚本来自动保存附件并打印它们

Sub SaveAttachment(Item As MailItem)
    If Item.Class = olMail Then
        If Item.Attachments.Count > 0 Then
            Dim objAtt As Outlook.Attachments
            Set objAtt = Item.Attachments
            For Each objAttach In objAtt
                objAttach.SaveAsFile "C:\PDFInvoices\" & _
                        Item.Subject & "_" & objAttach.FileName '
            Next
            Set objAtt = Nothing
        End If
    End If
End Sub
包含特殊字符的附件,如
#
&
会使脚本崩溃


我想要一种用其他东西替换特殊字符的方法。

我最近构造了一个函数,可以删除字符串中的所有元音。。也许这适合你

Function REMOVEVOWELS(Txt) As String
'Removes all vowels from the Txt argument
Vowels = Array("A", "E", "I", "O", "U") 'Replace vowels with special chars

For Each a In Vowels
    Txt = Replace(Txt, a, "")
Next a
REMOVEVOWELS = Txt
 End Function
然后您可以尝试在Sub中设置文件名

FileNameNoSpecChars = REMOVEVOWELS(objAttach.FileName)
接下来,使用新变量保存文件

        For Each objAttach In objAtt
            objAttach.SaveAsFile "C:\PDFInvoices\" & _
                    Item.Subject & "_" & FileNameNoSpecChars  '
        Next

希望这能有所帮助。

我最近构造了一个函数,可以删除字符串中的所有元音。。也许这适合你

Function REMOVEVOWELS(Txt) As String
'Removes all vowels from the Txt argument
Vowels = Array("A", "E", "I", "O", "U") 'Replace vowels with special chars

For Each a In Vowels
    Txt = Replace(Txt, a, "")
Next a
REMOVEVOWELS = Txt
 End Function
然后您可以尝试在Sub中设置文件名

FileNameNoSpecChars = REMOVEVOWELS(objAttach.FileName)
接下来,使用新变量保存文件

        For Each objAttach In objAtt
            objAttach.SaveAsFile "C:\PDFInvoices\" & _
                    Item.Subject & "_" & FileNameNoSpecChars  '
        Next

希望这有帮助。

我能够使用以下代码修复此问题:

Public Sub saveAttachtoDiskRule(itm As Outlook.MailItem)
Dim strSubject As String, strExt As String
Dim objAtt As Outlook.Attachment
Dim saveFolder As String

Dim enviro As String
enviro = CStr(Environ("ngallouj"))
saveFolder = enviro & "C:\PDFInvoices\"

For Each objAtt In itm.Attachments
DateFormat = Format(Date, "yyyy-mm-dd ")

file = saveFolder & DateFormat & objAtt.DisplayName
 objAtt.SaveAsFile file
 Next

 Set objAtt = Nothing
 End Sub

我能够使用以下代码修复此问题:

Public Sub saveAttachtoDiskRule(itm As Outlook.MailItem)
Dim strSubject As String, strExt As String
Dim objAtt As Outlook.Attachment
Dim saveFolder As String

Dim enviro As String
enviro = CStr(Environ("ngallouj"))
saveFolder = enviro & "C:\PDFInvoices\"

For Each objAtt In itm.Attachments
DateFormat = Format(Date, "yyyy-mm-dd ")

file = saveFolder & DateFormat & objAtt.DisplayName
 objAtt.SaveAsFile file
 Next

 Set objAtt = Nothing
 End Sub


这不是VBA做的。您无法创建名称中包含的文件。这是一个文件系统限制。谢谢你的回答,但我知道。我想要一种方法,用其他东西替换特殊字符。在你的问题中,你说你不想重命名你的附件,并要求提供一种忽略特殊字符的方法。如果你愿意替换它们,那么…如果我可以忽略或替换特殊字符,如果我可以只替换特殊字符而不是整个字符串,那么@GSerg可能会重复。我对它感到满意。对不起,没有理解,不是VBA做的。您无法创建名称中包含的文件。这是一个文件系统限制。谢谢你的回答,但我知道。我想要一种方法,用其他东西替换特殊字符。在你的问题中,你说你不想重命名你的附件,并要求提供一种忽略特殊字符的方法。如果你愿意替换它们,那么…如果我可以忽略或替换特殊字符,如果我可以只替换特殊字符而不是整个字符串,那么@GSerg可能会重复。我对它感到满意。抱歉,未能理解存储库,但我似乎无法调用(Obj.attach和item.subject)上的函数:/I不熟悉在VBA中使用Outlook。objAttach.FileName是否不返回字符串?你有没有试过先把文件名写入一个变量,然后在函数中使用这个变量?我也没有,我试着用你的函数玩了40分钟,是的,我试过了。它确实可以使用一个简单的字符串,但是我不能在('item.subject')objAtt.FileName上调用函数。根据MS Docs,FileName应该返回一个字符串,所以我不确定为什么该函数不能使用它。item.SubjectThank也一样,但我似乎无法调用(Obj.attach和item.subject)上的函数:/I不熟悉在VBA中使用Outlook。objAttach.FileName是否不返回字符串?你有没有试过先把文件名写入一个变量,然后在函数中使用这个变量?我也没有,我试着用你的函数玩了40分钟,是的,我试过了。它确实可以使用一个简单的字符串,但是我不能在('item.subject')objAtt.FileName上调用函数。根据MS Docs,FileName应该返回一个字符串,所以我不确定为什么该函数不能使用它。item.subject的计数相同
Environ
的部分没有意义(并且只在返回空字符串时起作用),否则您将无法解决任何问题,因为
DisplayName
仍然可能包含无效字符。因为显示名称已转换为字符串。我能够保存文件,即使它包含特殊的字符,这就是问题所在,这只是一个你没有剩下的部分。由于保存正确,我可以删除特殊的Char throw my Batch脚本。
Environ
的那部分没有意义(并且只在返回空字符串时起作用),否则您将无法解决任何问题,因为
DisplayName
仍然可能包含无效字符。因为显示名称已转换为字符串。我能够保存文件,即使它包含特殊的字符,这就是问题所在,这只是一个你没有剩下的部分。因为它保存正确,所以我可以删除批处理脚本中的特殊字符。