尝试从excel向电子邮件添加附件,其中只知道文件名的第一部分

时间:2017-11-03 15:28:50

标签: excel vba excel-vba

我有一个宏用于将自动生成的文件每天附加到电子邮件中。

文件名必须是包含日期和时间的特定格式,并且由于这是自动的,因此只会固有日期(无需手动检查文件)。

  • 我正在使用.Attachments.Addformat(date... etc.)来获取文件名的第二部分。
  • 第一部分是数字和不改变的单词
  • 但是第三部分(下面显示为“*.csv”)导致问题。

我试图像我在论坛上看到的那样替换*,但它似乎在那个例子中起作用,它对我不起作用。我错过了什么吗?

.Attachments.Add ("G:\AML, CFT & Sanctions\Sanctions\KYC6 Person & Organsation Reports\" & Format(Date, "yyyy") & "\" & Format(Date, "mmmm") & "\65436546_Test_" & Format(Date, "yyyymmdd") & "*.csv")

2 个答案:

答案 0 :(得分:1)

正如@Kostas建议的那样,您可以通过带有Dir function的glob查找文件。请注意,它只返回文件名,没有路径。

当没有或多个文件与模式匹配时,请处理此案例。 (我的代码在这些情况下会产生错误;错误代码来自http://www.halfile.com/vb.html。)

Dim date_ As Date, pattern, dir_, filename As String: date_ = Date

dir_ = "C:\Users\Ivan\Documents\test & test\" & _
       Format(date_, "yyyy\\mmmm\\")
pattern = "65436546_Test_" & Format(date_,"yyyymmdd") & "*.csv"

filename = Dir(dir_ & pattern)
If Len(filename) = 0 Then Error 53 'File not found
If Len(Dir()) <> 0 Then Error 58 'More than one matching file

<email>.Attachments.Add(dir_ & filename)

答案 1 :(得分:0)

首先构建文件路径,测试它并在它有效时附加它。正如评论中所建议的那样,您需要提供具体的文件名,不允许使用通配符。

Dim path_ As String, name_ As String, file_ As String

path_ = "C:\Some folder\"
name_ = "*.csv"

file_ = Dir(strPath & name_)

If Len(Dir(path_ & file_)) > 0 Then
    .Attachments.Add path_ & file_
End If