2016-11-07 1 views
0

としてプロパティ...VBAの検索は、自分のタイプのプロパティで行います。私は自分のタイプ(クラスモジュール)の例の直径、長さ、サプライヤー、などのために、多くの特性を有するという名前stdFastenersScrewsを、持っている文字列

私はstdFastenersScrewsの1集にすべてのネジをロードしています。

今、検索条件に基づいて新しいコレクションを返す検索機能を作成しようとしていますが、検索条件(文字列)を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 

は、私はVBAを希望

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

は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

関連する問題