2017-10-12 44 views
0

我试图将用户窗体中的refedit控件指定的范围传递给变体数组。我有以下代码:将用户窗体中RefEdit控件的范围传递给变体数组

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确实变(),但是,当我尝试做这样的事情搞清楚了Y0的尺寸或使用PrintArray子程序我打印出来有(已经为其他数组工作),我收到错误消息。见下:

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)

我得到类型不匹配错误。

关于这里发生了什么的任何想法?任何援助表示赞赏。

最佳,

+2

你在哪里传递变量'x0'和'y0'到子DataCheck? –

+0

寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者无益。请阅读如何创建[MCVE]和[问]。 – tambre

回答

0

欢迎作用域!

首先,在的顶部指定Option Explicit模块; VBA现在应该抱怨y0,y0Ny0K未在DataCheck中声明。

的两个变量是当地人,在CommandButton1_Click范围:您无法访问他们另一个范围 - 每个程序定义了一个单独的范围

运行时错误13是误导性的;这是因为没有Option Explicit,一个未声明的变量只是简单地在运行时“现场声明”,并初始化为vbEmpty,作为隐含的Variant。而且由于vbEmptyEmpty类型,不是数组,因此UBound不知道如何处理它,并抛出一个错误,其实质上意味着“我不期待该类型”。

所以你需要学会传递参数代替 - 注意,阵列必须通过引用传递,所以我建议指定ByRef修改明确(ByRef是隐含的,如果没有指定):

Private Sub DataCheck(ByRef xArray As Variant, ByRef yArray As Variant) 
    '... 
End Sub 

现在代替:

Call DataCheck 

您有:

DataCheck x0, y0 

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