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

 

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

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Пакетная обработка файлов
t330 Дата: Среда, 06.02.2019, 17:37 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

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

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


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



Помогите пожалуйста разобраться.
1.При выполнении код выдает ошибку , что не найден файл Text01.txt хотя он (и другие два файла Text02 и Text03)лежит в том же каталоге, что и рабочая книга...
2.Почему, когда в строке 40 написано

40            FoundFiles = 1


в строке 50 переменная FoundFiles при пошаговом Дебаге показывает значение =3

50            ReDim Preserve FileList(1 To FoundFiles)



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


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

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

[vba]
Option ExplicitSub 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 <> "" Then40            FoundFiles = 150            ReDim Preserve FileList(1 To FoundFiles)60            FileList(FoundFiles) = FileName70        Else80            MsgBox "Не найдены файлы, которые соответствуют " & FileSpec90            Exit Sub100       End If                '   Получение других имен файлов110       Do120           FileName = Dir130           If FileName = "" Then Exit Do140           FoundFiles = FoundFiles + 1150           ReDim Preserve FileList(1 To FoundFiles)160           FileList(FoundFiles) = FileName & "*"170       Loop      '   Циклический обход и обработка файлов180       For i = 1 To FoundFiles190           Call ProcessFiles(FileList(i))200       Next iEnd SubSub ProcessFiles(FileName As String)      '   Import the file210       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 = "=СЧЁТЕСЛИ(B:B,D1)"260       Range("F1:F3").Formula = "=СУММЕСЛИ(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
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
Цитата t330, 06.02.2019 в 17:37, в сообщении № 1 ( писал(а)):
При выполнении код выдает ошибку , что не найден файл Text01.txt хотя он (и другие два файла Text02 и Text03)лежит в том же каталоге, что и рабочая книга...
но открыть вы пытаетесь его из текущей папки, а не из паки ThisWorkbook.Path
или менять в коде

FileList(FoundFiles) = ThisWorkbook.Path & "\" & FileName


или

Workbooks.OpenText FileName:=ThisWorkbook.Path & "\" & FileName

Цитата t330, 06.02.2019 в 17:37, в сообщении № 1 ( писал(а)):
в строке 50 переменная FoundFiles при пошаговом Дебаге показывает значение =3
не верю, может в строке 150?


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

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

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

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


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

Автор - китин
Дата добавления - 07.02.2019 в 07:47
bmv98rus Дата: Четверг, 07.02.2019, 11:32 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

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


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

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

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

Excel 2016
Цитата bmv98rus, 06.02.2019 в 18:35, в сообщении № 2 ( писал(а)):
но открыть вы пытаетесь его из текущей папки,


Не совсем понял, что значит открыть я эти текстовые файлы пытаюсь из "текущей папки" ? Из какой "текущей папки"?
Цитата bmv98rus, 06.02.2019 в 18:35, в сообщении № 2 ( писал(а)):
не верю, может в строке 150?
Да, тут верно, моя ошибка.
 
Ответить
Сообщение
Цитата bmv98rus, 06.02.2019 в 18:35, в сообщении № 2 ( писал(а)):
но открыть вы пытаетесь его из текущей папки,


Не совсем понял, что значит открыть я эти текстовые файлы пытаюсь из "текущей папки" ? Из какой "текущей папки"?
Цитата bmv98rus, 06.02.2019 в 18:35, в сообщении № 2 ( писал(а)):
не верю, может в строке 150?
Да, тут верно, моя ошибка.

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

365
t330,
Цитата t330, 11.02.2019 в 22:17, в сообщении № 5 ( писал(а)):
Из какой "текущей папки"?

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


 
Ответить
Сообщениеt330,
Цитата t330, 11.02.2019 в 22:17, в сообщении № 5 ( писал(а)):
Из какой "текущей папки"?

вот она

Автор - boa
Дата добавления - 12.02.2019 в 10:19
bmv98rus Дата: Вторник, 12.02.2019, 10:56 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

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
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

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


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

Автор - t330
Дата добавления - 14.02.2019 в 22:17
  • Страница 1 из 1
  • 1
Поиск:

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