2013-08-22 83 views
0

我創造了這個類的類的屬性,遍歷VBA

Interval.cls 
public x as new collection 
public y as new collection 
public z as string 

我通過屬性要循環,因爲我希望用戶選擇輸入X,Y,Z的形式,以便於我sub

sub test() 

dim inter as new Intervals 

inter.x.add "a" 
inter.x.add "a" 
inter.x.add "b" 
inter.x.add "b" 
inter.x.add "b" 

userString1 = x 
userString2 = a 

'我想讓它變成動態的,這樣無論用戶想要什麼,我都可以提供結果。 「我只是想使人們有可能在userString比較我的屬性

for each i in inter 

」,所以我想爲我在這個圈是我的財產,X,Y,Z,所以我可以讓if語句 如果(I = userString1)然後

end if 
next i 
end sub 

我知道我也許可以做一個tweek在類使其可迭代,我不知道該怎麼辦呢

任何幫助表示讚賞

+0

首先使用'選項Explicit.'你的代碼是沒有像它的意義是現在,當你定義'userString1'它實際上沒有任何設置讓你的比較是永遠不會是真實的,即使你的班級支持它,當你使用'intervalS'時,你的定義也沒有意義...... – enderland

+0

@enderland爲什麼它沒有意義,只是想簡化它。我有一個與a,b,c,d,e,f,g屬性的類,並且我有一個用戶輸入說給我一個VALUE在a或b或c中的百分比。所以我遍歷該屬性並找到結果。通過僅對屬性進行一次循環,並查看哪一個與輸入匹配。所以當用戶字符串是我想通過循環他們找到屬性一個 – trackmeifUcan

回答

2
'in class 
Public Property Get Item(i As Integer) As Variant 

    Select Case ndx 
     Case 1: Item = Me.x 
     Case 2: Item = Me.y 
     Case 3: Item = Me.z 
    End Select 

End Property 

'in sub 
Dim c as Collection 
Dim s as String 

For i = 1 to 3 
    if i < 3 then 
     set c = inter.Item(i) 
     'iterate through collection 
    else 
     s = inter.Item(i) 
    end if 
next i 

這樣的事情可能是要走,我沒有測試它的最簡單的方法,但希望它至少可以讓你開始

+0

不錯,我會測試它,並回來! – trackmeifUcan

+0

不起作用它說c類型不匹配,當我嘗試添加手錶並檢查intt.item(1)它說空,但我可以看到intt在手錶中,它看起來像它有數據對於每個intt在intercollection 對於i = 1至3 如果I <3然後 集合C = intt.Item(ⅰ) 「通過收集 迭代否則 S = intt.Item(ⅰ) 結束如果 下一個I 接着INTT – trackmeifUcan

+0

抱歉,不知道昨天是怎麼回事,但今天它運行良好,我只需要將c改爲對象而不是其他任何東西。謝謝 ! – trackmeifUcan

0

這是諸如此類的事情,你是後?

'in class 
Public x As New Collection 
Public y As New Collection 
Public z As String 
Public Property Get Item(i As Integer) As Variant 

    Select Case i 
     Case 1: Item = Me.x 
     Case 2: Item = Me.y 
     Case 3: Item = Me.z 
    End Select 

End Property 

Sub try() 

Dim userString2 As String 
Dim userString1 As String 
Dim inter As Interval 
Dim i As Integer 

Set inter = New Interval 

inter.x.Add "a" 
inter.x.Add "a" 
inter.x.Add "b" 
inter.x.Add "b" 
inter.x.Add "b" 

userString2 = "aabbb" 

For i = 1 To inter.x.Count 

     userString1 = userString1 & inter.x.Item(i) 
Next i 

If userString1 = userString2 Then 
'<do whatever> 
End If 
End Sub 

好的如何忘記類和只使用數組?字符串數組可以是任意長度的,您可以通過調用過程動態控制它的大小。

Sub tryWithArray(ByRef StringArray() As String) 

Dim userString2 As String 
Dim i As Integer 

userString2 = "b" 


For i = 1 To UBound(StringArray()) 
    If userString2 = StringArray(i) Then 
     'do something 
    End If 
Next i 

End Sub 
+0

但你明確地指定屬性x inter.x,不是獲得項目(i)的全部點而不明確指出它們的屬性x,y,z,那樣我可以通過x,y,z循環每次都不必更改代碼,如果將來我有更多的x,y,z屬性。對 ? – trackmeifUcan