gpt4 book ai didi

vba - 用于连接的 Excel VBA UDF 给出错误消息

转载 作者:行者123 更新时间:2023-12-04 21:34:15 26 4
gpt4 key购买 nike

我正在尝试在 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

最佳答案

我更喜欢 JOIN 数组方法。

Option Explicit

Function ConcatenateforSQL(ConcatenateRange As Range) As Variant
On Error GoTo ErrHandler

Dim r As Long, c As Long
Dim vVAL As Variant, vVALS As Variant

ReDim vVAL(1 To 1)
vVALS = ConcatenateRange.Value2

For r = LBound(vVALS, 1) To UBound(vVALS, 1)
For c = LBound(vVALS, 2) To UBound(vVALS, 2)
'Debug.Print vVALS(r, c)
ReDim Preserve vVAL(1 To (r * c))
vVAL(r * c) = vVALS(r, c)
Next c
Next r

ConcatenateforSQL = Chr(39) & Join(vVAL, "','") & Chr(39)
Exit Function

ErrHandler:
ConcatenateforSQL = CVErr(xlErrValue)
End Function

关于vba - 用于连接的 Excel VBA UDF 给出错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43004691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com