2016-01-18 42 views
0

我使用提供的代碼here作爲模板,用於訪問由函數外的用戶輸入定義的多個類變量值(字符串),但最終結果(字符串變量lptmstr)始終爲空;因此,我需要調試幫助。連接在函數中創建的對象的字符串屬性導致空字符串?

Class lptm 
    public inputstr3 
    public grpString1 
    public inputstr4 
    public grpString2 
End Class 

Function lptmIn 
    Set lptmIn = New lptm 

    lptmIn.inputstr3 = InputBox("enter names") 
    lptmIn.grpString1 = Split(inputstr3, ",") 

    lptmIn.inputstr4 = InputBox("enter loss %") 
    lptmIn.grpString2 = Split(inputstr4, ",") 

    If UBound(lptmIn.grpString1) = UBound(lptmIn.grpString2) Then 
    Else 
     Call lptmIn 
    End If 
End Function 

ublptm = UBound(lptmIn.grpString1) 
For i=0 To ublptm 
    lptmStr = lptmstr & lptmIn.grpString1(i) + lptmIn.grpString2(i) 
Next 
+1

將'Option Explicit'放在代碼的頂部。你會發現這個問題。 – RLH

回答

2

在你的函數lptmIn你呼籲(未定義)變量inputstr3inputstr4,而不是對象的屬性lptmIn.inputstr3lptmIn.inputstr4Split。更改此:

lptmIn.inputstr3 = inputbox("enter names") 
lptmIn.grpString1 = split(inputstr3, ",") 

lptmIn.inputstr4 = inputbox("enter loss %") 
lptmIn.grpString2 = split(inputstr4, ",") 

到這一點:

lptmIn.inputstr3 = inputbox("enter names") 
lptmIn.grpString1 = split(lptmIn.inputstr3, ",") 

lptmIn.inputstr4 = inputbox("enter loss %") 
lptmIn.grpString2 = split(lptmIn.inputstr4, ",")

另外,你需要指定由函數調用在全局代碼中的變量創建對象,否則你會被調用函數lptmIn在全局代碼中每次出現lptmIn

Set obj = lptmIn 
ublptm = UBound(obj.grpString1) 
For i=0 To ublptm 
    lptmStr = lptmstr & obj.grpString1(i) + obj.grpString2(i) 
Next 

當兩個數組中的元素數目不同時,您可能還想避免遞歸調用該函數。改用循環。

修改後的代碼:

Function lptmIn 
    Set o = New lptm 

    Do 
     o.inputstr3 = InputBox("enter names") 
     o.grpString1 = Split(o.inputstr3, ",") 

     o.inputstr4 = InputBox("enter loss %") 
     o.grpString2 = Split(o.inputstr4, ",") 
    Loop Until UBound(o.grpString1) = UBound(o.grpString2) 

    Set lptmIn = o 
End Function 

Set obj = lptmIn 
For i=0 To UBound(obj.grpString1) 
    lptmstr = lptmstr & obj.grpString1(i) + obj.grpString2(i) 
Next 

作爲邊注,變量和函數名是惡劣。我強烈建議選擇更多不言自明的名稱。

+0

在發佈代碼之前,我應該清理可讀性的名稱,道歉。 – sda

+0

出於學習的目的,您能否在函數結束之前解釋「Set lptmIn = o」的必要性? – sda

+1

本身並不是必需的,只是在創建對象時將其分配給本地變量,而在函數內部使用它時,只要實際返回它就將其分配給函數名稱。 –