使用串联公式执行代码时出现应用程序定义或对象定义的错误
Application-defined or object-defined error when executing code with a concatenated formula
在此代码块中,我试图用一个公式替换 table 单元格中的文本,该公式将单元格的值附加到字符串的末尾,然后使用通用 URL路径。但是,当我 运行 这段代码时,我在“.DataBodyRange.Formula = concat”行收到“应用程序定义或对象定义的错误”。解决此问题后,我想创建一个按钮,为 .DataBodyRange 中的所有单元格执行此代码(作为新文本条目的快速更新)。
编辑 1: @jamheadart 的回答解决了这个问题(编辑 2: 虽然我刚刚意识到右括号稍微偏离了(包括第二个变量,而它应该只包含第一个 - URL) - 下面编辑的代码。
问题的下一部分:
语义固定;我将如何更改下面的子代码以遍历 .DataBodyRange 中的所有单元格?目前,它将 DataBodyRange 中的所有单元格设置为等于单元格 E2 中的内容,但我需要它使用每个单元格中的唯一值来生成超链接。 编辑 2: 我自己解决了这个问题 - 下面是完整的代码。我更改了 table 格式,这样我只需要编辑一列。这目前没有捕获重新运行 代码将完整的 URL 附加到 URL 值字符串末尾的情况,但是用一个简单的 if 语句修复(如果 v不包含 'HTTP',创建连接字符串并将 a.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
Screenshot of the End Product :)(我没有足够的代表 post 图片)
您的 HYPERLINK 需要引号,所以行
concat = "=HYPERLINK(" & url & v & ", " & v & ")"
这导致 =HYPERLINK(http://...)
应该
concat = "=HYPERLINK(""" & url & v & ", " & v & """)"
给予=HYPERLINK("http://...")
在您指出 HYPERLINK() 函数具有用于显示文本的第二个参数之后:
concat = "=HYPERLINK(""" & url & v & """, " & v & ")"
您忘记包含双引号。这是一个例子:
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
在此代码块中,我试图用一个公式替换 table 单元格中的文本,该公式将单元格的值附加到字符串的末尾,然后使用通用 URL路径。但是,当我 运行 这段代码时,我在“.DataBodyRange.Formula = concat”行收到“应用程序定义或对象定义的错误”。解决此问题后,我想创建一个按钮,为 .DataBodyRange 中的所有单元格执行此代码(作为新文本条目的快速更新)。
编辑 1: @jamheadart 的回答解决了这个问题(编辑 2: 虽然我刚刚意识到右括号稍微偏离了(包括第二个变量,而它应该只包含第一个 - URL) - 下面编辑的代码。
问题的下一部分: 语义固定;我将如何更改下面的子代码以遍历 .DataBodyRange 中的所有单元格?目前,它将 DataBodyRange 中的所有单元格设置为等于单元格 E2 中的内容,但我需要它使用每个单元格中的唯一值来生成超链接。 编辑 2: 我自己解决了这个问题 - 下面是完整的代码。我更改了 table 格式,这样我只需要编辑一列。这目前没有捕获重新运行 代码将完整的 URL 附加到 URL 值字符串末尾的情况,但是用一个简单的 if 语句修复(如果 v不包含 'HTTP',创建连接字符串并将 a.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
Screenshot of the End Product :)(我没有足够的代表 post 图片)
您的 HYPERLINK 需要引号,所以行
concat = "=HYPERLINK(" & url & v & ", " & v & ")"
这导致 =HYPERLINK(http://...)
应该
concat = "=HYPERLINK(""" & url & v & ", " & v & """)"
给予=HYPERLINK("http://...")
在您指出 HYPERLINK() 函数具有用于显示文本的第二个参数之后:
concat = "=HYPERLINK(""" & url & v & """, " & v & ")"
您忘记包含双引号。这是一个例子:
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