使用串联公式执行代码时应用程序定义或对象定义的错误

时间:2018-04-24 11:07:46

标签: excel-vba hyperlink listobject vba excel

在这个代码块中,我试图用一个公式替换表格单元格中的文本,该公式将单元格的值附加到字符串的末尾,然后使用公共URL路径将其作为超链接。但是,当我运行此代码时,我收到“.DataBodyRange.Formula = concat”行上的“应用程序定义的或对象定义的错误”。解决此问题后,我想创建一个按钮,为.DataBodyRange中的所有单元格执行此代码(作为新文本条目的快速更新)。

编辑1: @japheadart的回答解决了这个问题(编辑2:虽然我刚刚意识到关闭括号略有偏差(包括第二个变量时应该只包含第一个 - URL) - 下面编辑的代码。

问题的下一部分: 随着语义的固定;我将如何更改下面的子代码以迭代.DataBodyRange中的所有单元格?目前,它将DataBodyRange中的所有单元格设置为等于单元格E2中的内容,但我需要使用每个单元格中的唯一值来生成超链接。 编辑2:我自己解决了这个问题 - 完整代码如下。我更改了表格格式,因此我只需要编辑一列。这当前没有捕获重新运行代码将完整URL附加到URL值字符串末尾但用一个简单的if语句修复的情况(如果v不包含'HTTP',则创建concat字符串并设置一个.Cell值为concat)。

感谢您的帮助!

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

Screenshot of the End Product :)(我没有足够的代表发布图片)

2 个答案:

答案 0 :(得分:0)

您的HYPERLINK周围需要引号,所以行

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

导致=HYPERLINK(http://...)

应该是

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

提供=HYPERLINK("http://...")

指出HYPERLINK()函数有第二个显示文本参数:

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

答案 1 :(得分:0)

你忘了加双引号。这是一个例子:

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