Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2010, 07:59   #21
Pao
Пользователь
 
Регистрация: 16.06.2010
Сообщений: 16
По умолчанию

Ув. Hugo121 полазил в гугле и немного модифицировал код вот что получилось:
Sub export()
Dim FSO
Dim TheFolder, TheFiles, AFile
Application.ScreenUpdating = False
Set wb = ThisWorkbook
Set FSO = CreateObject("Scripting.FileSystemO bject")
Set TheFolder = FSO.GetFolder("F:\export\20100627\" )
Set TheFiles = TheFolder.Files
For Each AFile In TheFiles
If UCase(FSO.GetExtensionName(AFile.Pa th)) = "XLS" Then
Set xls = Workbooks.Open(Filename:=AFile, ReadOnly:=True)

dt = Format([General_TODATE], "dd")
dm = Format([General_TODATE], "mm")
zaccol = dt * 2
iLastRow = Cells(Rows.Count, 2).End(xlUp).Row
terminal = Cells(iLastRow - 1, 5)
zac = Cells(iLastRow, 13)
com = Cells(iLastRow, 12)

Set x = ThisWorkbook.Sheets(dm).Columns(1). Find(terminal, , , , xlWhole)
ThisWorkbook.Sheets(dm).Cells(x.Row , zaccol).Value = zac
ThisWorkbook.Sheets(dm).Cells(x.Row + 1, zaccol + 1).Value = com

xls.Close False
End If
Next

Application.ScreenUpdating = True
End Sub

Теперь он осуществляет перебор всех файлов из папки и заносит данные сразу в таблицу. Хотелось бы узнать можноли как нибудь сделать чтоб он еще и подпапки проверял, и как нибудь его ограницить чтоб он не все файлы xls открывал а только с определенными названиями т.к. в этих папках не только данные по терминалам а также еще и по получателям и общие данные?
Pao вне форума Ответить с цитированием
Старый 05.07.2010, 10:09   #22
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Процедура поиска файлов во всех вложеных папках

Код:
Dim sl
 Sub Main()
  
    Set fso = CreateObject("Scripting.FileSystemObject")
 PrintChilds fso.GetFolder("F:\")
      
rr = Split(sl, Chr(10), -1)
   Set fso = Nothing  
End Sub
Private Sub PrintChilds(ff)
  On Error Resume Next

    For Each fo In ff.SubFolders
       
         
         Dim s As String
    s = Dir(fo.Path & "\*.xls")
 
    Do While s <> ""
      sl = sl & fo.Path & "\" & s & Chr(10)
    
        s = Dir
    
    Loop

        PrintChilds fo
    Next fo
       
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 06.07.2010, 07:39   #23
Pao
Пользователь
 
Регистрация: 16.06.2010
Сообщений: 16
По умолчанию

А как этот код связать с моим? Я мало понимаю в этих кодах.
Pao вне форума Ответить с цитированием
Старый 06.07.2010, 12:10   #24
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

С помощью doober попробуйте такую сборку (лишнее от прежнего кода пока закомментировал через REM, потом можно убрать).

Код:
Dim sl
Sub export()
Dim FSO
Rem Dim TheFolder, TheFiles, AFile
Application.ScreenUpdating = False
Set wb = ThisWorkbook
Set FSO = CreateObject("Scripting.FileSystemObject")
Rem Set TheFolder = FSO.GetFolder("F:\export\20100627\" )
Rem Set TheFiles = TheFolder.Files
Rem For Each AFile In TheFiles

PrintChilds FSO.GetFolder("F:\export\20100627\")
rr = Split(sl, Chr(10), -1)
Set FSO = Nothing

Rem If UCase(FSO.GetExtensionName(AFile.Path)) = "XLS" Then
For i = LBound(rr) To UBound(rr)
Set xls = Workbooks.Open(Filename:=rr(i), ReadOnly:=True)

dt = Format([General_TODATE], "dd")
dm = Format([General_TODATE], "mm")
zaccol = dt * 2
iLastRow = Cells(Rows.Count, 2).End(xlUp).Row
terminal = Cells(iLastRow - 1, 5)
zac = Cells(iLastRow, 13)
com = Cells(iLastRow, 12)

Set x = ThisWorkbook.Sheets(dm).Columns(1).Find(terminal, , , , xlWhole)
ThisWorkbook.Sheets(dm).Cells(x.Row, zaccol).Value = zac
ThisWorkbook.Sheets(dm).Cells(x.Row + 1, zaccol + 1).Value = com

xls.Close False
Next i
Rem End If

Rem Next
Application.ScreenUpdating = True
End Sub


Private Sub PrintChilds(ff)
  On Error Resume Next

    For Each fo In ff.SubFolders
         
    Dim s As String
    s = Dir(fo.Path & "\*.xls")
 
    Do While s <> ""
    If InStr(s, "слово_которое_должно_быть_в_названии_файла") Then
      sl = sl & fo.Path & "\" & s & Chr(10)
    End If
    s = Dir
    
    Loop

        PrintChilds fo
    Next fo
       
End Sub
Вместо "слово_которое_должно_быть_в_назван ии_файла" попробуйте "ДействительныеПлатежиНаличными ".
Возможно, тут надо как-то иначе придумать отбор нужных файлов, нам пока эти критерии не известны
Поясню процесс - в процедуре PrintChilds(ff) в строку sl собираются полные имена всех нужных файлов, затем их перекладываем в массив rr (опять в основном коде), затем перебираем массив.

P.S. Добавил в начало Dim sl - как-то отвалилось....
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 06.07.2010 в 12:22.
Hugo121 вне форума Ответить с цитированием
Старый 08.07.2010, 10:08   #25
Pao
Пользователь
 
Регистрация: 16.06.2010
Сообщений: 16
По умолчанию

Огромное спасибо, все работает.
И последний вопрос какую строку надо добавить чтоб если имена терменалов не совподает он просто пропускал его?
Pao вне форума Ответить с цитированием
Старый 08.07.2010, 11:59   #26
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Так ведь было сделано, зачем убрали?
Код:
Set x = ThisWorkbook.Sheets(dm).Columns(1).Find(terminal, , , , xlWhole)
If Not x Is Nothing Then
ThisWorkbook.Sheets(dm).Cells(x.Row, zaccol).Value = zac
ThisWorkbook.Sheets(dm).Cells(x.Row + 1, zaccol + 1).Value = com
End If
Ключевое - условие If Not x Is Nothing Then
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 08.07.2010, 12:50   #27
Pao
Пользователь
 
Регистрация: 16.06.2010
Сообщений: 16
По умолчанию

Если есть эта строка тогда выдает ошибку и выделяет next
xls.Close False
Next i
Rem End If
Pao вне форума Ответить с цитированием
Старый 08.07.2010, 23:16   #28
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Вероятно, Вы забыли закрыть условие If ... Then... End If
Посмотрите внимательнее, не должно там быть ошибки.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 12.07.2010, 07:27   #29
Pao
Пользователь
 
Регистрация: 16.06.2010
Сообщений: 16
По умолчанию

Нашел ошибку действительно забыл закрыть условие.
Огромное Спасибо все работает как надо.
Pao вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сбор данных с разных книг в одну Ledy1987 Microsoft Office Excel 26 20.04.2011 21:33
Сбор данных с множества книг в одну по шаблонам Adeletto Microsoft Office Excel 3 11.06.2010 17:07
Обьединение разных типов даных женя2010 Microsoft Office Excel 3 21.04.2010 12:56
Сбор данных из разных книг 804040 Microsoft Office Excel 2 19.04.2010 15:33
Сбор данных с разных файлов Fess111 Microsoft Office Excel 2 09.03.2010 10:13