2013-07-17 6 views
2

Я относительно новичок в написании сценариев и, таким образом, пришел сюда, чтобы попросить некоторую помощь, чтобы помочь мне построить макрос excel. В настоящее время я работаю над файлом excel, чтобы ускорить сбор и проверку данных. Я не могу обойти, как получить фактические данные.Файл Открыть справку - Excel Macro

я в настоящее время есть диск, который содержит всю папку и Excel файлов:

Y:\Audit\Accounting_Data\XXXXX_Company_Names\07 Jul 2013\XXXXX.xls

Первая проблема для меня является то, что каждая компания отправляет файл в другой файл именования конвенции. У некоторых есть все даты в числовых значениях, в то время как другие имеют буквенно-цифровые данные (и не в том же порядке, то есть некоторые из них - DD/MM/YYYY, в то время как другие имеют MMMM/DD/YYYY). Я не могу изменять соглашения об именах файлов, так как они совместно используются другими службами, и самое главное, что у меня есть только доступ для чтения к этим файлам.

Вторая проблема заключается в том, что каждая компания не производит файлы в тот же день. Некоторые производят файлы аудита каждый день, а некоторые только по будням (те, что на выходные, затем создаются и отправляются мне в понедельник утром) >> Я думал об использовании object.fso, чтобы получить последние 10 файлов по дате. Созданные критерии и иметь excel остановить поиск, когда он не находит больше файлов. // проблема, о которой упоминалось ранее, заключается в том, что некоторые файлы создаются в одну дату.

Также я пытался реализовать функцию цикла (с остановкой, когда она попадает в пустую ячейку), поскольку компании могут быть добавлены или удалены из списка, определенного в листе1.

Что бы я хотел, это способ заставить Excel перейти в папку текущего месяца и открыть 10 предыдущих файлов excel и скопировать данные конкретных ячеек на текущий рабочий лист.

Это то, что я придумал на данный момент:

Cells A4: A12 = Дорожки файла (т.е. Y: \ Аудит \ Accounting_Data \ XXXXX_Company_Names)

var1=file path 
var2=month (numeric) 
var3=month 
var4=year 

Range (a4:a50)  
Do Loop till blank cell in Range (a4:a50) 
If cell is not blank then 
    goto "var1\var2+var3+var4\" 

    Excel is now in Y:\Audit\Accounting_Data\XXXXX_Company_Names\07 Jul 2013\ (hopefully) 

Как сказать первенствует чтобы открыть предыдущие 10 файлов Excel по сравнению с сегодняшней датой и прекратить, если найдено меньше или меньше

Copy Data 
Paste Data 

Move to next line 
    Repeat the Open 10 previous files/Copy/Paste 

else when cell is blank 

stop 

ответ

0

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

В этом примере я использовал «Sheet1» в качестве листа для копирования всех данных, и я использовал лист с именем «DateList» для хранения всех путей к файлам и создания дат.

Sub Example() 
    Dim DirList() As Variant 
    Dim Path As Variant 
    Dim fso As Object 
    Dim dt As Date 
    Dim CurrFile As String 
    Dim RowOffset As Long 

    DirList = Array("C:\Test\", "C:\Test - Copy\")   'Create list of folders to search 
    Set fso = CreateObject("Scripting.FileSystemObject") 'Create file system object 
    Sheets("DateList").Cells.Delete 
    Sheets("DateList").Range("A1").Value = "Path" 
    Sheets("DateLIst").Range("B1").Value = "Date Created" 

    'Loop through every directory in the list 
    For Each Path In DirList() 
     CurrFile = Dir(Path) 

     'For each file in the current directory 
     Do While CurrFile <> "" 
      'Get the files date created 
      dt = fso.GetFile(Path & CurrFile).DateCreated 

      'Add the file data to a "DateList" 
      Sheets("DateList").Cells(Sheets("DateList").UsedRange.Rows.Count + 1, 1).Value = Path & CurrFile 
      Sheets("DateList").Cells(Sheets("DateList").UsedRange.Rows.Count, 2).Value = Format(dt, "yyyymmdd") 

      CurrFile = Dir 
     Loop 

     Sheets("DateList").Select 
     'Sort Files 
     With ActiveWorkbook.Worksheets("DateList").Sort 
      .SortFields.Clear 
      .SortFields.Add Key:=Range("B1"), _ 
          SortOn:=xlSortOnValues, _ 
          Order:=xlDescending, _ 
          DataOption:=xlSortNormal 
      .SetRange Sheets("DateList").UsedRange 
      .Header = xlYes 
      .MatchCase = False 
      .Orientation = xlTopToBottom 
      .SortMethod = xlPinYin 
      .Apply 
     End With 

     Sheets("Sheet1").Select 
     'Get up to 10 files 
     For i = 2 To 11 
      If Sheets("DateList").Cells(i, 1).Value = "" Then 
       Exit For 
      End If 

      'Open the file, copy it to the bottom of the data on Sheet1 
      '***NOTE*** THIS ASSUMES SHEET1 STARTS OFF BLANK 
      Workbooks.Open Sheets("DateList").Cells(i, 1).Value 
      ActiveSheet.UsedRange.Copy Destination:=ThisWorkbook.Sheets("Sheet1").Cells(1 + RowOffset, 1) 
      RowOffset = RowOffset + ActiveSheet.UsedRange.Rows.Count 
      ActiveWorkbook.Close 
     Next 

     Sheets("DateList").Select 
     Range(Cells(2, 1), Cells(ActiveSheet.UsedRange.Rows.Count, 2)).Delete 
     Sheets("Sheet1").Select 
    Next 
End Sub 
+0

Спасибо за помощь Рипстер. Предоставленный код не совсем сработал так, как я надеялся, но это дало мне направление. Я тестирую новый код на данный момент и опубликую его после завершения. Спасибо за совет. – Iconz255

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