Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Перебор файлов xls с переносом значений ячеек в ви Добавлено: 28.04.10 06:29  

Автор вопроса:  Александр
Ребята помогите, пожалуйста, составить макрос в VBA (очень уж необходимо)!!!
Так чтобы данный макрос перебирал все файлы *.xls в папке "Detal" (P.S. начало название файлов в папке одинаково "Дет_*"),
брал определённный ячейку А7 в определенном листе "Звонки", (лист и ячейка одинаковы во всех шаблонах)
и переносил их в открытую книгу "Itog" (ну или как-то подругому),
чтобы в итоге получился список:

Название файла Значение ячейки A7

"Дет_1" 500
"Дет_2" 600
"Дет_3" 700


Заранее благодарю за помощь в решении проблемы.

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #1 Добавлено: 28.04.10 07:31
  1. Sub ReadXls()
  2.   Dim MyPathName As String
  3.   Dim MyFileName As String
  4.   Dim MyBookTemp As String
  5.   Dim MySheetTemp As String
  6.   Dim MyValueTemp As Integer
  7.   Dim iItog As Integer
  8.   
  9.   MySheetTemp = "Звонки"
  10.   MyPathName = "E:\Detal\"
  11.   MyFileName = Dir(MyPathName & "Дет_*.xls", vbReadOnly)
  12.   iItog = 1
  13.   Do While MyFileName <> ""
  14.     MyValueTemp = Application.ExecuteExcel4Macro(Chr(39) & MyPathName & "[" & MyFileName & "]" & MySheetTemp & Chr(39) & "!" & Range("A7").Range("A1").Address(ReferenceStyle:=xlR1C1))
  15.     
  16.     ActiveWorkbook.Worksheets("Itog").Range("A" & iItog).Value = MyValueTemp
  17.     iItog = iItog + 1
  18.     MyFileName = Dir
  19.   Loop
  20. End Sub

Ответить

Номер ответа: 2
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #2
Добавлено: 01.05.10 00:12
Плюсы: книги не будут открываться во время работы, можно даже легко на вставку формул переделать.
Минус: нет обработки ошибок, впрочем и так понятно, что если вылезет ошибка обусловленная приложением, то это означает, что листа с именем "Звонки" в книге не оказалось.

Как можно сделать ещё (подсказка). Когда получили путь к файлу и имя файла: а) проверили, нет ли файла с таким именем в открытых книгах, если есть, то получили экземпляр объекта Worksheet (рабочая книга) и булевую переменную установили в False (в начале программы задали как True), если книги нет в открытых, от открываем ее и получаем тот же экземпляр объекта Worksheet. Дальше проверяем есть ли в книге лист с именем "Звонки"? Если есть, то все хорошо - получаем объект рабочего листа, если нет - грязно ругаемся в Debug.Print или MsgBox и корректно завершаем работу макроса. Если объект листа все-таки получен, то получаем из него нужное значение и переходим к следующей книге. Но прежде чем выходить, проверяем булевую переменную. Для True (открывали сами в макросе) закрываем книгу, для False закрывать не надо, просто путь будет Nothing. Как-то так я бы написал, если ворошить надо слишком много файлов и ошибки возможны. Но получилось бы более громоздко, чем у Jasmin, так что пусть будет ее вариант.

Если очень надо, могу потом скинуть мой шаблон вместе с кодом рекурсии Dir и диалогом выбора папки для обработки всех файлов в папке и подпапках, где можно задать шаблон имени фалов для обработки и на примере файлов Excel открывать их все по одному с обработкой ошибок, проверять наличие листа (мне было удобно использовать порядковый номер листа в книге) и делать что-нибудь. Такого рода наработка позволяла мне обрабатывать папки с сложенными многоуровневыми папками однородными по формату файлами Excel на автомате. Хорошо справлялся с папками порядка 1GB и порядка 4000 файлов Excel. Обработка ошибок была необходима, чтобы гарантировать, что всё обработалось как надо, ничего не пропущено и т.п. В отчетный документ также вставлялись возле цифр гиперссылки на книги и их содержащие папки.

Ответить

Номер ответа: 3
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #3 Добавлено: 01.05.10 11:50
Про обработку ошибок я знаю. Просто я не стала заморачиваться на обработку. Человек спрашивает, как перебрать все файлы в папке. А дальше, если нужно, вставит сам обработку. :-) Поэтому написала самый простой вариант. :-)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам