Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 56

Как создать папки с подпапками из таблицы Excel выделенных ячеек

15.01.2016, 13:40. Показов 4578. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток! У меня вопрос к знающим, как можно создать папки с подпапками из таблицы Exel выделенных ячеек? Например в столбце А имена папок, а в столбце B имена папок принадлежащих столбцу А, потом уже выделять значения этих строк и создавать папки (столбец А) с подпапками (столбец B). Всего у меня может быть до 10 столбцов и N-ное количество записей в длину. Нашел пример кода который делает эти операции, но он не может работать с только выделенными значениями ячеек, а только когда выделено все в таблице.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Option Explicit  
 
Sub CreateMultiFolder()  
    Dim s As String, sF As String, sSF As String  
    Dim arr, lr As Long, lc As Long  
    Const sMainDir As String = "C:"  
      
    If Dir(sMainDir, 16) = "" Then  
        MsgBox "Корневая папка '" & sMainDir & "' отсутствует!", 
        Exit Sub  
    End If  
      
    arr = Selection.Value  
    If Not IsArray(arr) Then  
        ReDim arr(1 To 1, 1 To 1)  
        arr(1, 1) = Selection.Value  
    End If  
      
    For lr = 1 To UBound(arr, 1)  
        s = arr(lr, 1)  
        s = Trim(s)  
        If Len(s) Then  
            sF = sMainDir & arr(lr, 1)  
            If Dir(sF, 16) = "" Then  
                MkDir sF  
            End If  
            sSF = sF  
            For lc = 2 To UBound(arr, 2)  
                s = arr(lr, lc)  
                s = Trim(s)  
                If Len(s) Then  
                    sSF = sSF & "" & s  
                    If Dir(sSF, 16) = "" Then  
                        MkDir sSF  
                    End If  
                End If  
            Next lc  
        End If  
    Next lr  
End Sub
Нашел на форуме еще код, который работает с выделенными ячейками

Declare Function MakeSureDirectoryPathExists Lib "Imagehlp.dll" (ByVal strPath As String) As Long
'проверяет наличие папки с указанным путем и создает, если ее нет
'возвращает 0, если папку создать не удалось и не-0, если ОК

Visual Basic
1
2
3
4
5
Sub CreatePathFromActiveCell()  
Dim s$  
s = "C:" & ActiveCell & "\1\2"  
If MakeSureDirectoryPathExists(s) = 0 Then MsgBox "Не удалось создать путь " & s  
End Sub
Как совместить эти два кода в один работающий макрос?
Пример:
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.01.2016, 13:40
Ответы с готовыми решениями:

Копирование выделенных несмежных ячеек таблицы excel
Доброго вечера. Ломаю голову над следующей задачей. Есть таблица с данными. В ручную выделяем произвольные строки с нажатым CTRL...

Как сделать перебор отфильтрованных выделенных ячеек в Excel?
Добрый день. Подскажите код перебора ячеек которые были выделены на листе НО именно тех ячеек которые отфильтрованные (видимые). Т.е. я...

Сумма значений выделенных ячеек (Excel)
помогите пожалуйста! совсем не помню как программировать в экселе. надо сделать так, чтобы выделить числа в некой таблице в любой части...

