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

Вход

Регистрация

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

 

= Мир MS Excel/Пакетная обработка файлов - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Пакетная обработка файлов (Макросы/Sub)
Пакетная обработка файлов
t330 Дата: Среда, 06.02.2019, 17:37 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 98
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Изучаю VBA по Уокенбаху Эксель 2010 профессиональное программирование на ВБА по рекомендации преподавателя с Курсов Специлаист из Бауманки...
К сожалению, в этой книжке большинство примеров даны просто как данность без подробного объяснения как и для чего работает каждая строка кода...

Сейчас ломаю голову над примером Пакетная обработка файлов:

[vba]
Код

Option Explicit

Sub BatchProcess()
          Dim FileSpec As String
          Dim i As Integer
          Dim FileName As String
          Dim FileList() As String
          Dim FoundFiles As Integer

      '   Указание пути и файла
10        FileSpec = ThisWorkbook.Path & "\" & "text??.txt"
20        FileName = Dir(FileSpec)
          
      '   Был ли найден файл?
30        If FileName <> "" Then
40            FoundFiles = 1
50            ReDim Preserve FileList(1 To FoundFiles)
60            FileList(FoundFiles) = FileName
70        Else
80            MsgBox "Не найдены файлы, которые соответствуют " & FileSpec
90            Exit Sub
100       End If
          
      '   Получение других имен файлов
110       Do
120           FileName = Dir
130           If FileName = "" Then Exit Do
140           FoundFiles = FoundFiles + 1
150           ReDim Preserve FileList(1 To FoundFiles)
160           FileList(FoundFiles) = FileName & "*"
170       Loop

      '   Циклический обход и обработка файлов
180       For i = 1 To FoundFiles
190           Call ProcessFiles(FileList(i))
200       Next i
End Sub

Sub ProcessFiles(FileName As String)
      '   Import the file
210       Workbooks.OpenText FileName:=FileName, _
              Origin:=xlWindows, _
              StartRow:=1, _
              DataType:=xlFixedWidth, _
              FieldInfo:= _
              Array(Array(0, 1), Array(3, 1), Array(12, 1))
      '   Ввод итоговых формул
220       Range("D1").Value = "A"
230       Range("D2").Value = "B"
240       Range("D3").Value = "C"
250       Range("E1:E3").Formula = "=COUNTIF(B:B,D1)"
260       Range("F1:F3").Formula = "=SUMIF(B:B,D1,C:C)"
End Sub

[/vba]

Помогите пожалуйста разобраться.
1.При выполнении код выдает ошибку , что не найден файл Text01.txt хотя он (и другие два файла Text02 и Text03)лежит в том же каталоге, что и рабочая книга...
2.Почему, когда в строке 40 написано
[vba]
Код
40            FoundFiles = 1
[/vba]
в строке 50 переменная FoundFiles при пошаговом Дебаге показывает значение =3
[vba]
Код
50            ReDim Preserve FileList(1 To FoundFiles)
[/vba]

Архив в файлом с макросом и текстовыми файлами во вложении.
К сообщению приложен файл: __.rar(18.0 Kb)


Сообщение отредактировал t330 - Среда, 06.02.2019, 21:35
 
Ответить
СообщениеИзучаю VBA по Уокенбаху Эксель 2010 профессиональное программирование на ВБА по рекомендации преподавателя с Курсов Специлаист из Бауманки...
К сожалению, в этой книжке большинство примеров даны просто как данность без подробного объяснения как и для чего работает каждая строка кода...

Сейчас ломаю голову над примером Пакетная обработка файлов:

[vba]
Код

Option Explicit

Sub BatchProcess()
          Dim FileSpec As String
          Dim i As Integer
          Dim FileName As String
          Dim FileList() As String
          Dim FoundFiles As Integer

      '   Указание пути и файла
10        FileSpec = ThisWorkbook.Path & "\" & "text??.txt"
20        FileName = Dir(FileSpec)
          
      '   Был ли найден файл?
30        If FileName <> "" Then
40            FoundFiles = 1
50            ReDim Preserve FileList(1 To FoundFiles)
60            FileList(FoundFiles) = FileName
70        Else
80            MsgBox "Не найдены файлы, которые соответствуют " & FileSpec
90            Exit Sub
100       End If
          
      '   Получение других имен файлов
110       Do
120           FileName = Dir
130           If FileName = "" Then Exit Do
140           FoundFiles = FoundFiles + 1
150           ReDim Preserve FileList(1 To FoundFiles)
160           FileList(FoundFiles) = FileName & "*"
170       Loop

      '   Циклический обход и обработка файлов
180       For i = 1 To FoundFiles
190           Call ProcessFiles(FileList(i))
200       Next i
End Sub

Sub ProcessFiles(FileName As String)
      '   Import the file
210       Workbooks.OpenText FileName:=FileName, _
              Origin:=xlWindows, _
              StartRow:=1, _
              DataType:=xlFixedWidth, _
              FieldInfo:= _
              Array(Array(0, 1), Array(3, 1), Array(12, 1))
      '   Ввод итоговых формул
220       Range("D1").Value = "A"
230       Range("D2").Value = "B"
240       Range("D3").Value = "C"
250       Range("E1:E3").Formula = "=COUNTIF(B:B,D1)"
260       Range("F1:F3").Formula = "=SUMIF(B:B,D1,C:C)"
End Sub

[/vba]

Помогите пожалуйста разобраться.
1.При выполнении код выдает ошибку , что не найден файл Text01.txt хотя он (и другие два файла Text02 и Text03)лежит в том же каталоге, что и рабочая книга...
2.Почему, когда в строке 40 написано
[vba]
Код
40            FoundFiles = 1
[/vba]
в строке 50 переменная FoundFiles при пошаговом Дебаге показывает значение =3
[vba]
Код
50            ReDim Preserve FileList(1 To FoundFiles)
[/vba]

