Страницы: 1
RSS
Автоматическое формирование гиперссылок на папки
 
Добрый день.
Передо мной стоит задача создать реестр.
Есть более ста папок на диске, в них файлы.
Есть файл excel где в первом столбце будут названия этих папок и гиперссылка на физическую папку, при нажатии на которую откроется папка.
Ручками очень долго в каждую ячейку писать название папки а потом еще и гиперссылку ставить. Подскажите как автоматизировать этот процесс?
Заранее благодарен.
 
Здравия. Используйте формулу ГИПЕРССЫЛКА().

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Я имею ввиду, как сделать так что бы все папки подряд или в алфавитном порядке сами записались в ячейки и создались на физические папки гиперссылки.
Как будто бы я все папки скопировал, и вставил их в таблицу (но только названия с гиперссылками на них.
 
Александр Джовжыев, прочитайте правила форума относительно файла-примера.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Согласен с JayBhagavan,
Но постараюсь понять и помочь :)
При условии что у вас офис 2010-2013 и стоит надстройка Power Query (далее PQ)
1. Перейдите на вкладку PQ
2. Кликните на Получение внешних данных - из файла
3. Появится дополнительное меню - в котором необходимо выбрать "из папки".
4. В новом диалоговом окне выбирайте каталог, в котором будет производиться чтение папок (на самом деле чтение будет всего содержимого), Нажмите ОК
5. В редакторе PQ удалите все столбцы кроме Folder Path
6. Выделите столбец Folder Path и примените действие "удалить повторения"
6. Нажмите на кнопку "Закрыть и загрузить"
Вы получите список путей всех папок (в том числе и вложенных). Но пока без гиперссылки.
Далее воспользуйтесь предложенным вариантом JayBhagavan, создайте рядом столбец и пропишите формулу ГИПЕРССЫЛКА().
Это самый простой и действенный способ. Тем более, что он динамический (обновляемый)...
Ну а далее можно фантазировать с одним только исключением. Прописанная формула будет действовать только в текущем диапазоне запроса. Допустим у вас получится 100 записей и создав столбец с формулой "гиперссылка", вы получите 100 гиперссылок. Но если при обновлении у вас будет уже 110 записей, то формула автоматом не пропишется на последние 10 срок. Надо будет ручками протянуть. А если наоборот, количество строк станет меньше, то ничего делать не надо....
 
Цитата
как сделать так что бы все папки подряд или в алфавитном порядке сами записались в ячейки и создались на физические папки гиперссылки
надо-то было всего лишь воспользоваться поиском...
http://excelvba.ru/code/FilenamesCollection
http://excelvba.ru/code/SubFoldersCollection
http://excelvba.ru/code/FilenamesList
 
Цитата
написал:
6. Выделите столбец Folder Path и примените действие "удалить повторения"
Добрый день! А, если не появляется такой столбец...?
Цитата
написал:
Вы получите список путей всех папок (в том числе и вложенных).
А как они могут получится, если это итоговый файл эксель, в котором только прописаны названия папок и файлов... как PQ может понять в каких они папках находятся?
 
JERY, тогда нужны скриншоты как действуете и что не получается обнаружить
 
Напишите в ячейку путь. Макрос заполнит ячейки, расположенные ниже, ссылками на папки.
Код
Sub Ссылки_на_папки()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim mainFolder As String
    mainFolder = ActiveCell.Value
    
    Dim printCell As Range
    Set printCell = ActiveCell
    
    If Not fso.FolderExists(mainFolder) Then mainFolder = ThisWorkbook.Path & "\"
    
    Dim sbFolder As Object
    For Each sbFolder In fso.GetFolder(mainFolder).SubFolders
        Set printCell = printCell.Cells(2, 1)
        
        printCell.Parent.Hyperlinks.Add Anchor:=printCell, Address:=sbFolder, TextToDisplay:=sbFolder.Name
    Next
End Sub
 
С рекурсивной обработкой вложенных папок, каждый следующий уровень располагается правее.
Код
Option Explicit
Public fso As Object

Sub Ссылки_на_папки()
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim mainFolder As String
    mainFolder = ActiveCell.Value
    
    Dim printCell As Range
    Set printCell = ActiveCell
    
    If Not fso.FolderExists(mainFolder) Then mainFolder = ThisWorkbook.Path & "\"
    
    FolderJob mainFolder, printCell
    
End Sub

Private Sub FolderJob(ByVal sFolder As String, printCell As Range)
    Set printCell = printCell.Cells(1, 2)
    
    Dim sbFolder As Object
    For Each sbFolder In fso.GetFolder(sFolder).SubFolders
        Set printCell = printCell.Cells(2, 1)
        printCell.Parent.Hyperlinks.Add Anchor:=printCell, Address:=sbFolder, TextToDisplay:=sbFolder.Name
        
        FolderJob sbFolder, printCell
    Next
    Set printCell = printCell.Cells(1, 0)
End Sub
 
Цитата
написал:
JERY , тогда нужны скриншоты как действуете и что не получается обнаружить
Если вы имели ввиду импорт метаданных из папок, тогда получается. Но, если делать "Из Excel, то там такой столбец не выходит.
Но даже, если я вывел путь, то что мне это дает? Мне нужно руками вставлять в мою первоначальную таблицу или как?
Изменено: JERY - 05.11.2024 13:05:26
 
Вариант с выводом списка папок и файлов.
Код
Option Explicit
Public fso As Object

Sub Ссылки_на_папки_и_файлы()
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim mainFolder As String
    mainFolder = ActiveCell.Value
    
    Dim printCell As Range
    Set printCell = ActiveCell
    
    If Not fso.FolderExists(mainFolder) Then mainFolder = ThisWorkbook.Path & "\"
    
    FolderJob mainFolder, printCell
    
End Sub

Private Sub FolderJob(ByVal sFolder As String, printCell As Range)
    Set printCell = printCell.Cells(1, 2)
    
    Dim obj As Object
    For Each obj In fso.GetFolder(sFolder).Files
        Set printCell = printCell.Cells(2, 1)
        printCell.Parent.Hyperlinks.Add Anchor:=printCell, Address:=obj, TextToDisplay:=obj.Name
    Next
    
    For Each obj In fso.GetFolder(sFolder).SubFolders
        Set printCell = printCell.Cells(2, 1)
        printCell.Parent.Hyperlinks.Add Anchor:=printCell, Address:=obj, TextToDisplay:=obj.Name
        
        FolderJob obj, printCell
    Next
    Set printCell = printCell.Cells(1, 0)
End Sub
 
Цитата
написал:
Напишите в ячейку путь. Макрос заполнит ячейки, расположенные ниже, ссылками на папки.
Я изначально не знаю этот путь...
А код, который вы прописали, что с ним делать, не совсем понимаю...?
 
Цитата
написал:
А код, который вы прописали, что с ним делать, не совсем понимаю...?
Создание макросов и пользовательских функций на VBA (planetaexcel.ru)
 
Цитата
написал:
Создание макросов и пользовательских функций на VBA (planetaexcel.ru)
Это сложно.
А можно как-то через PQ и PP связать? Или может, если у меня есть 1 файл, где есть суммы и названия файлов, а в другом только название файлов и их путь, то реально через PP как-то связать эти 2 файла, чтобы выходил 1 файл с названиями, суммами и путем? Тогда бы я мог прописать Гиперссылку на мои почти полмиллиона строк. Я пытаюсь так сделать, но почему-то выходит ошибка: "Сводная таблица не помещается на листе..."
Страницы: 1
Читают тему
Наверх