Arrays 将范围从Userform中的RefEdit控件传递到变量数组
我试图将指定的范围从userform中的refedit控件传递到variant数组。我有以下代码: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
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