拉最新的工作簿复制选定的工作簿并粘贴在主工作簿

我正在试图查看文件夹按date拉最新的工作簿,作为我的src数据打开工作簿,从src复制选定的工作表和数据,然后粘贴到我的主工作簿。 最后closuressrc工作簿而不保存任何更改。 我在我应该放置我的文件path和文件名的问题。

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 

首先要做的事情

如果您有问题或遇到错误,请拼写出来。 很难找出你的错误在哪里,而不知道它出现在哪一行。

你的function在整体上并没有多大意义。 为了好好看看,评论会非常有帮助。

让我们一步一步的通过你的代码:

 If Right("G:\AOC\GROUPS1\SAC\TEST", 1) <> "\" Then path = "G:\AOC\GROUPS1\SAC\TEST" & "\" End If 

这个if条件总是会触发的,因为你放在那里的string总是相同的,它总是会丢失“\”。 所以,如果你的path不改变,那么你可以改变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设置为第一行中的string(您缺less“\”btw)。 我想“Book1.xlsx”是你的工作簿的真实名称,所以你的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去做别的。 你的variables永远不会是空的,所以你的循环总是会导致运行时错误。 开始改变你的function的第一部分,并在以后得到。 我想你会有一个更好的想法是如何工作的。 自己尝试解决一些事情总是更好。 ;)

编辑:

做一个关于你的程序应该如何运行的stream程图是很有帮助的。 就像是:

  • 获取我当前的文件名
  • 获取我当前文件的date
  • 检查是否有更新的文件(一个date比我的旧date更高的文件)
  • 获取 所有文件的date(循环遍历所有文件)
  • 获得最高date
  • 比较我当前文件的最高date和date
  • 如果有更高date的文件,则更新当前文件名到date更高的文件名

HTH