Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Добавление гиперссылок на папки с неизвестным окончанием. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавление гиперссылок на папки с неизвестным окончанием. (Макросы/Sub)
Добавление гиперссылок на папки с неизвестным окончанием.
Filmion Дата: Суббота, 22.08.2015, 13:17 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Уважаемые Товарищи!
Прошу помочь в решение задачи касающиеся гиперссылок.

Есть заявки на обеспечение которые лежат на сетевом диске Z:\заявки\подразделение\дата в формате(год-месяц-число)пробел подразделение-номер заявки ( окончание которое изменяется)*

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

И есть у меня файл куда забиваются данные, которые выглядят следующим образом

столбец-подразделение столбец-№заявки столбец- дата заявки ( в формат 10.12.2014)

Да как вот гиперссылку на данные папки исходя что часть названия папки известно и забита в таблицу эксель а про конец ничего не известно ( начало папки уникальное и неизменное)

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

Надеюсь на Вашу отзывчивость.
[moder]Прочитайте п.2 Правил форума. О чем название Вашей темы? Конкретизируйте его.
К сообщению приложен файл: 3638888.xlsx (15.6 Kb)


Сообщение отредактировал Filmion - Суббота, 22.08.2015, 18:41
 
Ответить
СообщениеУважаемые Товарищи!
Прошу помочь в решение задачи касающиеся гиперссылок.

Есть заявки на обеспечение которые лежат на сетевом диске Z:\заявки\подразделение\дата в формате(год-месяц-число)пробел подразделение-номер заявки ( окончание которое изменяется)*

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

И есть у меня файл куда забиваются данные, которые выглядят следующим образом

столбец-подразделение столбец-№заявки столбец- дата заявки ( в формат 10.12.2014)

Да как вот гиперссылку на данные папки исходя что часть названия папки известно и забита в таблицу эксель а про конец ничего не известно ( начало папки уникальное и неизменное)

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

Надеюсь на Вашу отзывчивость.
[moder]Прочитайте п.2 Правил форума. О чем название Вашей темы? Конкретизируйте его.

Автор - Filmion
Дата добавления - 22.08.2015 в 13:17
EvgenyD Дата: Суббота, 22.08.2015, 14:35 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 74
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Filmion, я бы в меру своих знаний сделал как-то так. Уверен, что в формировании имени и пути где-то не попал, т.к. по Вашим описаниям не все конкретно указано.

[moder]Замечание устранено. Ответ открыт[/moder]
К сообщению приложен файл: _3638888.xlsm (21.4 Kb)


Сообщение отредактировал Pelena - Суббота, 22.08.2015, 19:16
 
Ответить
СообщениеFilmion, я бы в меру своих знаний сделал как-то так. Уверен, что в формировании имени и пути где-то не попал, т.к. по Вашим описаниям не все конкретно указано.

[moder]Замечание устранено. Ответ открыт[/moder]

Автор - EvgenyD
Дата добавления - 22.08.2015 в 14:35
Filmion Дата: Суббота, 22.08.2015, 18:45 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Модератор:
Прочитайте п.2 Правил форума. О чем название Вашей темы? Конкретизируйте его.


Надеюсь теперь нормально.

С уважением Filmion
 
Ответить
Сообщение
Модератор:
Прочитайте п.2 Правил форума. О чем название Вашей темы? Конкретизируйте его.


Надеюсь теперь нормально.

С уважением Filmion

Автор - Filmion
Дата добавления - 22.08.2015 в 18:45
KSV Дата: Воскресенье, 23.08.2015, 07:38 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
EvgenyD, что-то у вас все как-то "сложно" написано...
Сделал попроще :)
Переделал гиперссылки (чтоб при изменении путей не лазить в макросы) и написал маленькую UDF [vba]
Код
Function ПУТЬ(ByVal sPath As String) As String
     Dim i&, sDir$
     i = InStrRev(sPath, Application.PathSeparator)
     If i Then sDir = Left$(sPath, i)
     ПУТЬ = sDir & Dir$(sPath, vbDirectory)
End Function
[/vba] (теперь гиперссылки будут открывать папки, даже если потом поменять хвостик в имени)

чтобы при нажатии по ячейки счет можно было бы выбрать счет который лежит в папке с заявкой
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     If Target.Column <> 7 Then Exit Sub
     If Target.Row = 1 Then Exit Sub ' эту строчку можно убрать, т.к. будет корректно работать и без этой проверки
     Dim p$: p = Target(, -1) & Application.PathSeparator
     Dim f$: f = Dir$(p & "Договор " & Target & ".*")
     If Len(f) Then Shell "explorer " & p & f, vbNormalFocus: Cancel = True
End Sub
[/vba] Так, по двойному клику в ячейках столбца G, будут открываться файлы "Договор *.*", независимо от того, в каком формате они хранятся.

