2016-09-05 2 views
-3

Я продолжаю получать ошибку, когда я пытаюсь передать это значение массиву, по существу, я работаю с курсами обмена, у меня есть валюта во втором измерении массива ary() и я ищу, чтобы получить точку данных в таблице, которая находится в 2 ячейках от элемента, хранящегося в массиве.Несоответствие типа при передаче массива

Теперь я считаю, что проблема имеет какое-то отношение к тому, что значение является числом, а массив является вариантом, однако я не могу решить проблему.

Option Explicit 

Dim fxary(), y 

ws.Select 
Set Rng = Sheets("BEXR").Range("C2:C" & Sheets("BEXR").Range("A1").End(xlDown).Row) 

For i = 1 To UBound(ary, 2) 
    If ary(2, i) <> ary(2, UBound(ary, 2)) Then 
     For Each y In Rng 
      If Sheets("BEXR").Range(y.Address).Value = ary(2, UBound(ary, 2)) And Sheets("BEXR").Range(y.Address).Offset(0, 1).Value = ary(2, i) Then 
       fxary() = Sheets("BEXR").Range(y.Address).Offset(0, 2).Value ' error occurring here 
       fxary = ary(1, i)  
     End If 
     Next y 
    End If 
Next 
+0

Не могли бы вы отправить полный подпункт? (Опустите несущественные части, но включите объявления переменных) – arcadeprecinct

+0

Я использовал только dim для y и Dim fxary() As Variant для массива. Значение, входящее в fxary, будет числом. Извините, если это не поможет. – Lowpar

+0

Ваш код не компилируется. У вас есть «Option Explicit», но затем есть все виды необъявленных переменных. Кроме того, вы никогда не говорите, что вы пытаетесь передать массивы * в *. Вы, кажется, понимаете, что значения диапазона заданы для варианта, но вы используете терминологию, которая обычно используется при вызове подсистем или функций. –

ответ

1

Ваши комментарии говорят, что I have omitted all the lines not related to this specific problem, поэтому я вывешу ответ основан на предположении, что все линии, которые являются, связанным с проблемой, были включены в коде в вопросе.

следующие замечания должны быть сделаны относительно кода:

  • Вы использовали Option Explicit, но нигде не объявляется размер или тип переменных i и ary.

  • Нигде не указываются значения для переменной ary.

  • Ваша строка, говорящая fxary() = Sheets("BEXR").Range(y.Address).Offset(0, 2).Value, пытается назначить скаляр вектору и будет генерировать ошибку несоответствия типа.

  • Ваша строка, содержащая fxary() = Sheets("BEXR").Range(y.Address).Offset(0, 2).Value, сразу же следует строкой (fxary = ary(1, i)), заменяющей значение fxary чем-то другим, поэтому первая строка избыточна.

  • Все ваши ссылки на Sheets("BEXR").Range(y.Address) могут быть заменены на y.

  • Вы выполняете через две петли (от 1 до независимо от второго размера неопределенной переменной ary есть и, в этом цикле, через каждую ячейку в столбце С вашего листа), но фактически только установка fxary раз , т.е. к значению в неопределенной переменной ary, где значение первого измерения равно 1, а значение второго измерения - i. (Но мне не удалось полностью обдумать код, чтобы иметь возможность определить, какое значение i, которое закончится тем, что я буду думаю, что он разработан, просматривая каждую строку вашего листа, которая имеет другое значение в столбце C, чем в столбце D, а значение в столбце C равно ary(2, highest value), а затем определение наивысшего значения i таким, что ary(2, i) будет равно значению в столбце D.)


Я считаю, что вы должны смотреть на каждый из перечисленных выше пунктов, прежде чем ваш код будет делать что-либо значимое, но решить проблему конкретных вы говорите, вы имеете:

1) Измени декларацию fxary в

Dim fxary, y 

2) Просто удалите строку говоря

fxary() = Sheets("BEXR").Range(y.Address).Offset(0, 2).Value 

поскольку эта строка избыточна (как я уже говорил в одном из моих предыдущих пунктов).

Смежные вопросы