2016-02-08 56 views
0

我想在一个文件夹中按日期拉最新的工作簿,打开工作簿作为我的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

“多草”?!?我认为你的意思是“非常感谢”。正如“muchas gracias”一样。大声笑 –

回答

2

首先第一件事情:

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

您的功能在整体上没有多大意义。为了好好看看它,评论会非常有帮助。

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

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

此,如果条件永远触发,因为你把在那里的字符串,是永远不变的,它会永远怀念的“\” 。 所以如果你的路径不那么改变你能改变的,要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(您缺少“\”btw)。我猜“Book1.xlsx”是您的工作簿的真实姓名,所以你的字符串应该是要么是这样的:"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为其他内容。你的变量永远不会是空的,所以你的循环总是会导致运行时错误。开始改变你的功能的第一部分,并在以后做到这一点。我想你会有一个更好的想法,所有这些应该如何工作。尝试自己解决一些事情总是更好。 ;)

编辑:

它总是有助于使你的程序应该如何运行的流程图。 喜欢的东西:

  • 获取我当前的文件名
  • 找我当前文件的日期
  • 检查有一个较新的文件(比我老的 更高日期文件日期)
  • 获取日期全部文件(遍历所有文件)
  • GET最高日
  • 比较最高的日期到我的当前文件的日期
  • 如果存在具有更高日期的文件,更新当前文件名具有较高的日期
到文件名

HTH

+0

好吧所以一切都搞砸了......哈哈这么多我一起拼凑事情大声笑 – Marro24

+0

@ Marro24 - 我不认为**一切都搞砸了**。我在理解你的问题时看到的最大问题是你甚至不使用传递给你的函数的参数(我怀疑你在测试时用硬编码变量,并以这种方式发布代码)。如果您可以使用传递的参数编辑帖子,并告诉我们发生错误的确切位置,我们可以更有效地帮助您。 –

+0

嗯,我看到有人发布这个代码,似乎完全符合我的问题,试图复制并插入直接我的路径和文件,但我认为我只是搞砸了他们的代码....我会在我的后在触摸它之前我复制了原始代码。 – Marro24

相关问题