2013-11-15 3 views
0

Так что в основном я пишу все эти макросы VBA для массажа большого количества данных. До этого пользователь должен иметь возможность вводить дату и извлекать данные, которые они хотят массировать. Данные, которые нужно массировать, - это отчет Excel, который создается каждый день.Excel VBA: регулярное выражение VBA для проверки имени файла?

Формат файла является: «Year_Month_Day_ (RandomlyGeneratedNumbers) _ReportWorkSheet.xls»

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

Просто для справки это код, который я до сих пор:

Dim CurrentDateString As String 
Dim MonthString As String 
Dim DayString As String 
Dim YearString As String 
Dim FileNameString As String 
Dim i As Integer 




CurrentDateString = Worksheets("Sheet1").Range("B2:B2").Value 

'Checks to see if the date is in the proper format 
If Len(CurrentDateString) = 10 Then 


i = InStr(1, CurrentDateString, "/") 

MonthString = Mid(CurrentDateString, 1, (i - 1)) 

i = InStr(4, CurrentDateString, "/") 

DayString = Mid(CurrentDateString, 4, (i - 4)) 
i = InStr(4, CurrentDateString, "/") 

YearString = Mid(CurrentDateString, 7, i) 

FileNameString = YearString & "_" & MonthString & "_" & DayString & "_" &   "ThisIsWhereTheNumberWouldGo" & "ReportWorkSheet.xls" 

Else 
    MsgBox "Current date must have two digits for month and year. Even if its a single digit. For  example January 1st 2014 would be 01/01/2014 NOT 1/1/2014" 

    End If 
+1

Что именно вы хотите сделать ?? Это не совсем ясно. Я не думаю, что это то, что вам нужно для RegEx. Вы просто пытаетесь определить, является ли конкретное имя файла уже существует? –

ответ

0

Извините за путаницу, но я был в состоянии понять это. Regex не нужен. Наверное, я был неясен. В основном мне нужно было найти имя файла. На основании введенной даты. Цифры в середине имени файла отбрасывали меня, но мне даже не нужно было учитывать это в моем решении. Я нашел способ передвигаться по каталогам, а затем I For Eached через каждый файл и отделил часть имени файла только с датой, если был матч. Я открыл его в Excel. Извините за тратить время anyones :(

FileNameString = YearString & "_" & MonthString & "_" & DayString 
Set MyObject = CreateObject("Scripting.FileSystemObject") 
Set mySource = MyObject.GetFolder("J:\credit\Christopher Smith\Allegro 8.0 Reports\Post Live") 

For Each myFile In mySource.Files 
     DirectoryFileNameString = myFile.Name 
    DirectoryFileNameStringTemp = Mid(DirectoryFileNameString, 1, 10) 
    If FileNameString = DirectoryFileNameStringTemp Then 
     MsgBox "IT WORKS Filename String: " & FileNameString & " = DirectoryFilename: " & 
     Workbooks.Open (myFile.Path) 
     'Call another sub to massage data here 
DirectoryFileNameStringTemp 
End If 
Next 
Смежные вопросы