【发布时间】:2017-03-24 16:32:55
【问题描述】:
我正在尝试在 Excel 中编写一个用户定义函数 (UDF),它将获取一系列单元格中的值,并以某种方式连接它们。具体来说,我想以一种可以将结果字符串粘贴到 SQL“in”函数中的方式连接它们 - 即,如果我在 Excel 中有一个包含以下内容的范围:
apples
oranges
pears
我希望 UDF 生成 'apples', 'oranges', 'pears'
(即最后一个值后面没有逗号)。
这是我的代码 - 它在 VBA 窗口中编译正常,但是当我在工作表中使用它时,我得到了错误。任何想法都非常感谢 - 我在编写 VBA 方面有点新手。并为这个模糊的问题道歉;我只是不知道是哪一点引起了麻烦。
Function ConcatenateforSQL(ConcatenateRange As Range) As Variant
Dim i As Long
Dim strResult1 As String
Dim strResult2 As String
Dim Separator1 As String
Dim Separator2 As String
Separator1 = "'" 'hopefully the quotes act as escape characters
Separator2 = "',"
On Error GoTo ErrHandler
For i = 1 To CriteriaRange.Count - 1 'all but the last one
strResult1 = strResult1 & Separator1 & ConcatenateRange.Cells(i).Value & Separator2
Next i
'next, sort out the last example in the string
For i = CriteriaRange.Count - 0 To CriteriaRange.Count + 0
strResult2 = strResult1 & Separator1 & ConcatenateRange.Cells(i).Value & Separator1
Next i
ConcatenateforSQL = strResult2
Exit Function
ErrHandler:
ConcatenateforSQL = CVErr(xlErrValue)
End Function
【问题讨论】:
-
您还没有定义
CriteriaRange。也许应该读为“ConcatenateRange”? -
另外值得记住的是,如果您想将其用作工作簿中的工作表函数,则它需要位于
Module而不是Worksheet代码对象中。 -
哦,好旗帜,SJR - 我以为我已经改变了所有这些,但显然没有!
-
@Dave - 它在一个模块中 - 也许我在这里粘贴的方式不清楚?还是我可能错过了什么?它是 VBA 编辑器中的 Module1。
-
@s.turn 不,您几乎没有遗漏任何东西-您没有提到它在模块中,所以我认为值得一提..