Excel VBA:将文件附加到没有完整文件名的电子邮件

时间:2015-07-24 14:09:21

标签: excel excel-vba outlook vba

我必须每月通过电子邮件向数百人分发文件。我正在尝试编写一个可以自动执行此操作的宏。到目前为止,我已经创建了电子邮件,自动填写正文,主题行和收据。我需要能够将每个人文件自动附加到电子邮件中。文件名包含其帐号的最后6位数字。我得到一份报告,说明我需要将文件发送到的所有帐号。无论如何,我可以使用这6个数字来搜索文件,并使用VBA附加它?

例如:

说我的帐号是S0001234,S0005678,S0009012。我的文件名是" ABC - 001234"," DEF - 005678"和" GHI - 009012"。

我会手动引用整个文件名,但它们并不总是一致的。我可以使用文件的完整路径。我可以通过仅引用VBA中的这6位来以某种方式附加文件吗?例如,搜索包含这6位数的任何文件?任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用VBA中的Dir()功能来实现您的目标。

Sub getFileName()
    Dim strFileName As String
    Dim strCustDigits As String
    strCustDigits = "123456"
    strFileName = Dir("C:\Users\lturner\Documents\*" & strCustDigits & "*")
End Sub

strFileName将返回工作簿的全名(包括文件格式扩展名)。

strCustDigits变量任一侧的星号表示文件名可以包含数字的任何一边;它将返回它在提供的文件夹中找到的第一个文件,该文件夹中包含strCustDigits变量的名称。

编辑:针对评论中提出的其他问题进行了更新。

如果您有多个文件,可以使用以下文件循环浏览文件夹(包含指定数字)中的每个文件。

Sub getFileNameLoop()
    Dim strFileName As String, strCustDigits As String
    strCustDigits = "123456"
    strFileName = Dir("C:\Users\lturner\Documents\*" & strCustDigits & "*")
    Do While Len(strFileName) > 0
        ' Perform action with file which contains the provided digits
        Debug.Print strFileName
        strFileName = Dir
    Loop
End Sub

如需进一步了解Dir()功能的工作原理,请参阅here