Архив в файлом с макросом и текстовыми файлами во вложении.

Автор - t330
Дата добавления - 06.02.2019 в 17:37
bmv98rus Дата: Среда, 06.02.2019, 18:35 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 2370
Репутация: 411 ±
Замечаний: 20% ±

Excel 2013/2016
При выполнении код выдает ошибку , что не найден файл Text01.txt хотя он (и другие два файла Text02 и Text03)лежит в том же каталоге, что и рабочая книга...
но открыть вы пытаетесь его из текущей папки, а не из паки ThisWorkbook.Path
или менять в коде [vba]
Код
FileList(FoundFiles) = ThisWorkbook.Path & "\" & FileName
[/vba]
или [vba]
Код
Workbooks.OpenText FileName:=ThisWorkbook.Path & "\" & FileName
[/vba]
в строке 50 переменная FoundFiles при пошаговом Дебаге показывает значение =3
не верю, может в строке 150?


Замечательный медведь, процентов на 20.

Сообщение отредактировал bmv98rus - Четверг, 07.02.2019, 11:40
 
Ответить
Сообщение
При выполнении код выдает ошибку , что не найден файл Text01.txt хотя он (и другие два файла Text02 и Text03)лежит в том же каталоге, что и рабочая книга...
но открыть вы пытаетесь его из текущей папки, а не из паки ThisWorkbook.Path
или менять в коде [vba]
Код
FileList(FoundFiles) = ThisWorkbook.Path & "\" & FileName
[/vba]
или [vba]
Код
Workbooks.OpenText FileName:=ThisWorkbook.Path & "\" & FileName
[/vba]
в строке 50 переменная FoundFiles при пошаговом Дебаге показывает значение =3
не верю, может в строке 150?

Автор - bmv98rus
Дата добавления - 06.02.2019 в 18:35
китин Дата: Четверг, 07.02.2019, 07:47 | Сообщение № 3
Группа: Модераторы
Ранг: Экселист
Сообщений: 5682
Репутация: 897 ±
Замечаний: 0% ±

Excel 2007;Excel 2010
bmv98rus, Миша ну вот от кого, кого. а от тебя не ожидал. тебе тоже надо ссылку на Как оформлять сообщения?


Не судите строго:я пытаюсь научиться
ЯД 41001877306852/WM R249698041931; Z239672726538
 
Ответить
Сообщениеbmv98rus, Миша ну вот от кого, кого. а от тебя не ожидал. тебе тоже надо ссылку на Как оформлять сообщения?

Автор - китин
Дата добавления - 07.02.2019 в 07:47
bmv98rus Дата: Четверг, 07.02.2019, 11:32 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 2370
Репутация: 411 ±
Замечаний: 20% ±

Excel 2013/2016
китин, Есть грех, накидал отправил, а при двух цитатах править уже - ад крамешный. Сейчас попытаюсь скорректировать.
Сделал все что мог :-)


Замечательный медведь, процентов на 20.

Сообщение отредактировал bmv98rus - Четверг, 07.02.2019, 11:41
 
Ответить
Сообщениекитин, Есть грех, накидал отправил, а при двух цитатах править уже - ад крамешный. Сейчас попытаюсь скорректировать.
Сделал все что мог :-)

Автор - bmv98rus
Дата добавления - 07.02.2019 в 11:32
t330 Дата: Понедельник, 11.02.2019, 22:17 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 98
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
но открыть вы пытаетесь его из текущей папки,


Не совсем понял, что значит открыть я эти текстовые файлы пытаюсь из "текущей папки" ? Из какой "текущей папки"?
не верю, может в строке 150?
Да, тут верно, моя ошибка.
 
Ответить
Сообщение
но открыть вы пытаетесь его из текущей папки,


Не совсем понял, что значит открыть я эти текстовые файлы пытаюсь из "текущей папки" ? Из какой "текущей папки"?
не верю, может в строке 150?
Да, тут верно, моя ошибка.

Автор - t330
Дата добавления - 11.02.2019 в 22:17
boa Дата: Вторник, 12.02.2019, 10:19 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 392
Репутация: 106 ±
Замечаний: 0% ±

2013, 365
t330,
Из какой "текущей папки"?

вот она
К сообщению приложен файл: 2538729.jpg(47.4 Kb)


 
Ответить
Сообщениеt330,
Из какой "текущей папки"?

вот она

Автор - boa
Дата добавления - 12.02.2019 в 10:19
bmv98rus Дата: Вторник, 12.02.2019, 10:56 | Сообщение № 7
Группа: Проверенные
Ранг: Старожил
Сообщений: 2370
Репутация: 411 ±
Замечаний: 20% ±

Excel 2013/2016
boa, не совсем так. Это папка по молчанию, но она может быть изменена во время работы при открытии файла например, но направление верное.
t330,
? curdir - покажет текущую.


Замечательный медведь, процентов на 20.

Сообщение отредактировал bmv98rus - Вторник, 12.02.2019, 19:39
 
Ответить
Сообщениеboa, не совсем так. Это папка по молчанию, но она может быть изменена во время работы при открытии файла например, но направление верное.
t330,
? curdir - покажет текущую.

Автор - bmv98rus
Дата добавления - 12.02.2019 в 10:56
t330 Дата: Четверг, 14.02.2019, 22:17 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 98
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Всем огромное спасибо!


Сообщение отредактировал t330 - Четверг, 14.02.2019, 22:18
 
Ответить
СообщениеВсем огромное спасибо!

Автор - t330
Дата добавления - 14.02.2019 в 22:17
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Пакетная обработка файлов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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