Страница 1 из 1

Как извлечь имя файла из гиперссылки в ячейке?

Добавлено: 02 май 2009, 17:39
district
Уважаемые, помогите советом.

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

Предполагал сделать следующее:

Код: Выделить всё

for each cel in .range (rrr)
   'код определения содержит ли ячейка гиперссылку
    for each workbook in workbooks
        if workbook.name = .Range(yyy).Hyperlinks(1).Name then
             'следующая ячейка с гиперссылкой
             exit for
        else
            'открываю гиперссылку в рассматриваемой ячейке
        end if
   next
next
Вроде все просто, но проблема встала такая: .Range(yyy).Hyperlinks(1).Name (да и .Range(yyy).Hyperlinks(1).address) выдают какую-то укороченную версию пути - ../../../ddd/eee/. Чисто имя открываемого файла вычленить никак не могу. В результате не знаю как при открытии макросом гиперссылок определить какие из них открывать не надо ибо файл уже открыт.

Re: Как извлечь имя файла из гиперссылки в ячейке?

Добавлено: 02 май 2009, 22:24
Naeel Maqsudov
Это не "укороченная версия", а относительный путь. По нему нормально должен открываться файл.

Re: Как извлечь имя файла из гиперссылки в ячейке?

Добавлено: 02 май 2009, 23:45
district
Да и открывается, но мне-то перед открытием нужно понять не открыт ли файл по гиперссылке уже. Если уже открыт, то зачем открывать пытаться. Для этого и применяю цикл перебора открытых книг и сравнивание их имен с именем открываемого по гиперссылке файла. Проблема в том, что вычленить чистое имя файла из гиперссылки у меня не получается ни с помощью address ни с помощью name.

Re: Как извлечь имя файла из гиперссылки в ячейке?

Добавлено: 03 май 2009, 00:59
Aent
Попробуйте воспользоваться функцией DIR

Код: Выделить всё

sFileName = Dir(FileName_with_Path)

Re: Как извлечь имя файла из гиперссылки в ячейке?

Добавлено: 19 май 2009, 02:03
district
Не помогло - выдает пустоту. Но додумался до альтернативного подхода:

for each workbook in workbooks
If InStr(адрес гиперссылки, Workbook.Name) <> 0 Then
exit for
end if
next

То есть если адрес гиперссылки содержит имя хотя бы одного из открытых файлов цикл завершается.

Re: Как извлечь имя файла из гиперссылки в ячейке?

Добавлено: 23 май 2009, 13:51
Naeel Maqsudov
&quot писал(а):Если уже открыт, то зачем открывать пытаться. Для этого и применяю цикл перебора открытых книг и сравнивание их имен с именем открываемого по гиперссылке файла

Это лишняя работа!
Excel никогда не открывает одну и ту же книгу дважды в рамках одного экзкмпляра Excel. А если вызывать .Follow или .Follow(true), то это как раз в рамках одного экземпляра и происходит.
Просто происходит активация окна книги, если таковая открыта

(А в рамках другого экземпляра Excel всегда появляется запрос "Файл уже используется")

Re: Как извлечь имя файла из гиперссылки в ячейке?

Добавлено: 25 май 2009, 13:13
district
Сорри, код надо было мне пошире представить. Применяю не .folow, а

With Workbooks.Open(Filename:=ActiveCell.Hyperlinks(1).Address, ReadOnly:=True, Password:="XXXXX")

, поскольку открываемые по гиперссылкам файлы - под паролем. Даже паролями (при открытии система перебирает определенную мной комбинацию паролей). Надеялся, что каким-то чудом excel будет определять как в случае c follow сам открыт файл или нет, однако :( . Вот и выкрутился вышеприведенным образом.

Код написал - тестирую, вроде все работает. Но так и не понял до конца как в моем случае относительный путь гиперссылки на файл конвертировать в название файла или в полный путь, чтобы можно было его сравнить с путем или именем открытой книги. Такой код был бы более все-таки надежен и правилен на мой взгляд, чем InStr.