Ошибка # ЗНАЧЕНИЕ с длинной строкой в UDF в VBA для вывода в Excel
Я использую UDF ниже, чтобы объединить ссылки, чтобы включить результат в
запрос SQL как ref in ('ref1', 'ref2', ...)
,
UDF работает нормально, но когда мне нужно поместить огромный список ссылок,
я получил #VALUE
в Excel.
Я уже смотрю на этот ответ, но мне не удается заставить работать мою UDF...
Я пытался изменить тип функции с String
в Variant
(Явно),
но это ничего не изменило...
Я тоже пробовал ConcatSQL2 = A(0)
а также ConcatSQL2 = A
для вывода, Dim A(0 To 0) As String
для декларации... и опять не работает...
У меня заканчиваются идеи...
Для информации, ожидается, что длина строки результата будет около 220 КБ...
Чтобы помочь вам генерировать много текста, вы можете использовать генератор Lorem Ipsum здесь!
Public Function ConcatSQL2(Plage As Range, Optional Doublon As Boolean = True)
Dim A() As String, _
Cel As Range
ReDim A(0)
A(0) = "('"
For Each Cel In Plage.Cells
If (Cel.Value <> "" And (InStr(1, A(0), Cel.Value) = 0 Or Doublon)) Then
A(0) = A(0) & Cel.Value & "', '"
End If
Next
A(0) = Left(A(0), Len(A(0)) - 3) & ")"
ConcatSQL2 = A(0)
End Function
1 ответ
Относительно комментариев @Rory:
32767 - максимальное количество символов в ячейке
Я решил написать вывод в текстовом файле, чтобы потом использовать его снова!
Вот окончательное решение
Public Function ConcatSQL2(Plage As Range, Optional Doublon As Boolean = True)
Dim A(0 To 0) As String, _
myFile As String, _
Cel As Range
'ReDim A(0)
A(0) = "('"
For Each Cel In Plage.Cells
If (Cel.Value <> "" And (InStr(1, A(0), Cel.Value) = 0 Or Doublon)) Then
A(0) = A(0) & Cel.Value & "', '"
End If
Next
A(0) = Left(A(0), Len(A(0)) - 3) & ")"
myFile = "Path\FileName.txt"
Open myFile For Output As #1
Write #1, A(0)
Close #1
ConcatSQL2 = A
End Function