Arrays 将范围从Userform中的RefEdit控件传递到变量数组

Arrays 将范围从Userform中的RefEdit控件传递到变量数组,arrays,excel,vba,Arrays,Excel,Vba,我试图将指定的范围从userform中的refedit控件传递到variant数组。我有以下代码: Private Sub CommandButton1_Click() Dim y0 As Variant Dim X0 As Variant y0 = Range(RefEdit1.Value) X0 = Range(RefEdit2.Value) MsgBox (TypeName(y0)) Call DataCheck Me.Hide En

我试图将指定的范围从userform中的refedit控件传递到variant数组。我有以下代码:

Private Sub CommandButton1_Click()
    Dim y0 As Variant
    Dim X0 As Variant
    y0 = Range(RefEdit1.Value)
    X0 = Range(RefEdit2.Value)
    MsgBox (TypeName(y0))
    Call DataCheck
    Me.Hide
End Sub
消息框向我显示y0确实是Variant(),但是,当我尝试计算y0的尺寸或使用我拥有的PrintArray子例程(该子例程适用于其他数组)打印y0时,会收到错误消息。见下文:

Private Sub DataCheck()
    'Check dimensions of original data
    y0N = UBound(y0, 1)
    y0k = UBound(y0, 2)
    'X0N = UBound(X0, 1) - LBound(X0, 1) + 1
    'X0k = UBound(X0, 2) - LBound(X0, 2) + 1
    Debug.Print "N y0 = "; y0N
    Debug.Print "k y0 = "; y0k
    'Debug.Print "N y0 = "; X0N
    'Debug.Print "k y0 = "; X0k
End Sub
我收到一条“运行时错误'13'”消息。另外,当我将鼠标悬停在该语句上时:

y0N=UBound(y0,1)

我得到一个类型不匹配错误

你知道这里发生了什么吗?感谢您的帮助

最好的

Dan

欢迎来到范围界定

首先,在每个模块的顶部指定
选项Explicit
;VBA现在应该投诉
y0
y0N
y0K
未在
DataCheck
中声明

这两个变量是局部变量,在
CommandButton1\u单击
scope中:您不能在另一个作用域中访问它们-每个过程定义一个单独的作用域

运行时错误13具有误导性;这是因为如果没有显式
选项
,未声明的变量只会在运行时当场“声明”,并作为隐式
变量
初始化为
vbEmpty
。由于
vbEmpty
属于
Empty
类型,并且不是数组,
UBound
不知道如何处理它,并抛出一个错误,它本质上意味着“我不期望该类型”

因此,您需要学习如何传递参数—请注意,数组必须通过引用传递,因此我建议显式指定
ByRef
修饰符(
ByRef
如果未指定,则是隐式的):

而不是现在:

Call DataCheck
你有:

DataCheck x0, y0

(关键字
Call
已经过时20年了)

您在哪里将变量
x0
y0
传递到子数据检查?寻求调试帮助的问题(“为什么此代码不工作?”)必须包括所需的行为,一个特定的问题或错误,以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请阅读如何创建和。
DataCheck x0, y0