2016-02-08 85 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

相關問題