我正在尝试查看文件夹以按日期提取最新的工作簿,打开工作簿作为我的src数据,从src复制选定的工作表和数据,然后粘贴到我的主工作簿。最后关闭src工作簿而不保存任何更改。我遇到了应该放置文件路径和文件名的问题。
Function NewestFileName(ByVal path As String, ByVal FileTemplate As String) As String
Dim FileDateCrnt As Date
Dim FileDateNewest As Date
Dim FileNameCrnt As String
Dim FileNameNewest As String
If Right("G:\AOC\GROUPS1\SAC\TEST", 1) <> "\" Then
path = "G:\AOC\GROUPS1\SAC\TEST" & "\"
End If
FileNameCrnt = Dir$("G:\AOC\GROUPS1\SAC\TEST" & Book1.xlsx)
If FileNameCrnt = "Book1.xlsx" Then
NewestFileName = "Book2.xlsx"
Exit Function
End If
FileNameNewest = FileNameCrnt
FileDateNewest = FileDateTime("G:\AOC\GROUPS1\SAC\TEST" & FileNameCrnt)
Do While True
FileNameCrnt = Dir$
If FileNameCrnt = "" Then Exit Do
FileDateCrnt = FileDateTime(path & FileNameCrnt)
If FileDateCrnt > FileDateNewest Then
FileNameNewest = FileNameCrnt
FileDateNewest = FileDateCrnt
End If
Loop
NewestFileName = FileNameNewest
Call ReadDataFromCloseFile
End Function
Sub ReadDataFromCloseFile()
On Error GoTo ErrHandler
Application.ScreenUpdating = False
Dim src As Workbook
Set src = Workbook.Open("G:\AOC\GROUPS1\SAC\TEST.xlsx", True, True)
Dim iTotalRows As Integer
iTotalRows = src.Worksheets("sheet1").Range("B1:B" & Cells(Rows.Count, "B").End(xlUp).Row)
Dim iCnt As Integer
For iCnt = 1 To iTotalRows
Worksheets("sheet1").Range("B" & iCnt).Formula = src.Worksheets("sheet1").Range("B" & iCnt).Formula
Next iCnt
src.Close False
Set scr = Nothing
ErrHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:2)
首先要做的事情:
如果您有疑问或遇到错误,请拼写出来。很难找出错误的位置,而不知道它出现在哪一行。
你的整体功能并没有多大意义。为了好好看看,评论会非常有用。
让我们一步一步地完成您的代码:
If Right("G:\AOC\GROUPS1\SAC\TEST", 1) <> "\" Then
path = "G:\AOC\GROUPS1\SAC\TEST" & "\"
End If
此if条件将始终触发,因为您放在那里的String总是相同的,并且它总是会错过&#34; \&#34;。
因此,如果您的路径没有变化,那么您可以将其更改为path = "G:\AOC\GROUPS1\SAC\TEST\"
FileNameCrnt = Dir$("G:\AOC\GROUPS1\SAC\TEST" & Book1.xlsx)
If FileNameCrnt = "Book1.xlsx" Then
NewestFileName = "Book2.xlsx"
Exit Function
End If
我不确定你在这里要做什么。您将FileNameCrnt
设置为第一行中的字符串(您缺少&#34; \&#34; btw)。我想&#34; Book1.xlsx&#34;是您的工作簿的真实名称,因此您的String应该如下所示:"G:\AOC\GROUPS1\SAC\TEST\Book1.xlsx"
或者您可以执行类似的操作
fileName = "Book1.xlsx"
FileNameCrnt = Dir$("G:\AOC\GROUPS1\SAC\TEST" & fileName )
下一步:如果上面的行可行,你会(!)总是退出那里的函数。您将FilenameCrnt设置为Book1.xlsx,然后通过if子句进行检查,检查将始终返回true
,之后您将始终退出。
我了解你的循环,但它也被破坏了。首先将此更改为:If FileNameCrnt = "" Then Exit Do
为其他内容。您的变量永远不会为空,因此您的循环将始终导致运行时错误。开始更改函数的第一部分,稍后再进行操作。我想你会更好地了解这一切应该如何运作。尝试自己解决一些问题总是更好。 ;)
编辑:
制作程序运行方式的流程图总是有帮助的。 类似的东西:
HTH