Type Mismatch

  • Автор темы allex
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

allex

Предыстория:
Сделал я одну процедуру, которая получала данные и выгружала их в ООО. Все работает замечательно, но те данные что получаются внутри этой процедуры будут использоватья в будущем, поэтому решил я отделить мух от коклет.

Суть так называемой проблемки:
Функция, которая получает маасив данных не хочет присваивать этот массив, пишет что <Type mistmach>
Public Function array_data(doc As NotesDocument,manual_select_docchar As Boolean) As Variant
Массив данных представляет собой набор List As Variant
И вот на этой строке - array_data = arr_val - <Type mistmach>
Public Sub print_otchet (doc As NotesDocument,arrval As Variant)
Процедура выгрузки полученных данных в ООО
call print_otchet (doc,array_data)

Что это может быть ?

Да, кстати...
Print "arr_val - " & TypeName(arr_val) = Variant
Print "yarray_data - " & TypeName(array_data) = Empty
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Нельзя просто так возвратить массив массивов или список массивов. Используй классы.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Если это список массивов, то нельзя. Если в списке не массивы, то можно. :)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
дело в том что массивы можно создавать не Dim/Redim ...
например
Dim v As Variant
v=split("","")
далее
v=ArrayAppend(v,nextvalue)
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Это понятно.
Но если Variant - это массив, то List As Variant вернуть нельзя.
Т.е. такой код выдаст ошибку:
Код:
function test() As Variant
Dim a list As Variant
a("1") = Split("", "")
test = a
end function
 
A

Akupaka

Надо переписать циклом из одной переменной в другую
 
A

allex

Это понятно.
Но если Variant - это массив, то List As Variant вернуть нельзя.
Т.е. такой код выдаст ошибку:
Код:
function test() As Variant
Dim a list As Variant
a("1") = Split("", "")
test = a
end function

Массив представляет собой вот какой вид
b("zxc")="12"
b("zxcv")="14"
a(0)=b

Задачу решил через объявление глобальной переменной
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
233
Нельзя просто так возвратить массив массивов или список массивов. Используй классы.
Если это список массивов, то нельзя. Если в списке не массивы, то можно.
Можно и когда массивы. И без классов.
Просто передать через параметр:
Код:
Dim tmp List As Variant
If test("afa sf", tmp) Then
Print "Аля-улю!.."
End If
Код:
Function test(pStr As String, plst List As Variant) As Boolean
arrTmp = Split(pStr, " ")
If Ubound(arrTmp) > 0 Then		'например такая логика
plst(Cstr(Now)) = arrTmp
test = True
End If
End Function

Задачу решил через объявление глобальной переменной
Лучше без глобальной переменной - массивы легко возвращаются функцией через Variant.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
VladSh
если лист создавать/перебирать - то да
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!