Extraiga el último libro de trabajo copy el libro de trabajo seleccionado y péguelo en el libro de trabajo maestro

Estoy tratando de search en una carpeta para extraer el último libro de trabajo por date, abrir el libro como mis datos src, copyr la spreadsheet y los datos seleccionados de src y luego pegarlos en mi libro maestro. Finalmente cerrando el libro de trabajo src sin save ningún cambio. Tengo problemas sobre dónde debo ubicar mis routes de files y nombres de files.

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 

Lo primero es lo primero:

Si tiene una pregunta o encuentra un error, expóngalo. Es difícil saber dónde está tu error, sin saber en qué línea ocurre.

Su function en un todo no tiene mucho sentido. Para echarle un buen vistazo, comentar habría sido muy útil.

Repasemos su código paso a paso:

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

Esta condición if siempre se disparará, porque la cadena que colocas allí siempre es la misma y siempre perderá el "\". Entonces, si su ruta no cambia, puede cambiarla a 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 

No estoy seguro de lo que estás tratando de hacer aquí. Está configurando FileNameCrnt en una cadena en la primera línea (le falta el "\" btw). Supongo que "Book1.xlsx" es el nombre real de su libro, por lo que su String debería verse así: "G:\AOC\GROUPS1\SAC\TEST\Book1.xlsx" o podría hacer algo como esto

 fileName = "Book1.xlsx" FileNameCrnt = Dir$("G:\AOC\GROUPS1\SAC\TEST" & fileName ) 

Siguiente: Usted (!) Siempre saldrá de la function allí, si la línea de arriba funcionaría. Establece FilenameCrnt en Book1.xlsx, luego lo verifica a través de una cláusula if, el cheque siempre será true , luego siempre saldrías.


Tengo la idea de tu loop, pero también está roto. Comience cambiando esto: If FileNameCrnt = "" Then Exit Do a otra cosa. Su variable nunca estará vacía, por lo que su ciclo siempre causará un error de time de ejecución. Comience a cambiar las primeras partes de su function y acceda a eso más tarde. Creo que tendrás una mejor idea de cómo debería funcionar todo esto. Y siempre es mejor intentar resolver algunas cosas por ti mismo. 😉

EDITAR:

Siempre es útil hacer un diagtwig de flujo sobre cómo debe ejecutarse su progtwig. Algo como:

  • Obtener mi nombre de file actual
  • Obtener la date de mi file actual
  • Compruebe si hay un file más reciente (un file con una date más alta que mi date anterior)
  • Obtenga las dates de todos los files (recorra todos los files)
  • OBTENER la date más alta
  • Comparar la date más alta hasta la date de mi file actual
  • si hay un file con una date más alta, actualice el nombre del file actual en el nombre del file con una date más alta

HTH