Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Массовая обработка фаилов в разных подпапках - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Массовая обработка фаилов в разных подпапках
compot Дата: Пятница, 11.04.2014, 15:36 | Сообщение № 1
Группа: Гости
Прошу помощи у специалистов.
Часто сталкиваюсь с обработкои однотипных фаилов .xls, которые расположены в папках с разными названиями. В каждой папке вложены одинаковые фаилы .xls с одинаковои структурои внутри.
Пример:
Имеем папку с названием "Планета Земля", внутри нее подкатегории (папки) с названиями стран "Россия" Япония", в странах папки с городами и т.п., и в каждой папке(городе) лежит фаил "статистика.xls" и внутри нее таблица: численность, рождаемость, смертность и т.п.
Задача:
Изменилась численность в Японии и теперь надо в каждом городе его изменить ячейка к примеру А1.
Другими словами, включаем макрос, он открывает все подпапки и находит фаил "1.xls" на листе "лист1", берет ячеку А1 и заменяет на нашу цифру.
Имею в наличии макрос, но он работает по заданному конкретному пути, например если конкретно прописать что город Рязань, хотелось бы чтоб макрос просматривал все подряд папки в стране и в каждом городе в нужном фаиле заменял значение в нужной (одной) ячейке.
МАКРОС:
[vba]
Код
Sub b()
Dim awb As Workbook
Set awb = Application.Workbooks.Open("C:\Documents and Settings\2\3\1\3\Рязань.xls")
With ThisWorkbook.Worksheets(1)
awb.Worksheets(1).[C10] = .[A1].Value
End With
End Sub
[/vba]
 
Ответить
СообщениеПрошу помощи у специалистов.
Часто сталкиваюсь с обработкои однотипных фаилов .xls, которые расположены в папках с разными названиями. В каждой папке вложены одинаковые фаилы .xls с одинаковои структурои внутри.
Пример:
Имеем папку с названием "Планета Земля", внутри нее подкатегории (папки) с названиями стран "Россия" Япония", в странах папки с городами и т.п., и в каждой папке(городе) лежит фаил "статистика.xls" и внутри нее таблица: численность, рождаемость, смертность и т.п.
Задача:
Изменилась численность в Японии и теперь надо в каждом городе его изменить ячейка к примеру А1.
Другими словами, включаем макрос, он открывает все подпапки и находит фаил "1.xls" на листе "лист1", берет ячеку А1 и заменяет на нашу цифру.
Имею в наличии макрос, но он работает по заданному конкретному пути, например если конкретно прописать что город Рязань, хотелось бы чтоб макрос просматривал все подряд папки в стране и в каждом городе в нужном фаиле заменял значение в нужной (одной) ячейке.
МАКРОС:
[vba]
Код
Sub b()
Dim awb As Workbook
Set awb = Application.Workbooks.Open("C:\Documents and Settings\2\3\1\3\Рязань.xls")
With ThisWorkbook.Worksheets(1)
awb.Worksheets(1).[C10] = .[A1].Value
End With
End Sub
[/vba]

Автор - compot
Дата добавления - 11.04.2014 в 15:36
alex77755 Дата: Воскресенье, 13.04.2014, 12:38 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Перебрать все файлы в папках и подпапках можно так:

[vba]
Код
Private Type BrowseInfo
      hwndOwner As Long
      pIDLRoot As Long
      pszDisplayName As Long
      lpszTitle As String
      ulFlags As Long
      lpfnCallback As Long
      lParam As Long
      iImage As Long
End Type

Dim strPath As String
      Private Declare Function SHBrowseForFolder _
      Lib "shell32" (lpbi As BrowseInfo) As Long
      Private Declare Function SHGetPathFromIDList _
      Lib "shell32" (ByVal pidList As Long, _
      ByVal lpBuffer As String) As Long
      Private Declare Sub CoTaskMemFree _
      Lib "ole32.dll" (ByVal hMem As Long)

Public Function BrowseForFolder(hwndOwner _
As Long, sPrompt As String) As String
      Const BIF_RETURNONLYFSDIRS = 1, MAX_PATH = 260
      Dim intNull As Integer, lngIdList As Long
      Dim udtBI As BrowseInfo

