提问人:Keesler Water Walker 提问时间:10/19/2021 最后编辑:Keesler Water Walker 更新时间:10/21/2021 访问量:839
VBA-当文件名随日期不断变化时打开特定文件
VBA-Open a specific file when the file name keeps changing with the date
问:
我在 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
答:
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.exe 是 AcroRd32.exe 用于 Adobe 或任何其他选定的 exe 查看文件。Call Shell("program.exe" "C:\filepath\" & form)
评论
Dir("C:\filepath\Form*.pdf")
*