8
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,430
Записей в блоге: 1
15.01.2016, 13:54
Первый код и работает с ТОЛЬКО ВЫДЫЛЕННЫМИ ЯЧЕЙКАМИ (хоть одной строкой), второй код - с 1-ой единственной активной ячейкой.
В строках 6 и 32 первого кода исчез символ \ :
Const sMainDir As String = "C:" ' \-исчезает на форуме , Правильно C:\
sSF = sSF & "" & s ' \-исчезает на форуме, Правильно & "\
1
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 56
15.01.2016, 14:00  [ТС]
Спасибо за внимание к моей проблеме, дело в том, что я хотел бы выделять это вот таким образом и запускать макрос. Первый Код не рассчитан на работу с несмежными диапазонами.
0
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,430
Записей в блоге: 1
15.01.2016, 14:33
Лучший ответ Сообщение было отмечено Hissin как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Sub CreateMultiFolder2()
    Dim s As String, sF As String, sSF As String
    Dim arr, k&, i&, j&, Strok&, Stolbcov&, LastBound&, lr As Long, lc As Long
    Const sMainDir As String = "C:" ' \-исчезает на форуме, Правильно  C:\
    If Dir(sMainDir, 16) = "" Then
        MsgBox "Корневая папка '" & sMainDir & "' отсутствует!"
        Exit Sub
    End If
    If Not IsArray(Selection.Value) Then
        ReDim arr(1 To 1, 1 To 1)
        arr(1, 1) = Selection.Value
    Else
        arr = Selection.Value
        Strok = UBound(arr)
        For k = 2 To Selection.Areas.Count
            LastBound = UBound(arr, 2)
            Stolbcov = UBound(arr, 2) + Selection.Areas(k).Columns.Count
            ReDim Preserve arr(1 To Strok, 1 To Stolbcov)
            For i = 1 To Strok
                For j = 1 To Selection.Areas(k).Columns.Count
                    arr(i, LastBound + j) = Selection.Areas(k).Cells(i, j)
                Next j
            Next i
        Next
    End If
    For lr = 1 To UBound(arr, 1)
        s = arr(lr, 1)
        s = Trim(s)
        If Len(s) Then
            sF = sMainDir & arr(lr, 1)
            If Dir(sF, 16) = "" Then
                MkDir sF
            End If
            sSF = sF
            For lc = 2 To UBound(arr, 2)
                s = arr(lr, lc)
                s = Trim(s)
                If Len(s) Then
                    sSF = sSF & "" & s ' \-исчезает на форуме, Правильно  & "\
                    If Dir(sSF, 16) = "" Then
                        MkDir sSF
                    End If
                End If
            Next lc
        End If
    Next lr
End Sub
1
Заблокирован
15.01.2016, 14:38
Цитата Сообщение от KoGG Посмотреть сообщение
\-исчезает на форуме
Фиксировалось неоднократно, и выход предлагался - дублировать слэш типа так - "C:\\"
0
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 56
15.01.2016, 15:24  [ТС]
KoGG, Спасибо Вам большое! Скажите почему у меня проблема такая может быть-выводит на середине кода строку MkDir sF после этого кода:
Visual Basic
1
2
3
4
5
6
7
End If
    For lr = 1 To UBound(arr, 1)
        s = arr(lr, 1)
        s = Trim(s)
        If Len(s) Then
            sF = sMainDir & arr(lr, 1)
            If Dir(sF, 16) = "" Then
... Однако папки с подпапками исправно создает, но я не уверен что полностью все создалось, может быть что большой объем информации?.. (кажется маловероятным, так как уже часть выполнена...)

Добавлено через 7 минут
Однако папки с подпапками исправно создает, но не полностью, зашел стал проверять-некоторых папок нет, хотя в таблице есть... Возможно ли это из за большого объема информации? И как с этим бороться???
0
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,430
Записей в блоге: 1
15.01.2016, 16:02
При выделении несвязанных диапазонов нельзя один из них выделять повторно, это будет пониматься как еще один столбец (столбцы). Кроме того не должно быть сдвигов по вертикали между ними.
Возможны ошибки в исходных данных: пустое имя папки промежуточной, недопустимые символы в именах.
1
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 56
15.01.2016, 16:15  [ТС]
KoGG, О! Большое спасибо! я тут как раз уже начал понимать это, методом тыка и пробы ))) Спасибо Вам огромное!!!

Добавлено через 4 минуты
Цитата Сообщение от KoGG Посмотреть сообщение
недопустимые символы в именах.
Это какие? могли бы просветить меня в этом? И есть ли такая возможность пропускающая эти самые "недопустимые" символы?
0
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,430
Записей в блоге: 1
15.01.2016, 16:30
Недопустимые символы:
*|\ :"<>? /
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2016, 16:30
Помогаю со студенческими работами здесь

Есть ли грид, позволяющий "протяжку" выделенных ячеек, как в Excel?
Сабж. Сам я юзаю vsflexgrid 7. То ли я не нашел, то ли в нем нет возможности протягивать по таблице отмеченный блок ячеек так, чтобы при...

Подсчет количества выделенных ячеек в excel с помощью макроса
Здравствуйте! Как можно реализовать подсчет выделенных ячеек, и сопутствующий вопрос как реализовать обращение к значению каждой из этих...

Папки и подпапки - создать папку в "общей папке видео", с подпапками
Всем добрый вечер значит.:senor: Я немного не догоняю как при первом пуске приложения, создать папку в &quot;общей папке видео&quot; а в...

восстановление папки с подпапками
была удалена папка с подпапками в почтовой базе ,как их можно восстановить

Архивация папки с подпапками
Друзья, есть следующая структура /tmp/ - - - - Path1/ - - - - - - - - 1.txt - - - - - - - - 2.txt - - - - - - - - 3.txt - - -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru