Страницы: 1
RSS
Вставка формулы с ГИПЕРССЫЛКА макросом
 
Добрый вечер!
Пытаюсь сделать формулу ГИПЕРССЫЛКА более удобной, с возможностью выбирать путь к файлу на диске.
Код
Function GetFilePath(Optional ByVal Title As String = "Выберите файл Контракта", _
                     Optional ByVal InitialPath As String = "C:\", _
                     Optional ByVal FilterDescription As String = "Документы Adobe", _
                     Optional ByVal FilterExtention As String = "*.pdf*") As String
    ' функция выводит диалоговое окно выбора файла с заголовком Title,
    ' начиная обзор диска с папки InitialPath
    ' возвращает полный путь к выбранному файлу, или пустую строку в случае отказа от выбора
    ' для фильтра можно указать описание и расширение выбираемых файлов
    On Error Resume Next
    With Application.FileDialog(msoFileDialogOpen)
        .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath
        .Filters.Clear: .Filters.Add FilterDescription, FilterExtention
        If .Show <> -1 Then Exit Function
        GetFilePath = .SelectedItems(1): PS = Application.PathSeparator
    End With
End Function
 
Sub Гиперссылка_на_файл()
    ИмяФайла = GetFilePath ' запрашиваем имя файла
    If ИмяФайла = "" Then Exit Sub    ' выход, если пользователь отказался от выбора файла
 Selection.Formula = "=ГИПЕРССЫЛКА(" & ИмяФайла & ";" & Application.InputBox("Введите номер Контракта") & ")"
End Sub
При выполнении кода выпадает ошибка 1004. Что-то не так с синтаксисом самой формулы при выводе в ячейку (предпоследняя строка кода).
Если убрать знак = перед ГИПЕРССЫЛКА, то формула вставляется в виде текста в ячейку.

И вторая проблема: не пойму как переменную имяфайла заключить в кавычки (как это и должно быть в формуле)
 
Цитата
Александр Иванов написал:
как это и должно быть в формуле
Спросите у самогО VBA: вручную вставьте в ячейку например А1 функцию ГИПЕРССЫЛКА, потом в окне Immediate "спросите"
Код
?[a1].formula
Кавычки внутри строки надо удваивать.
Кстати, почему Вы создаете гиперссылку с помощью функции,а не через Ctrl+K, т.е. Activesheet.Hyperlinks.Add...?
Изменено: Казанский - 23.02.2018 21:14:14
 
Цитата
Казанский написал:
Спросите у самогО VBA: вручную вставьте в ячейку например А1 функцию ГИПЕРССЫЛКА, потом в окне Immediate "спросите"
=HYPERLINK("C:\Users\1\Desktop\БЗ\ДС №1 Лидер ООО.pdf",ДС1)
Я пробовал писал по английски название функции и точку с запятой менял на запятую - это не избавляло меня от ошибки 1004
Цитата
Казанский написал:
Кавычки внутри строки надо удваивать.
Код
Selection.Formula = "=HYPERLINK("" & ИмяФайла & ""," & Application.InputBox("Введите номер Контракта") & ")"
Так тоже не работает. ИмяФайла не срабатывает.

Цитата
Казанский написал:
Кстати, почему Вы создаете гиперссылку с помощью функции,а не через Ctrl+K, т.е. Activesheet.Hyperlinks.Add...?
Это как? Я совсем не силен в VBA. Подскажите как правильно написать, буду очень благодарен!
 
Цитата
Казанский написал:
Кстати, почему Вы создаете гиперссылку с помощью функции,а не через Ctrl+K, т.е. Activesheet.Hyperlinks.Add...?
Если вы про вставку гиперссылки через контекстное меню правой кнопки мыши, то эти гиперссылки постоянно слетают при работе несколькими пользователями с файлом по сети. Поэтому я решил переделать всё через функцию ГИПЕРССЫЛКА.
 
Александр Иванов, ..."=HYPERLINK(""... вот эта кавычка внутри строки, ее надо удвоить:
Код
Selection.Formula = "=HYPERLINK(""" & ИмяФайла & """," & Application.InputBox("Введите номер Контракта") & ")"
А чтобы не запутаться в кавычках и амперсендах, я лично предпочитаю использовать замену в формуле-шаблоне:
Код
Selection.Formula = Replace(Replace( _
  "=HYPERLINK(""ИмяФ"",№конт)" _
  , "ИмяФ", ИмяФайла) _
  , "№конт", Application.InputBox("Введите номер Контракта"))
 
Казанский,Спасибо добрый человек!
Всё получилось, гиперссылка вставилась и работает!
 
Немного доработал файл и теперь запутался в условиях If
При запуске макроса в выделенной ячейке записывается информация в виде гиперссылки в случае, если выбран файл.
Если вместо выбора файла нажать отмену - я добавил возможность указания номера контракта без гиперссылки.
А вот если нажать отмена при указании текста в Application.InputBox , то происходит замена информации в выделенной ячейке на слово ЛОЖЬ
Это необходимо например в случае, если по ошибке выделил ячейку с уже имеющейся информацией, в этом случае она стирается.
А как сделать чтобы при отмене Application.InputBox ничего не происходило, была отмена любого ввода информации?
Немного сумбурно написал - пример во вложении.
 
Код
Sub Гиперссылка_на_файл()
    ИмяФайла = GetFilePath ' запрашиваем имя файла
    If ИмяФайла = Empty Then
        Cont = Application.InputBox("Введите номер Контракта")
        If Cont Then Selection.Value = Cont
    Else
        Selection.Value = Replace(Replace( _
                            "=HYPERLINK(""ИмяФ"",""№конт"")" _
                            , "ИмяФ", ИмяФайла) _
                            , "№конт", Application.InputBox("Введите номер Контракта"))
    End If
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Благодарю!
Всё получилось!
Страницы: 1
Наверх