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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2014, 16:34   #1
DENGA-RU
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 33
По умолчанию Ошибка при обработке файлов в подкаталоге

Добрый день всем! Задача программы при обработке файлов в подкаталогах папки найти нужный файл и обработать его (для начала там просто msgbox поставил). Однако программа обработав совершив 1 цикл и обработав один подкаталог показала ошибку "run-time "5"" и вывела сообщение о неправильном вызове процедуре или аргументе. Пытался без процедуры делать такая же ошибка вылетает. Проблему сам так и не смог решить, хотелось бы узнать как можно убрать эту ошибку ?

Код:
 Public s As String

 Sub Zem_control()
Dim file As String, r As Variant
Dim WayName As String, i As Variant, proverka_file As Long
Dim MyName As String
Dim name_open_file As String
  WayName = Application.ActiveWorkbook.FullName
  MyName = ActiveWorkbook.Name
   s = ThisWorkbook.Path
   s = Dir(s & "\" & "*.*", vbNormal + vbDirectory)
    
    Do While s <> ""
        s = Dir()     'вот тут образуется ошибка  при выходе из первого цикла
        file = ThisWorkbook.Path & "\" & s
        proverka_file = InStr(1, s, ".", vbTextCompare)
        If proverka_file <> 0 Then GoTo Endloop
        
        Call obrabotka_dir
Endloop:
    Loop
End Sub

Private Sub obrabotka_dir()

Dim und_s As String, und_file As String

  und_s = ThisWorkbook.Path & "\" & s & "\"   'опытным путем установил что ошибка идет отсюда, но тогда почему все работает в первом цикле ?
  und_s = Dir(und_s & "\" & "*.*", vbNormal + vbDirectory)
        Do While und_s <> ""
        und_s = Dir()
        und_file = ThisWorkbook.Path & "\" & und_s
        If Right(und_file, 4) = ".xls" Then MsgBox und_file
    Loop
End Sub
DENGA-RU вне форума Ответить с цитированием
Старый 08.07.2014, 20:41   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Не изобретайте велосипед, - воспользуйтесь готовой функцией:
http://excelvba.ru/code/FilenamesCollection
EducatedFool вне форума Ответить с цитированием
Старый 09.07.2014, 08:55   #3
DENGA-RU
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 33
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Не изобретайте велосипед, - воспользуйтесь готовой функцией:
http://excelvba.ru/code/FilenamesCollection
Спасибо за Ваш ответ, но у Вас очень сложный макрос, а хотелось бы, что-нибудь попроще. У меня, к сожалению, пока не получается найти причину вылета цикла.
DENGA-RU вне форума Ответить с цитированием
Старый 09.07.2014, 12:22   #4
Neyandex
Пользователь
 
Регистрация: 21.11.2013
Сообщений: 11
По умолчанию

Я для обработки файлов в папке и вложенных папках написал небольшую рекурсивную функцию:
Код:
Dim I, fol

Sub liststart()
I = 1
FileList ("D:\JKH.OPEN.INFO\ftp")
End Sub

Sub FileList(fn)


  Set fs = CreateObject("Scripting.FileSystemObject")
  Set fl = fs.GetFolder(fn)
  Set fic = fl.Files
  Set foc = fl.SubFolders
  For Each f1 In foc
    fol = f1.path
    FileList (fn & "\" & f1.Name)
  Next
  Set w1 = ActiveWorkbook.Sheets("fl")
  For Each f1 In fic
      w1.Cells(I, 1).Value = fol
      w1.Cells(I, 2).Value = f1.Name
      I = I + 1
   Next
End Sub
Neyandex вне форума Ответить с цитированием
Старый 09.07.2014, 23:04   #5
DENGA-RU
Пользователь
 
Регистрация: 02.04.2009
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Neyandex Посмотреть сообщение
Я для обработки файлов в папке и вложенных папках написал небольшую рекурсивную функцию:
Спасибо Вам за совет, немного переделал и все теперь работает.
Код:
Public s As String

 Sub Zem_control()
WayName = Application.ActiveWorkbook.FullName
  MyName = ActiveWorkbook.Name
  Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(ThisWorkbook.Path)
For Each Folder In Folder.SubFolders
    s = Folder.Name
   Call obrabotka_dir
   Next Folder
   End Sub

Private Sub obrabotka_dir()

Dim und_s As String, und_file As String

  und_s = ThisWorkbook.Path & "\" & s & "\"  
  und_s = Dir(und_s & "\" & "*.*", vbNormal + vbDirectory)
        Do While und_s <> ""
        und_s = Dir()
        und_file = ThisWorkbook.Path & "\" & und_s
        If Right(und_file, 4) = ".xls" Then MsgBox und_file
    Loop
End Sub
DENGA-RU вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка и отладка алгоритмов и программ с применением по созданию и обработке файлов felicita_091 Visual C++ 7 14.04.2013 03:10
Потеря фокуса при обработке файлов Exact Общие вопросы Delphi 15 04.09.2012 11:10
Странная ошибка при обработке строки Didim Помощь студентам 31 08.11.2011 16:35
ошибка при обработке функции класса "missing type specifier - int assumed" askerpro Общие вопросы C/C++ 8 02.06.2010 23:09
Ошибка при обработке StringGrid + использование XPManifest noname_06 Общие вопросы Delphi 3 18.01.2009 20:52