2013-08-22 2 views
0

Я создал этот класс,Перебор свойств класса в VBA

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

Я хочу перебрать свойства, потому что я хочу, чтобы пользователю выбрать входной х, у, г в виде так на мой 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 

» поэтому я хочу, чтобы я в этом цикле быть мои свойства х, у, г, так что я могу сделать, если заявление если (я = userString1), то

end if 
next i 
end sub 

Я знаю, что я могу, возможно, сделать Твик в классе, чтобы сделать его итерацию, я не знаю, как сделать это

любая помощь ценится

+0

Первое использование 'Option Explicit.' Ты код не имеет смысла, как это не теперь, когда вы определяете' userString1' это не на самом деле ничего устанавливать так ваше сравнение никогда не будет, чтобы быть правдой, даже если ваш класс поддерживал его, который, когда вы используете 'intervalS', ваше определение не имеет смысла ни .... – enderland

+0

@enderland почему это не имеет смысла, просто хотел сделать его простым. У меня есть класс с свойствами a, b, c, d, e, f, g, и у меня есть пользовательский ввод, который дает мне процент VALUE внутри a или b или c. Поэтому я перебираю свойство и нахожу результат. сделав всего один цикл через свойства и посмотрев, какой из них соответствует входу. поэтому, когда пользовательская строка - это я хочу найти свойство a, пропуская через них – 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 Для я = 1 Для 3 Если я <3 Тогда Установить с = intt.Item (я) «перебирать коллекции Else s = intt.Item (I) End If Next я Следующая 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 

OK как насчет забывания класса и использования массива? Массив строк может иметь любую длину, и вы можете динамически контролировать его размер по вызывающей процедуре.

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

, но u явно задает свойство x inter.x, это не вся точка get item (i), чтобы получить свойства x, y, z, не указывая явно их, таким образом, я могу прокручивать через x, y, z каждый раз и не нужно менять код, если в будущем у меня будет больше, чем x, y, z. правильно ? – trackmeifUcan

Смежные вопросы