/ / VBA. “Incompatibilidade de tipo: matriz ou tipo definido pelo usuário esperado” - excel, vba, excel-vba

VBA. “Incompatibilidade de tipos: matriz ou tipo definido pelo usuário esperado” - excel, vba, excel-vba

Eu sou completamente novo no VBA. Preciso escrever um programa que gere uma matriz de números inteiros e encontre um índice do elemento mínimo. Eu recebi esse erro "Incompatibilidade de tipo: matriz ou tipo definido pelo usuário esperado." Eu examinei muitas questões semelhantes, mas não consegui descobrir o que estava errado.

Function random_integer(Min As Integer, Max As Integer)
random_integer = Int((Max - Min + 1) * Rnd + Min)
End Function

Function generate_array(Size As Integer)
Dim Arr(Size)
For i = 0 To UBound(Arr)
Arr(i) = random_integer(i - 10, i + 10)
Next
generate_array = Arr
End Function

Function find_index_of_min_elem(ByRef Arr() As Variant)
Dim Min As Integer
Min = Arr(0)
Dim MinIndex As Integer
MinIndex = 0
For i = 1 To UBound(Arr)
If Arr(i) < Min Then
Min = Arr(i)
MinIndex = i
End If
Next
find_index_of_min_elem = MinIndex
End Function

Sub task6()
A = generate_array(20)
IndexOfMinElemInA = find_index_of_min_elem(A)
MsgBox IndexOfMinElemInA
End Sub

Respostas:

7 para resposta № 1

O problema é a função Function find_index_of_min_elem(ByRef Arr() As Integer) está esperando um Integer como um parâmetro e você está passando a como um Variant

a = generate_array(20)
IndexOfMinElemInA = find_index_of_min_elem(a)

O próximo erro que você receberá será ativado Dim Arr(Size) As Integer. Você não pode dimensionar uma matriz como essa.

Eu recomendaria ler sobre matrizes.

Pode haver outros erros, mas eu não os verifiquei.


0 para resposta № 2

Que tal isso? Faça uma segunda coluna de números de índice (em seqüência de pequena a grande) e, em seguida, ordene as duas linhas de acordo com a coluna original. Incluí o exemplo abaixo para ilustrar: A = a coluna original de números, B = a coluna dos números de índice D & E são o resultado da classificação de A e B pela coluna A A resposta é então: o número mais baixo "0" estava no índice 7

captura de tela de exemplo