With udtBI
          .hwndOwner = hwndOwner
          .lpszTitle = sPrompt
          .ulFlags = BIF_RETURNONLYFSDIRS
End With
      lngIdList = SHBrowseForFolder(udtBI)
      If lngIdList Then
          strPath = String$(MAX_PATH, 0)
          SHGetPathFromIDList lngIdList, strPath
          CoTaskMemFree lngIdList
          intNull = InStr(strPath, vbNullChar)
          If intNull Then strPath = Left$(strPath, intNull - 1)
      End If
      BrowseForFolder = strPath
End Function

Sub Кнопка3_Щелкнуть()
Dim K
      BrowseForFolder ЭтаКнига.Application.Hwnd, "Выбери каталог  ... "
          Dim NewName
      MyPath = strPath & "\" ' Указывает путь.
MyName = (Dir(MyPath, vbNormal))     ' Возвращает первый элемент.
Do While MyName <> ""   ' Начинает цикл.
      ' Игнорирует текущий каталог и каталог предыдущего уровня.
      If MyName <> "." And MyName <> ".." Then
           If StrComp(Right$(MyName, 4), ".xls", vbTextCompare) = 0 Then
          K = K + 1
         Debug.Print MyName
'       здесь код открытия файла и .....
          End If
      End If
      MyName = Dir    ' Возвращает следующий элемент.
Loop
End Sub
[/vba]


Могу помочь в VB6, VBA
Alex77755@mail.ru


Сообщение отредактировал alex77755 - Воскресенье, 13.04.2014, 12:39
 
Ответить
СообщениеПеребрать все файлы в папках и подпапках можно так:

[vba]
Код
Private Type BrowseInfo
      hwndOwner As Long
      pIDLRoot As Long
      pszDisplayName As Long
      lpszTitle As String
      ulFlags As Long
      lpfnCallback As Long
      lParam As Long
      iImage As Long
End Type

Dim strPath As String
      Private Declare Function SHBrowseForFolder _
      Lib "shell32" (lpbi As BrowseInfo) As Long
      Private Declare Function SHGetPathFromIDList _
      Lib "shell32" (ByVal pidList As Long, _
      ByVal lpBuffer As String) As Long
      Private Declare Sub CoTaskMemFree _
      Lib "ole32.dll" (ByVal hMem As Long)

Public Function BrowseForFolder(hwndOwner _
As Long, sPrompt As String) As String
      Const BIF_RETURNONLYFSDIRS = 1, MAX_PATH = 260
      Dim intNull As Integer, lngIdList As Long
      Dim udtBI As BrowseInfo

With udtBI
          .hwndOwner = hwndOwner
          .lpszTitle = sPrompt
          .ulFlags = BIF_RETURNONLYFSDIRS
End With
      lngIdList = SHBrowseForFolder(udtBI)
      If lngIdList Then
          strPath = String$(MAX_PATH, 0)
          SHGetPathFromIDList lngIdList, strPath
          CoTaskMemFree lngIdList
          intNull = InStr(strPath, vbNullChar)
          If intNull Then strPath = Left$(strPath, intNull - 1)
      End If
      BrowseForFolder = strPath
End Function

Sub Кнопка3_Щелкнуть()
Dim K
      BrowseForFolder ЭтаКнига.Application.Hwnd, "Выбери каталог  ... "
          Dim NewName
      MyPath = strPath & "\" ' Указывает путь.
MyName = (Dir(MyPath, vbNormal))     ' Возвращает первый элемент.
Do While MyName <> ""   ' Начинает цикл.
      ' Игнорирует текущий каталог и каталог предыдущего уровня.
      If MyName <> "." And MyName <> ".." Then
           If StrComp(Right$(MyName, 4), ".xls", vbTextCompare) = 0 Then
          K = K + 1
         Debug.Print MyName
'       здесь код открытия файла и .....
          End If
      End If
      MyName = Dir    ' Возвращает следующий элемент.
Loop
End Sub
[/vba]

Автор - alex77755
Дата добавления - 13.04.2014 в 12:38
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!