2016-11-07 2 views
0

У меня есть собственный тип (класс модуль) с именем stdFastenersScrews, которые обладают многими свойствами, например, диаметр, длина, поставщик, и т.д. ...VBA поиск по недвижимости в собственном. Свойство в виде строки

я загрузил все винты в одной коллекции stdFastenersScrews.

Теперь я пытаюсь создать функцию поиска, которая возвращает новую коллекцию на основе условия поиска, но я не знаю, как передать условие поиска (string) в имя свойства stdFastenersScrews. Я пытался что-то вроде этого, но, конечно, это не работает ...

Public screws As Collection 

Public Sub parseScrews() 
    Set screws = New Collection 
    '... 
    ' Here are parsed data from Excel into screws collection 
    '... 
    Dim searchResult As Collection 
    Set searchResult = searchScrews("Diameter=3") 
End Sub 

Public Function searchScrews(condition As String) As Collection 
    Dim results As Collection: Set results = New Collection 

    Dim cond() As String: cond = Split(condition, "=") 

    If screws.Count > 0 Then 
     Dim screwData As stdFastenersScrews 
     For Each screwData In screws 
      If screwData.cond(0) = cond(1) Then 
       results.Add screwData 
      End If 
     Next 
    Else 
     Call MsgBox("Cannot found any data about screws", vbInformation + vbOKOnly) 
    End If 

    Set searchScrews = results 
End Function 

Выше я линия

If screwData.cond(0) = cond(1) Then 

, который я хочу VBA принимает в качестве screwData.Diameter (потому что конд (0) = «Диаметр»), и я действительно не знаю, как это сделать. У вас есть идеи, пожалуйста?

ответ

0

можно добавить searchScrews() как метод вашего класса:

Public Function searchScrews(condition As String, screwsColl As Collection) As Collection 
    Dim results As Collection: Set results = New Collection 
    Dim cond() As String: cond = Split(condition, "=") 
    Dim var As Variant 

    If screwsColl.Count > 0 Then 
     Dim screwData As stdFastenersScrews 
     For Each screwData In screwsColl 
      Select Case cond(0) 
       Case "Diameter" 
        var = screwData.Diameter 
       Case "Length" 
        var = screwData.Length 
       Case "Supplier" 
        var = screwData.Supplier 
       Case Else 
        Exit Function 
      End Select 
      If var = cond(1) Then results.Add screwData 
     Next 
    Else 
     Call MsgBox("Cannot found any data about screws", vbInformation + vbOKOnly) 
    End If 

    Set searchScrews = results 
End Function 

, а затем использовать его в «основной» код:

Dim searchResult As Collection 
    Dim stdScrew As New stdFastenersScrews '<--| declare a variable of your class and get a new instance of it, so that you can call its methods 
    Set searchResult = stdScrew.searchScrews("Diameter=3", screws) '<--| call your class method 

это не может быть наиболее элегантное решение, но он должен придерживаться правил, по крайней мере, так как ваш класс также имеет правила для запроса своих свойств.

+0

@ PetrKateřiňák, вы прошли через него? – user3598756

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