2015-06-03 3 views
2

Я пытаюсь найти строку кода, чтобы открыть файл. Путь постоянен, то естьКод VBA, чтобы открыть меняющееся имя файла

"H:\silly\goose\*filename.xlsm*" 

Однако это имя файла будет меняться каждый раз, когда я пытаюсь запустить этот макрос. Это связано с тем, что я буду использовать этот макрос для автоматизации отчета, который я запускаю еженедельно. Каждый отчет сохраняется с датой заголовка, и все отчеты хранятся в одной и той же папке, то есть я не могу просто начать их именовать. Примеры:

H: \ глупой \ гусь \ Report 06-03-15.xlsm
H: \ глупой \ гусь \ Report 05-27-15.xlsm

Единственные помогает Информация состоит в том, что этот отчет должен запускаться каждую среду. Поэтому каждое имя файла будет иметь разницу в 7 дней. Я не знаю, есть ли что-нибудь, что я могу сделать с помощью метода Date.

+1

Можете ли вы показать код, который используется для сохранения * * имя файла? Логика должна быть почти одинаковой. –

+3

В противном случае нам нужна дополнительная информация. Как приложение должно знать *, который * файл открывается? Всегда ли он открывает * самый последний * файл (т. Е. Тот, который был создан <= 7 дней назад? –

+0

Используя два примера, которые вы дали, мы знаем, что «06-03-15»> «05-27-15». через имена файлов, выполняющих это сравнение, если true, то создайте новое сопоставление файлов, чтобы открыть имя файла, наивысшее число будет естественно пузыриться до поверхности. –

ответ

0

This reference имеет эту функцию:

Function GetFileList(FileSpec As String) As Variant 
' Returns an array of filenames that match FileSpec 
' If no matching files are found, it returns False 

    Dim FileArray() As Variant 
    Dim FileCount As Integer 
    Dim FileName As String 

    On Error GoTo NoFilesFound 

    FileCount = 0 
    FileName = Dir(FileSpec) 
    If FileName = "" Then GoTo NoFilesFound 

' Loop until no more matching files are found 
    Do While FileName <> "" 
     FileCount = FileCount + 1 
     ReDim Preserve FileArray(1 To FileCount) 
     FileArray(FileCount) = FileName 
     FileName = Dir() 
    Loop 
    GetFileList = FileArray 
    Exit Function 

' Error handler 
NoFilesFound: 
    GetFileList = False 
End Function 

Теперь вы можете сделать:

p = "H:\silly\goose\*.xlsm" 
x = GetFileList(p) 

И получить файл, который вы хотите

2

Что вам нужно сделать, это заново построить свое имя файла первый.

Const fpath As String = "H:\silly\goose\" ' your fixed folder 
Dim fname As String 

' Below gives you the Wednesday of the week 
fname = Format(Date - (Weekday(Date) - 1) + 3, "mm-dd-yy") ' returns 06-03-15 if run today 
fname = "Report " & fname & ".xlsm" ' returns Report 06-03-15.xlsm 
fname = fpath & fname ' returns H:\silly\goose\Report 06-03-15.xlsm 

Затем выполнить открытие файла:

Dim wb As Workbook 
Set wb = Workbooks.Open(fname) 
If wb Is Nothing Then MsgBox "File does not exist": Exit Sub 

' Rest of your code goes here which works on wb Object 
+0

Не могли бы вы объяснить, что означает эта линия ?: Формат (Дата - День недели (Дата) + 3 , "mm-dd-yy") Я удалил ваш -1, потому что этот макрос всегда должен быть запущен в среду. Однако я до сих пор не понимаю день недели (дата) +3 – Tawm

+0

@Tawm. Это простой способ получить дату * Среда * недели, чтобы вы создали файл из него. На этой неделе он возвращает * 6/3/2015 *, но запуск на следующей неделе вернется * 6/10/2013 *. Теперь, если это не то, что вам нужно, пересмотреть свой вопрос и объяснить немного больше, что вам нужно. – L42

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