Ошибка приложения или объекта при выполнении кода с объединенной формулой - PullRequest
0 голосов
/ 24 апреля 2018

В этом блоке кода я пытаюсь заменить текст в ячейке таблицы формулой, в которой значение ячейки добавлено в конец строки, а затем сделать ее гиперссылкой с использованием общего пути URL. Тем не менее, когда я запускаю этот код, я получаю сообщение «Ошибка приложения или объекта» в строке «.DataBodyRange.Formula = concat». После того, как это будет решено, я хотел бы создать кнопку, которая выполняет этот код для всех ячеек в .DataBodyRange (как быстрое обновление для новых текстовых записей).

РЕДАКТИРОВАТЬ 1: @ ответ jamheadart исправил это ( РЕДАКТИРОВАТЬ 2: , хотя я только что понял, что закрывающие скобки были немного отключены (включая вторую переменную, когда она должна содержать только первый - URL) - код, отредактированный ниже.

Следующая часть вопроса: С исправленной семантикой; Как бы я изменить код в рамках ниже подпрограммы, чтобы перебрать все ячейки в .DataBodyRange? В настоящее время он устанавливает все ячейки в DataBodyRange равными содержимому ячейки E2, но мне нужно использовать уникальное значение в каждой ячейке для создания гиперссылки. РЕДАКТИРОВАТЬ 2: решил это самостоятельно - полный код ниже. Я изменил формат таблицы так, что мне требуется только один отредактированный столбец. В настоящее время это не учитывает случай, когда при повторном запуске кода полный URL добавляется в конец строки значения URL, но исправляется с помощью простого оператора if (если v не содержит «HTTP», создайте строку concat и установите .Cell значение для согласования).

Спасибо за вашу помощь!

Sub Hyperlinkify()
'
' Hyperlinkify Macro
'
' Keyboard Shortcut: Ctrl+t
'
    Dim oSh As Worksheet
    Set oSh = ActiveSheet
    Dim v As String
    Dim concat As String
    Dim url As String
    url = "http://gatherer.wizards.com/Pages/Card/Details.aspx?multiverseid="


    Dim RNG As Range
    Dim aCell As Range
    Set RNG = Sheets("MTG Basic Lands").ListObjects("tbl_mtg_lands").ListColumns("Card id").DataBodyRange
    For Each aCell In RNG.Cells
        ' if v contains 'http' (or doesnt start with a number, both work), run the following 3 lines of code:
        v = aCell.Value
        concat = "=HYPERLINK(""" & url & v & """, " & v & ")"
        aCell.Value = concat
    Next aCell
End Sub

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

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Вы забыли включить двойные кавычки. Вот пример:

Sub MakeFormula()
    Dim v As String
    Dim concat As String
    Dim url As String
    Dim DQ As String

    DQ = Chr(34)

    v = Range("E2").Value
    url = "https://www.google.com/search?q="
    Range("E4").Formula = "=HYPERLINK(" & DQ & url & v & DQ & "," & DQ & v & DQ & ")"

End Sub

enter image description here

0 голосов
/ 24 апреля 2018

Вам нужны кавычки вокруг вашей HYPERLINK, поэтому строка

concat = "=HYPERLINK(" & url & v & ", " & v & ")"

Что приводит к =HYPERLINK(http://...)

Должно быть

concat = "=HYPERLINK(""" & url & v & ", " & v & """)"

Чтобы дать =HYPERLINK("http://...")

После того, как вы указали, что функция HYPERLINK () имеет второй параметр для отображения текста:

concat = "=HYPERLINK(""" & url & v & """, " & v & ")"
...