VBA-当文件名随日期不断变化时打开特定文件

VBA-Open a specific file when the file name keeps changing with the date

提问人:Keesler Water Walker 提问时间:10/19/2021 最后编辑:Keesler Water Walker 更新时间:10/21/2021 访问量:839

问:

我在 Excel 2016 中有一个宏,它目前可用于打开特定的电子邮件模板。该模板需要将表单添加为附件。我当前的代码可以打开文件的位置,但用户必须找到/选择正确的文件。

如何让 VBA 打开所需的表单而不仅仅是文件夹?我知道文件名和路径,但文件名会随着版本而不断变化。我能找到的所有线程都涉及已知的文件名和未知路径。由于文件的周期性,这是一个已知路径部分已知的文件名

前任。今天是 10 月,但最新版本是 C:\filepath\Form_Sept_2021.pdf 之前的版本已移至存档文件夹。

Sub Open_Template()

Dim myolapp As Object
Dim myitem As Object
Dim answer As Integer

answer = MsgBox("Do you still need to create the required form?", vbQuestion + vbYesNo + vbDefaultButton1, "Form Required")

Set myolapp = CreateObject("Outlook.Application")
myolapp.Session.Logon

'This is the email that requires a form attached

Set myitem = myolapp.CreateItemFromTemplate("C:\\filepath\email.oft")
myitem.Display

'This part needs modified to open the pdf file from the above example

If answer = vbYes Then
    Call Shell("explorer.exe" & " " & "C:\\filepath\" vbNormalFocus)
End If

End Sub 

VBA 文件 自动化 Excel-2016

评论

0赞 Tim Williams 10/20/2021
您需要将表格附在邮件中吗?您应该能够用于查找匹配的表单文件名,其中是名称的可变部分。Dir("C:\filepath\Form*.pdf")*

答:

0赞 Clayton 10/20/2021 #1

我认为您可以按照上面的建议在文件名中使用变量。您可以将变量指定为月份 (“Mmmm”),然后将其插入。您可以使用 if 语句来测试当前月份,然后尝试返回一个月。

0赞 Gustav 10/20/2021 #2

它可能是这样的:

Dim LastMonth   As Date
Dim Period      As String
Dim FileName    As String

' Other code.

If answer = vbYes Then
    LastMonth = DateAdd("m", -1, Date)
    Period = "Form_" & Left(Format(LastMonth, "mmmm"), 4) & Format(LastMonth, "_yyyy")
    FileName = "C:\\filepath\\" & Period & ".pdf"
    Call Shell("explorer.exe" & " " & FileName, vbNormalFocus)
End If

不确定双反斜杠。

评论

0赞 Keesler Water Walker 10/21/2021
如果我正在寻找具有确切日期窗口的东西,可能会起作用。日期不具体。如果文件今天更新,则月份就是这个月。如果有一段时间没有使用过,那么有效版本或更早版本(如果有一段时间没有使用并且需要先更新)最多可以提前 90 天。
0赞 Gustav 10/21/2021
好吧:“今天是 10 月,但最新版本是 C:\filepath\Form_Sept_2021.pdf”是您提供的信息。调整其他业务规则的代码。
0赞 Keesler Water Walker 10/21/2021 #3

您需要将表格附在邮件中吗?您应该能够使用 Dir(“C:\filepath\Form*.pdf”) 查找匹配的表单文件名,其中 * 是名称的可变部分。– 蒂姆·威廉姆斯

由于文件名称上的日期可能会根据更新时间的不同而有所不同,因此我发现我可以根据 Tim 的建议使用带有通配符的命令来帮助在目录中查找文件。然后我告诉excel打开那个文件。Dir

Dim form As String

'Same code as before up through the If/Then statement

If answer = vbYes Then
  'Find the file name where it is the only pdf in the directory starting with "Form"
    form = Dir("C:\\filepath\Form*.pdf")
  'Use Excel to open the file in the appropriate program
    ActiveWorkbook.FollowHyperlink "C:\\filepath\" & form
End If

虽然,我也可以指定程序来打开文件,其中 program.exeAcroRd32.exe 用于 Adobe 或任何其他选定的 exe 查看文件。Call Shell("program.exe" "C:\filepath\" & form)