Почему я получаю эту ошибку;
Type mismatch: 'UBound'
Function JumbleArray(ByVal aArray)
Dim iUpper, iLower, iLoop, iSwapPos, varTmp
iUpper = UBound(aArray)
iLower = LBound(aArray)
Randomize Timer
For iLoop = iLower To iUpper
iSwapPos = Int(Rnd * (iUpper + 1))
varTmp = aArray(iLoop)
aArray(iLoop) = aArray(iSwapPos)
aArray(iSwapPos) = varTmp
Next
JumbleArray = aArray
End Function
Dim strTestArray
strTestArray = "1,2,3,4,5,6,7,8"
Shuffle = JumbleArray(strTestArray)
Этот код был предложен в другом месте, но без каких-либо сообщений о том, что он не работает. Вроде должно работать, но не работает.
Показанный здесь код — это все, что вам нужно. Просто запустив код, вы увидите ошибку.
Массив собирается из выбора флажков, так как же он может быть чем-то другим?
@WilliamK покажите нам реальный код, а не то, в чем, по вашему мнению, проблема.
Возможный дубликат Массив из Request.Form в классическом asp.
Это настоящий код. Но если вы имеете в виду результат отправки формы для создания массива, то массив точно такой, как определено здесь. Попробуйте код выше, и вы получите ту же ошибку.
@WilliamK вы получаете ту же ошибку, но не обязательно по той же причине. Мы уже показали вам, как избежать этой ошибки с помощью Split() и IsArray() для строки в вашем примере, но из того, что вы сказали, это не то, что вы на самом деле передаете.
Я вижу, что вы также пометили другой пост как возможный дубликат. Ну, Сплит не решает этот случай. Вопрос простой и лаконичный... решение пожалуйста?
strTestArray = "100002, 100003, 100001, 100000"
Другого пути нет, и SPLIT ничего не делает, а IsArray терпит неудачу!
@WilliamK вы не можете вернуть массив в Response.Write() без предварительного преобразования его в строку либо путем вызова Join(), либо путем повторения элементов в массиве с использованием цикла.





Вопрос не очень ясен, но из того, что я вижу, есть две основные проблемы.
Функция UBound() ожидает, что допустимый массив вернет верхнюю границу, все остальное приведет к возникновению ошибки Type mismatch.
Проблема здесь в том, что функция ожидает Array, но ей передается String(как указано в комментариях). Если строка содержит допустимый массив строк (строка, которую можно интерпретировать через разделители как одномерный массив), вы можете использовать функцию Split() для перевода строки в допустимый массив и IsArray() для проверки возврата действительного массива.
Функция JumbleArray() возвращает Array, который нельзя просто вывести на страницу с помощью Response.Write(). Чтобы вывести его, вам сначала нужно проверить его допустимый массив, используя IsArray(), а затем либо использовать Join() для вывода значений, либо перебрать каждый элемент в массиве, используя цикл.
При вызове функции попробуйте это;
strTestArray = "1,2,3,4,5,6,7,8"
Dim TestArray: TestArray = Split(strTestArray, ",")
If IsArray(TestArray) Then
TestArray = JumbleArray(TestArray)
If IsArray(TestArray) Then
Call Response.Write(Join(TestArray, ","))
End If
Else
Call Response.Write("Not a valid array")
End If
Функции ожидают массив. Вы передаете строку.