我想在文件TFM_20150224_084502中打开并复制工作表,此文件每天都有不同的日期和时间。我已经开发了代码,直到打开日期格式,但我无法开发以时间格式打开它。
它的代码是什么?
Sub OpenCopy ()
Dim directory As String, fileName As String, sheet As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
directory = "z:\FY1415\FI\Weekly Report\Astry"
fileName = "TFM_" & Format(Date, "yyyymmdd") & ".xls"
Workbooks.Open "z:\FY1415\FI\Weekly Report\Astry\" & "TFM_" & Format(Date, "yyyymmdd") & ".xls"
Sheets("MSP").Copy After:=Workbooks("Generate Report 2.xlsm").Sheets("PlanOEE")
ActiveSheet.Name = "MSP"
End sub
答案 0 :(得分:1)
当您将代码发布到帖子中时,似乎某些换行符已经消失,但假设您已经意识到这一点,我认为您遇到的主要问题是找出要打开的文件的名称?
VBA Dir
-function允许您搜索文件夹中的文件,并允许您在搜索中包含通配符。我已经在你的sub中包含了这个函数,并在我的计算机上使用类似命名的文件进行了测试(尽管没有复制工作表),它打开了工作表:
Sub OpenCopy()
Dim directory As String, fileName As String, sheet As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
directory = "z:\FY1415\FI\Weekly Report\Astry\"
fileName = Dir(directory & "TFM_" & Format(Date, "yyyymmdd") & "*.xls*")
If fileName <> "" Then
With Workbooks.Open(directory & fileName)
.Sheets("MSP").Copy After:=Workbooks("Generate Report 2.xlsm").Sheets("PlanOEE")
End With
ActiveSheet.Name = "MSP"
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
与查找文件名相关的行是,正如您可能看到的那样:
fileName = Dir(directory & "TFM_" & Format(Date, "yyyymmdd") & "*.xls*")
我只是简单地使用Dir
来搜索在parantheses中拟合字符串的文件,其中星号是通配符。我在xls
之后加入星号的原因是因为在较新版本的办公室中文件可能会有xlsx
或xlsm
等扩展名。我还在目录字符串的末尾添加了一个反斜杠,因为你不得不在文件名之前包含它。
我还在你打开的工作簿中添加了一个if子句,以防找不到适合搜索的文件。
请注意,只有每个日期只生成一个文件,此子目录才会执行您想要的操作。如果你想循环遍历包含给定日期的所有文件,我建议你在这里查看this post,这解释了如何遍历文件夹中的所有文件,修改那里提供的宏以适合你的需要应该是相当微不足道的。