[p.s.]А если у вас все договоры хранятся в одном формате (например, в Word'овском), то можно чуть упростить [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     If Target.Column <> 7 Then Exit Sub
     If Target.Row = 1 Then Exit Sub ' эту строчку можно убрать, т.к. будет корректно работать и без этой проверки
     Dim p$: p = Target(, -1) & Application.PathSeparator & "Договор " & Target & ".doc"
     If Len(Dir$(p)) Then Shell "explorer " & p, vbNormalFocus: Cancel = True
End Sub
[/vba][/p.s.]

[p.s.]На всякий случай, в архиве структура каталогов, на которой все проверял.[/p.s.]
К сообщению приложен файл: 3638888_.xlsm (23.6 Kb) · Disk_Z.zip (92.0 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеEvgenyD, что-то у вас все как-то "сложно" написано...
Сделал попроще :)
Переделал гиперссылки (чтоб при изменении путей не лазить в макросы) и написал маленькую UDF [vba]
Код
Function ПУТЬ(ByVal sPath As String) As String
     Dim i&, sDir$
     i = InStrRev(sPath, Application.PathSeparator)
     If i Then sDir = Left$(sPath, i)
     ПУТЬ = sDir & Dir$(sPath, vbDirectory)
End Function
[/vba] (теперь гиперссылки будут открывать папки, даже если потом поменять хвостик в имени)

чтобы при нажатии по ячейки счет можно было бы выбрать счет который лежит в папке с заявкой
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     If Target.Column <> 7 Then Exit Sub
     If Target.Row = 1 Then Exit Sub ' эту строчку можно убрать, т.к. будет корректно работать и без этой проверки
     Dim p$: p = Target(, -1) & Application.PathSeparator
     Dim f$: f = Dir$(p & "Договор " & Target & ".*")
     If Len(f) Then Shell "explorer " & p & f, vbNormalFocus: Cancel = True
End Sub
[/vba] Так, по двойному клику в ячейках столбца G, будут открываться файлы "Договор *.*", независимо от того, в каком формате они хранятся.

[p.s.]А если у вас все договоры хранятся в одном формате (например, в Word'овском), то можно чуть упростить [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     If Target.Column <> 7 Then Exit Sub
     If Target.Row = 1 Then Exit Sub ' эту строчку можно убрать, т.к. будет корректно работать и без этой проверки
     Dim p$: p = Target(, -1) & Application.PathSeparator & "Договор " & Target & ".doc"
     If Len(Dir$(p)) Then Shell "explorer " & p, vbNormalFocus: Cancel = True
End Sub
[/vba][/p.s.]

[p.s.]На всякий случай, в архиве структура каталогов, на которой все проверял.[/p.s.]

Автор - KSV
Дата добавления - 23.08.2015 в 07:38
Filmion Дата: Воскресенье, 23.08.2015, 11:50 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Спасибо!
Сегодня вечером буду пробовать, если получится.

Об результатах отпишусь.
 
Ответить
СообщениеСпасибо!
Сегодня вечером буду пробовать, если получится.

Об результатах отпишусь.

Автор - Filmion
Дата добавления - 23.08.2015 в 11:50
Filmion Дата: Воскресенье, 23.08.2015, 12:23 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
чтобы при нажатии по ячейки счет можно было бы выбрать счет который лежит в папке с заявкой
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column <> 7 Then Exit Sub
    If Target.Row = 1 Then Exit Sub ' эту строчку можно убрать, т.к. будет корректно работать и без этой проверки
    Dim p$: p = Target(, -1) & Application.PathSeparator
    Dim f$: f = Dir$(p & "Договор " & Target & ".*")
    If Len(f) Then Shell "explorer " & p & f, vbNormalFocus: Cancel = True
End Sub
Так, по двойному клику в ячейках столбца G, будут открываться файлы "Договор *.*", независимо от того, в каком формате они хранятся.


Вот это почему то не работает, при двойном нажатии по столбцу G не открываются файлы и папки с файлами тоже не открываются.
Столбец Е вроде работает.

По поводу файлов:

1.Договора которые лежат в папке с заявкой хранятся в PDF формате.
3. В одной папке с заявкой лежат:
a. сама заявка
б. договора ( ни один их несколько.)

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

Было бы хорошо если не пришлось пользователей строго заставлять называть файлы согласно какому то алгоритму (люди ошибаются, человеческий фактор)
Договора как правила называют номером договора, датой и поставщиком. ( называют по разному Пример: Сч. №777 от 12.12.2012 - ООО Медиа, Сч. №777 от 12.12.12 - Медиа,)
самое неизменное тут номер договора и номер заявки.

Вечером приду постараюсь детально просмотреть что Вы написали и детально описать проблемы.
Эксель с помощью VBA творит чудеса.
 
Ответить
Сообщение
чтобы при нажатии по ячейки счет можно было бы выбрать счет который лежит в папке с заявкой
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column <> 7 Then Exit Sub
    If Target.Row = 1 Then Exit Sub ' эту строчку можно убрать, т.к. будет корректно работать и без этой проверки
    Dim p$: p = Target(, -1) & Application.PathSeparator
    Dim f$: f = Dir$(p & "Договор " & Target & ".*")
    If Len(f) Then Shell "explorer " & p & f, vbNormalFocus: Cancel = True
End Sub
Так, по двойному клику в ячейках столбца G, будут открываться файлы "Договор *.*", независимо от того, в каком формате они хранятся.


Вот это почему то не работает, при двойном нажатии по столбцу G не открываются файлы и папки с файлами тоже не открываются.
Столбец Е вроде работает.

По поводу файлов:

1.Договора которые лежат в папке с заявкой хранятся в PDF формате.
3. В одной папке с заявкой лежат:
a. сама заявка
б. договора ( ни один их несколько.)

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

Было бы хорошо если не пришлось пользователей строго заставлять называть файлы согласно какому то алгоритму (люди ошибаются, человеческий фактор)
Договора как правила называют номером договора, датой и поставщиком. ( называют по разному Пример: Сч. №777 от 12.12.2012 - ООО Медиа, Сч. №777 от 12.12.12 - Медиа,)
самое неизменное тут номер договора и номер заявки.

Вечером приду постараюсь детально просмотреть что Вы написали и детально описать проблемы.
Эксель с помощью VBA творит чудеса.

Автор - Filmion
Дата добавления - 23.08.2015 в 12:23
KSV Дата: Воскресенье, 23.08.2015, 14:12 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
по столбцу G не открываются файлы и папки с файлами тоже не открываются
Поэтому я и приложил архив со структурой каталогов диска Z, такой, как я ее понял из вашего описания (хотя, по-хорошему, это вы должны были приложить подобный архив со своей структурой и несколькими файлами (можно пустыми, лишь было понятно, как они у вас называются, хотя бы примерно), лежащими в ваших папках, в качестве примера, чтоб мы не гадали, что у вас, да как).
Разархивируйте мой архив в корень какого-нибудь диска, например D, замените в гиперссылке букву диска с Z на D, и попробуйте, чтобы понять что и как работает в примере.

самое неизменное тут номер договора
Тогда, можно указать маску, типа: [vba]
Код
    Dim f$: f = Dir$(p & "Сч. " & Target & "*.pdf")
[/vba] или вообще [vba]
Код
    Dim f$: f = Dir$(p & "Сч.*.pdf")
[/vba] если PDF-файл, начинающийся на "Сч.", в каждой папке только один.
Короче, только вы знаете, как у вас называются (или могут называться) файлы, а мы не экстрасенсы.


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
по столбцу G не открываются файлы и папки с файлами тоже не открываются
Поэтому я и приложил архив со структурой каталогов диска Z, такой, как я ее понял из вашего описания (хотя, по-хорошему, это вы должны были приложить подобный архив со своей структурой и несколькими файлами (можно пустыми, лишь было понятно, как они у вас называются, хотя бы примерно), лежащими в ваших папках, в качестве примера, чтоб мы не гадали, что у вас, да как).
Разархивируйте мой архив в корень какого-нибудь диска, например D, замените в гиперссылке букву диска с Z на D, и попробуйте, чтобы понять что и как работает в примере.

самое неизменное тут номер договора
Тогда, можно указать маску, типа: [vba]
Код
    Dim f$: f = Dir$(p & "Сч. " & Target & "*.pdf")
[/vba] или вообще [vba]
Код
    Dim f$: f = Dir$(p & "Сч.*.pdf")
[/vba] если PDF-файл, начинающийся на "Сч.", в каждой папке только один.
Короче, только вы знаете, как у вас называются (или могут называться) файлы, а мы не экстрасенсы.

Автор - KSV
Дата добавления - 23.08.2015 в 14:12
Filmion Дата: Понедельник, 24.08.2015, 19:24 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
[moder]Не нужно цитировать весь пост. Об этом в Правилах форума написано[/moder]

Уважаемый KSV!
Приношу свои извинения за плохой подход к вопросу.
Вот ссылка на архив с нашей структурой и файлами и таблицей экселя: https://drive.google.com/file....sharing
Загрузить на сайт не получилось т.к. весит он больше 100кб. ( Надеюсь администрация меня за это не накажет)

Надеюсь теперь вы сможете мне помочь.

прикрутить из вашего примера в свою рабочую таблицу у меня не получилось,т.к.:
1.путь до файлов не совсем такой как я написал изначально

Я поигрался с гиперссылкой и при вычисление формулы поэтапно у меня не срабатывала последнее &[@[Исх_№]]&"*" т.е. как я понимаю окончания папок ( самый последний этап вычисления мне выдавало ошибку и давала ссылку на корень с папками)
(Модуль вроде прикрутил =ПУТЬ начал появляться.)

Теперь надеюсь на Вашу помощь в уже более конкретизированном вопросе.

Цеха кстати тоже пишут порой по разному. Но данную проблему я решу проверкой данных из раскрывающегося списка.
С поставщиками если понадобится тоже проделаю такую операцию.
С уважением,
Filmion


Сообщение отредактировал _Boroda_ - Понедельник, 24.08.2015, 23:55
 
Ответить
Сообщение[moder]Не нужно цитировать весь пост. Об этом в Правилах форума написано[/moder]

Уважаемый KSV!
Приношу свои извинения за плохой подход к вопросу.
Вот ссылка на архив с нашей структурой и файлами и таблицей экселя: https://drive.google.com/file....sharing
Загрузить на сайт не получилось т.к. весит он больше 100кб. ( Надеюсь администрация меня за это не накажет)

Надеюсь теперь вы сможете мне помочь.

прикрутить из вашего примера в свою рабочую таблицу у меня не получилось,т.к.:
1.путь до файлов не совсем такой как я написал изначально

Я поигрался с гиперссылкой и при вычисление формулы поэтапно у меня не срабатывала последнее &[@[Исх_№]]&"*" т.е. как я понимаю окончания папок ( самый последний этап вычисления мне выдавало ошибку и давала ссылку на корень с папками)
(Модуль вроде прикрутил =ПУТЬ начал появляться.)

Теперь надеюсь на Вашу помощь в уже более конкретизированном вопросе.

Цеха кстати тоже пишут порой по разному. Но данную проблему я решу проверкой данных из раскрывающегося списка.
С поставщиками если понадобится тоже проделаю такую операцию.
С уважением,
Filmion

Автор - Filmion
Дата добавления - 24.08.2015 в 19:24
KSV Дата: Вторник, 25.08.2015, 03:22 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Сделал обработку дабл-кликов в ячейках столбцов C и K, и поиск соответствующих файлов в подкаталоге "Приобретение". С остальными файлами и подкаталогами даже не разбирался (доделаете по образу и подобию).
Проверил поверхностно, но, теоретически, должно обрабатывать большинство ваших несоответствий в наименованиях.
Код получился побольше из-за проверок на возможное отсутствие данных, необходимых для формирования пути и имени файла (если какие-то необходимые данные отсутствуют, то будет выдано сообщение и активирована соответствующая ячейка).


А вообще, по-хорошему, нужно не базу подгонять к кривой структуре, а лучше сразу продумать нормальную структуру уровней и имен, стандартизировать данные в БД (и в дальнейшем проверять/корректировать их еще ПРИ ВВОДЕ), и имена каталогов и файлов привести в строгое соответствие данным БД. Иначе вам придется все время дописывать код, чтобы обрабатывать все новые и новые несоответствия, которые будут допускать пользователи, а их "фантазия" безгранична.
К сообщению приложен файл: 8768140.xlsm (36.3 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеСделал обработку дабл-кликов в ячейках столбцов C и K, и поиск соответствующих файлов в подкаталоге "Приобретение". С остальными файлами и подкаталогами даже не разбирался (доделаете по образу и подобию).
Проверил поверхностно, но, теоретически, должно обрабатывать большинство ваших несоответствий в наименованиях.
Код получился побольше из-за проверок на возможное отсутствие данных, необходимых для формирования пути и имени файла (если какие-то необходимые данные отсутствуют, то будет выдано сообщение и активирована соответствующая ячейка).


А вообще, по-хорошему, нужно не базу подгонять к кривой структуре, а лучше сразу продумать нормальную структуру уровней и имен, стандартизировать данные в БД (и в дальнейшем проверять/корректировать их еще ПРИ ВВОДЕ), и имена каталогов и файлов привести в строгое соответствие данным БД. Иначе вам придется все время дописывать код, чтобы обрабатывать все новые и новые несоответствия, которые будут допускать пользователи, а их "фантазия" безгранична.

Автор - KSV
Дата добавления - 25.08.2015 в 03:22
Filmion Дата: Вторник, 25.08.2015, 19:25 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Все работает, спасибо!
Я позже задам вопрос по данному VBA. А Вас обязательно поблагодарю.
[moder]А пока замечание Вам за игнорирование указаний администрации. Очередное излишнее цитирование удалил
 
Ответить
СообщениеВсе работает, спасибо!
Я позже задам вопрос по данному VBA. А Вас обязательно поблагодарю.
[moder]А пока замечание Вам за игнорирование указаний администрации. Очередное излишнее цитирование удалил

Автор - Filmion
Дата добавления - 25.08.2015 в 19:25
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавление гиперссылок на папки с неизвестным окончанием. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!