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

时间:2016-02-08 12:55:11

标签: excel vba excel-vba

我正在尝试查看文件夹以按日期提取最新的工作簿,打开工作簿作为我的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

1 个答案:

答案 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