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

Создание новой папки, когда выбрана ячейка с ее именем

17.03.2013, 01:45. Показов 4361. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Друзья, помогите справится с задачей

То что есть:

Есть база заказов (документ Excel), в одной из ячеек ссылка на адрес папки конкретного заказа (например D:\База\122)
Номер берется из другой ячейки
=ГИПЕРССЫЛКА("D:\База\"&A1; 1)

Вопрос:

Как сделать так чтобы при нажатии на ссылку в документе Excel в директории D:\База\ происходило создание папки с заданным номером

Мои фантазии по этому поводу:

Положить в D:\База\ bat-файл, который умеет создавать папки с тем именем с которым его просят, а ссылку прописать как ссылку на bat-файл с указанием в ней нужного имени новой папки
При таком варианте нужен bat-файл и формат запроса к нему. Но принимаются так же другие подходы к решению
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2013, 01:45
Ответы с готовыми решениями:

Создание копии папки со случайным именем и копирование ее (папки) в заданный раздел
Подскажите как сделать в .bat создание копии папки со случайным именем и копирование ее (папки) в...

создание 200 листов с нумерованным именем, и ячейка в каждом отображает номер листа
здравствуйте, помогите с нестандартной задачей. Нужно сделать 200 листов с именами 1, 2, 3 и т.д....

Если выбрана конкретная ячейка DataGridView - включить проигрывание файла m3u
Я создаю свою программу для прослушивания радио. Названия радиостанций и другие данные хранятся в...

В ListBox с помощью RowSource выбрана ячейка, как внести в нее текст из TextBox?
В ListBox с помощью RowSource выбрана ячейка, как внести в нее текст из TextBox. Заранее спасибо.

23
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 8
18.03.2013, 18:51 2
Если я Вас верно понял, то батник такой будет:

Bash
1
2
3
4
5
6
7
@echo off
chcp 1251>nul
 
setlocal enabledelayedexpansion
 
set /p name=Введите имя папки: 
mkdir "D:\База\%name%\"
ну а ссылку на батник, думаю сами догадаетесь, как в Exel сделать..
0
3 / 3 / 0
Регистрация: 17.03.2013
Сообщений: 64
18.03.2013, 19:33  [ТС] 3
Решение найдено

Bash
1
2
3
@SET SOMEPREFIX_BASEDIR=D:\Base
@MKDIR %SOMEPREFIX_BASEDIR%\%1
@IF NOT EXIST %SOMEPREFIX_BASEDIR%\%1 PING -n 10 127.0.0.1 > NUL
Запрос к такому файлу выглядит вот так

Код
D:\Base\newfolder.bat 122
Всем спасибо
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
19.03.2013, 01:29 4
Тогда лучше с кавычками. Вдруг перенесете базу в папку с пробелами.
Bash
2
3
MKDIR "%SOMEPREFIX_BASEDIR%\%1"
IF NOT EXIST "%SOMEPREFIX_BASEDIR%\%1" PING -n 10 127.0.0.1 > NUL
Строка № 3 на случай, если папка будет защищена от записи?

А почему не макросами?
Запуск CMD ведь вызывает дополнительное окно безопасности.
Миниатюры
Создание новой папки, когда выбрана ячейка с ее именем  
0
3 / 3 / 0
Регистрация: 17.03.2013
Сообщений: 64
19.03.2013, 14:58  [ТС] 5
Цитата Сообщение от Dragokas Посмотреть сообщение
А почему не макросами?
Да наверное потому что не умею С чем имел дело на то и подумал. Инерция мышления...

Все таки вы правы, вариант с CMD не подходит. А причина в том что Excel читает ссылку "D:\Base\newfolder.bat 122" как ссылку на отдельный файл (без переменной) и соответственно не находит файла по имени "newfolder.bat 122".

Так что вопрос с макросом актуален...
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
19.03.2013, 15:27 6
Вам необходимо открыть книгу.
Нажать левый ALT+F11.
В левом окошке "Project" (или меню "View" -> "Project Explorer", если такого окна не видно)
дважды кликнуть на Thisworkbook (либо "ЭтаКнига").
Подстроить под себя и внести такой код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    '// Проверяем, что выделенная ячейка пересеклась с колонкой "А"
    If Not Intersect(Target, Columns("A")) Is Nothing Then
        '//Проверяем, что это не первая строка (там у нас будет заголовок таблицы)
        If Target.Row <> 1 Then
            '// Проверяем, что ячейка не пуста
            If Len(Target.Value) <> 0 Then
                '// На всякий случай - предотвращение ошибок во время файловых операций
                On Error Resume Next
                '// Внимание Mkdir (в отличие от DOS-версии) не умеет создавать цепочку папок
                '// Это означает, что папка, в которой нужно создавать новую, уже должна существовать
                Dim HomeDir$
                HomeDir = "c:\users\alex\desktop\test" '// Задаем исходную папку (у Вас - это: "D:\Base")
                MkDir (HomeDir & "\" & Target.Value)
                On Error GoTo 0
            End If
        End If
    End If
End Sub
Рабочий пример книги прикрепил.

 Комментарий модератора 
Тема перенесена в раздел VBA, как не имеющая практического значения для раздела Batch.
Вложения
Тип файла: xls Create_Folders_by_Cell_Click.xls (34.0 Кб, 28 просмотров)
1
3 / 3 / 0
Регистрация: 17.03.2013
Сообщений: 64
19.03.2013, 16:08  [ТС] 7
Круто!
Есть 2 момента

Как сделать так чтобы попка для А2 создавалась только при клике на ячейку В2? Или на какую нибудь другую кнопку на ленте. Главное чтобы одним кликом.
Изображения
 
0
3 / 3 / 0
Регистрация: 17.03.2013
Сообщений: 64
19.03.2013, 16:20  [ТС] 8
Второй нюанс:
Visual Basic
1
2
        '//Проверяем, что это не первая строка (там у нас будет заголовок таблицы)
        If Target.Row <> 1 Then
В оригинале таких строк с заголовками в начале документа целых 6, база начинается с 7 строчки.
Как указать что их 6?

PS: Поражаюсь как программистам удается так легко писать код. Респект
0
695 / 236 / 18
Регистрация: 17.01.2011
Сообщений: 583
Записей в блоге: 1
19.03.2013, 16:38 9
Можно так:
Visual Basic
1
 If Target.Row > 6   Then
0
Заблокирован
19.03.2013, 16:46 10
dzug, старина ты где пропадаешь?

Добавлено через 2 минуты
Dragokas, ответь в скайп имей совесть
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
19.03.2013, 17:13 11
1)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    '// Проверяем, что выделенная ячейка пересеклась с колонкой "А"
    If Not Intersect(Target, Columns("B")) Is Nothing Then
        '//Проверяем, что это не первая строка (там у нас будет заголовок таблицы)
        If Target.Row <> 1 Then
            '// Проверяем, что ячейка не пуста
            If Len(Target.offset(0,-1).Value) <> 0 Then
                '// На всякий случай - предотвращение ошибок во время файловых операций
                On Error Resume Next
                '// Внимание Mkdir (в отличие от DOS-версии) не умеет создавать цепочку папок
                '// Это означает, что папка, в которой нужно создавать новую, уже должна существовать
                Dim HomeDir$
                HomeDir = "c:\users\alex\desktop\test" '// Задаем исходную папку (у Вас - это: "D:\Base")
                MkDir (HomeDir & "\" & Target.offset(0,-1).Value)
                On Error GoTo 0
            End If
        End If
    End If
End Sub
0
3 / 3 / 0
Регистрация: 17.03.2013
Сообщений: 64
19.03.2013, 20:19  [ТС] 12
Зашебись!!
Ребята, вы волшебники!

И так... Для тех кто будет искать решение той же задачи подведу итог.

К сообщению прикреплен файл Excel, там макрос который делает следующее
Когда мы выбираем ячейку B2, он создает на компьютере в папке "D:\Base\" папку с именем которое обозначено в ячейке A2. Тот же эффект для всех других ячеек кроме первой строки (в ней заголовок). Адрес папки, где будет создаваться новая папка, можно изменить нажав левый Alt+F11 и выбрав "Эта книга".
А по ссылке в столбике C можно сразу перейти в созданую папку

Способы применения: создание папки для каждого заказа прямо из базы заказов в excel

Всем респект за помощь
Огромное спасибо Стасу (Dragokas)
Миниатюры
Создание новой папки, когда выбрана ячейка с ее именем  
Вложения
Тип файла: xls Create_Folders_by_Cell_Click .xls (44.0 Кб, 33 просмотров)
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
20.03.2013, 01:52 13
Защита от ошибки, когда выделено несколько ячеек.
Гиперссылки создаются автоматически и только когда создание папки прошло без ошибок.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    '// Проверяем, что выделенная ячейка пересеклась с колонкой "А"
    If Not Intersect(Target, Columns("B")) Is Nothing Then
        '//Проверяем, что это не первая строка (там у нас будет заголовок таблицы)
        If Target.Row <> 1 Then
            If Target.Cells.Count = 1 Then '// Если выделена только одна ячейка
                '// Проверяем, что ячейка не пуста
                If Len(Target.Offset(0, -1).Value) <> 0 Then
                    '// На всякий случай - предотвращение ошибок во время файловых операций
                    On Error Resume Next
                    '// Внимание Mkdir (в отличие от DOS-версии) не умеет создавать цепочку папок
                    '// Это означает, что папка, в которой нужно создавать новую, уже должна существовать
                    Dim HomeDir$
                    HomeDir = "c:\users\alex\desktop" '// Задаем исходную папку (у Вас - это: "D:\Base")
                    MkDir (HomeDir & "\" & Target.Offset(0, -1).Value)
                    If Err = 0 Then Cells(Target.Row, "C").Formula = "=HYPERLINK(""" & HomeDir & "\""&A" & Target.Row & ","">>>"")"
                End If
            End If
        End If
    End If
End Sub
2
3 / 3 / 0
Регистрация: 17.03.2013
Сообщений: 64
23.03.2013, 21:41  [ТС] 14
А как сделать чтобы этот макрос действовал только на одном листе?
Название листа База
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
23.03.2013, 23:08 15
Строку № 3 заменить на:

Visual Basic
3
If Not Intersect(Target, Columns("B")) Is Nothing and target.Parent.name = "База" Then
2
Заблокирован
24.03.2013, 08:11 16
Цитата Сообщение от Dragokas Посмотреть сообщение
Visual Basic
1
If Not Intersect(Target, Columns("B")) Is Nothing and target.Parent.name = "База" Then
Visual Basic
1
If Not Intersect(Target, Columns("B")) Is Nothing and sh.name = "База" Then

А ещё правильнее
Цитата Сообщение от _Exhaust_ Посмотреть сообщение
сделать чтобы этот макрос действовал только на одном листе?
- правой кнопкой мыши на ярлычке листа База - выбрать Исходный текст.
В событие
Visual Basic
1
2
3
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 
End Sub
перенести (а не скопировать) имеющийся код.
Соответствующее событие будет работать только для этого листа без излишних проверок.
1
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 18
05.05.2014, 01:27 17
Друзья нужно чтобы новая папка создавалась в определенной папке в зависимости от значения в ячейке B2
в ячейке А2 имя клиента в ячейке В2 выбираем имя менеджера и в ячейке С2 ссылка на папку с именем клиента в папке менеджера
Заранее спасибо очень надо!

Добавлено через 3 минуты
Dragokas, Друг нужно чтобы новая папка создавалась в определенной папке в зависимости от значения в ячейке B2
в ячейке А2 имя клиента в ячейке В2 выбираем имя менеджера и в ячейке С2 ссылка на папку с именем клиента в папке менеджера
Заранее спасибо очень надо!
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
05.05.2014, 02:12 18
Devid69, здравствуйте !

1. Приведите пример листа.
2. Приведите пример полного пути к папке, которая должна быть создана.
3. При наступлении какого события создавать папку?
4. Папка с именем клиента заранее существует?
1
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 18
05.05.2014, 21:38 19
Dragokas, Спасибо за отклик!
Папка с именем клиента должна создаватся в папке менеджера
в зависимости от выбора менеджера в ячейке В2
если Иванов то соответствено в папке Иванова
если ячейка В2 пуста то папка не должна создаватся
пример пути при выборе Иванов C:\Менеджер\Иванов
0
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 18
05.05.2014, 21:42 20
вот пример
Вложения
Тип файла: rar Новая папка.rar (7.1 Кб, 14 просмотров)
0
05.05.2014, 21:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2014, 21:42
Помогаю со студенческими работами здесь

Создание папки с заданным именем
Открыт word документ с номером, к примеру 90.doc, необходимо создать в каталоге папку,...

Создание папки с уникальным именем
Разработать сценарий, получающий в качестве аргумента имя целевой папки. Сценарий должен создать в...

Создание папки с именем, указанным в TextBox
Private Sub cmdCr_fol_Click() Dim fr As String fr = txtCr_fol.Text MkDir...

Создание новой папки и проверка имеющейся
Всем привет! Вопрос 1: Как исправить макрос, чтобы он проверял на наличие уже существующей папки...


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

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