传递数组时输入不匹配

时间:2016-09-05 16:22:03

标签: vba excel-vba excel

当我尝试将此值传递给数组时,我继续收到错误,基本上我正在使用汇率,我在数组的第二维中使用货币 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

1 个答案:

答案 0 :(得分:1)

您的评论是I have omitted all the lines not related to this specific problem,因此我会根据假设 与问题相关的所有行都已包含在代码中来发布答案问题。

应该对您的代码进行以下评论:

  • 您使用了Option Explicit,但无处声明变量iary的大小或类型。

  • 您无处为变量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的第二个维度,并且在该循环内,通过工作表的C列中的每个单元格),但您是实际上只设置fxary一次,即设置为未定义变量ary中的值,其中第一个维度的值为1,第二个维度的值为i。 (但是我还没有足够能够解决代码中的i最终会变成什么样的价值 - 我认为它&#39 ; s通过查看工作表的每一行,在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

因为那条线是多余的(正如我之前提到的那样)。