2016-02-08 18 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». lol –

ответ

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 в строку в первой строке (вам не хватает «\» кстати). Я предполагаю, что «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 на что-то еще. Ваша переменная никогда не будет пустой, поэтому ваш цикл всегда будет вызывать ошибку времени выполнения. Начните менять первые части своей функции и дойти до нее. Я думаю, вам будет лучше понять, как все это должно работать. И всегда лучше попытаться решить некоторые вещи самостоятельно. ;)

EDIT:

Это всегда полезно, чтобы сделать блок-схему, как ваша программа должна работать. Что-то вроде:

  • Получить мое текущее имя файла
  • Получить дату моего текущего файла
  • Проверьте есть новый файл (файл с более высокой датой, чем мой старый дата)
  • Получитьвсе файлы (просмотреть все файлы)
  • GET высокая Дата
  • Сравнить самые высокую дату на дату моего текущего файла
  • если есть файл с более высокой датой, обновления текущего имени файла в имени файла с более высокой датой

HTH

+0

Хорошо, так что все испортилось ... ха-ха так много для меня собирает вещи вместе lol – Marro24

+0

@ Marro24 - Я не думаю, что ** все все испортилось **. Самая большая проблема, которую я вижу в понимании вашей проблемы, заключается в том, что вы даже не используете аргументы, переданные в вашу функцию (я подозреваю, что вы жестко закодировали переменные при тестировании и разместили код таким образом). Если вы можете отредактировать сообщение с помощью функции, используя переданные аргументы, и сообщить нам точное место, где происходит ошибка, мы можем помочь вам намного эффективнее. –

+0

Ну, я видел этот код, который кто-то разместил, который, казалось, точно соответствовал моим проблемам, и попытался скопировать его и вставить то, что было непосредственно моим путем и файлами, но я думаю, что я просто испортил их код ... оригинальный код, который я скопировал, прежде чем прикасаться к нему. – Marro24

Смежные вопросы