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

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

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

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток! У меня вопрос к знающим, как можно создать папки с подпапками из таблицы 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
Как совместить эти два кода в один работающий макрос?
Пример:
Как создать папки с подпапками из таблицы Excel выделенных ячеек
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2016, 13:40
Ответы с готовыми решениями:

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

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

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

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

8
5606 / 1592 / 412
Регистрация: 23.12.2010
Сообщений: 2,382
Записей в блоге: 1
15.01.2016, 13:54 2
Первый код и работает с ТОЛЬКО ВЫДЫЛЕННЫМИ ЯЧЕЙКАМИ (хоть одной строкой), второй код - с 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  [ТС] 3
Спасибо за внимание к моей проблеме, дело в том, что я хотел бы выделять это вот таким образом и запускать макрос. Первый Код не рассчитан на работу с несмежными диапазонами.
Как создать папки с подпапками из таблицы Excel выделенных ячеек
0
5606 / 1592 / 412
Регистрация: 23.12.2010
Сообщений: 2,382
Записей в блоге: 1
15.01.2016, 14:33 4
Лучший ответ Сообщение было отмечено 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 5
Цитата Сообщение от KoGG Посмотреть сообщение
\-исчезает на форуме
Фиксировалось неоднократно, и выход предлагался - дублировать слэш типа так - "C:\\"
0
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 56
15.01.2016, 15:24  [ТС] 6
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
5606 / 1592 / 412
Регистрация: 23.12.2010
Сообщений: 2,382
Записей в блоге: 1
15.01.2016, 16:02 7
При выделении несвязанных диапазонов нельзя один из них выделять повторно, это будет пониматься как еще один столбец (столбцы). Кроме того не должно быть сдвигов по вертикали между ними.
Возможны ошибки в исходных данных: пустое имя папки промежуточной, недопустимые символы в именах.
1
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 56
15.01.2016, 16:15  [ТС] 8
KoGG, О! Большое спасибо! я тут как раз уже начал понимать это, методом тыка и пробы ))) Спасибо Вам огромное!!!

Добавлено через 4 минуты
Цитата Сообщение от KoGG Посмотреть сообщение
недопустимые символы в именах.
Это какие? могли бы просветить меня в этом? И есть ли такая возможность пропускающая эти самые "недопустимые" символы?
0
5606 / 1592 / 412
Регистрация: 23.12.2010
Сообщений: 2,382
Записей в блоге: 1
15.01.2016, 16:30 9
Недопустимые символы:
*|\ :"<>? /
1
15.01.2016, 16:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2016, 16:30
Помогаю со студенческими работами здесь

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

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

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

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

Удалить пробелы в начале и конце ячеек выделенных столбцов ячеек
Доброй ночи! Имеется excel файл с большим количеством страниц, строк и столбцов. В ячейках:...

Как заместо диапазона A1:B5 сделать диапазон выделенных ячеек
Sub Start() FC Range(&quot;A1:B5&quot;) End Sub Sub FC(Rg As Range) Dim srznach As Double...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru