Прежде всего: оператор :
хорош, но вы окончательно перестарались. Я рекомендую очистить ваш код, чтобы сделать его более читабельным. Это также помогает в отладке, поскольку разбивает строку и помогает найти ошибки по строке.
Do While Not rs.EOF
For i = 1 To tpp
If i = 1 Then
matriz(cont) = rs("id_material_apv_produto")
Else
matriz(cont) = matriz(cont) & "_" & rs("id_material_apv_produto")
End If
rs.MoveNext
If rs.EOF Then Exit Do
Next
cont = cont + 1
Loop
Set rs = Nothing
If CInt(pag) = 1 And UBound(matriz) >= 1 Then
id = matriz(1)
End If
Теперь за вашу ошибку. Он жалуется, что в какой-то момент cont
относится к позиции за пределами matriz
. Ваш массив имеет неправильные размеры, проверьте, как он создается.