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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2010, 19:37   #1
ivan-799
 
Регистрация: 25.11.2009
Сообщений: 5
По умолчанию выбрать папку

Если не сложно, помогите, пожалуйста

Есть папка. В ней файлы(сколько - не известно). Все файлы имеют расширение *.xls или *.xlsx.

Нужно, чтобы при запуске макроса(для удобства пусть будет кнопкой) выскакивало дерево/меню в котором можно было бы выбрать папку(по умолчанию она не задана).

После выбора папки в столбцы A и B записываются значения ячеек A1 каждого файла и соответствующее ей название файла.

Ещё хотелось бы в ячейку F9 вывести цифрой общее кол-во файлов в папке.
Вложения
Тип файла: rar task.rar (21.0 Кб, 14 просмотров)
ivan-799 вне форума Ответить с цитированием
Старый 18.08.2010, 19:40   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

http://excelvba.ru/code/GetFileOrFolderPath
http://excelvba.ru/code/FilenamesCollection
По последней ссылке есть пример файла с макросом.
EducatedFool вне форума Ответить с цитированием
Старый 18.08.2010, 19:51   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вам подойдет такой макрос:

Код:
Sub Main()
    Dim coll As Collection, ПутьКПапке As String
    ПутьКПапке = GetFolderPath(, ThisWorkbook.Path)   ' запрашиваем имя папки
    If ПутьКПапке = "" Then Exit Sub    ' выход, если пользователь отказался от выбора папки

    ' Ищем в папке все файлы XLS*, и выводим на лист список их имён.
    ' считываем в колекцию coll нужные имена файлов
    Set coll = FilenamesCollection(ПутьКПапке, ".xls*", 1)

    Application.ScreenUpdating = False    ' отключаем обновление экрана
    Dim sh As Worksheet: Set sh = ActiveSheet

    ' выводим результаты на лист
    For i = 1 To coll.Count    ' перебираем все элементы коллекции, содержащей пути к файлам
        With GetObject(coll(i))
            ЯчейкаA1 = .Worksheets(1).[a1]
            .Close False
        End With
        sh.Range("a" & sh.Rows.Count).End(xlUp).Offset(1).Resize(, 2).Value = _
        Array(Dir(coll(i)), ЯчейкаA1)     ' выводим на лист очередную строку
        DoEvents    ' временно передаём управление ОС
    Next
    sh.Range("a:b").EntireColumn.AutoFit    ' автоподбор ширины столбцов
    sh.Range("f9") = coll.Count ' кол-во файлов
End Sub
Пример в файле: http://excelvba.ru/XL_Files/Sample__...__21-51-13.zip
EducatedFool вне форума Ответить с цитированием
Старый 18.08.2010, 19:51   #4
ivan-799
 
Регистрация: 25.11.2009
Сообщений: 5
По умолчанию

спасибо
ivan-799 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
заархивировать папку hacknet Общие вопросы Delphi 13 07.03.2015 11:47
Закрыть папку Kreadlling Общие вопросы C/C++ 1 08.09.2009 18:24
создать папку Betty Общие вопросы Delphi 4 13.07.2009 11:11
Очистить папку filin2323 Общие вопросы Delphi 1 22.12.2008 14:51
Переиминовать папку Linch Общие вопросы Delphi 10 18.09.2008 15:56