2017-10-12 73 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年)

相關問題