2016-12-05 6 views
0

辞書を自分のクラスに使用したいと思います。ユーザーがアプリケーションリストを入手するには、クラスApplicationsで作成してください。辞書をClase_Initializeメソッドに使用する

ここに私のクラスを見つけてください:

Usersクラス:

Option Explicit 

'Variables Declaration 
Public Name As String 
Public FirstName As String 
Public Mail As String 
Public Phone As String 
Public Zone As String 
Public Apps As New Scripting.Dictionary 

'Initialize Class 
Private Sub Class_initialize() 

Dim i As Integer 
Dim a As New Applications 

    i = 2 
    While Worksheets("Admin").Cells(i, 2).Value <> "" 
     a.SetName = Worksheets("Admin").Cells(i, 2).Value 
     Apps.Add i - 2, a 
     i = i + 1 
    Wend 

End Sub 

そしてApplicationsクラス:

私はLETを削除して、より明確にするための機能をGET。

これをどうすれば最適化できますか?

答えて

1

Applicationsオブジェクトは1つだけ作成し、ループ内で変更します。

ループ内に毎回新しいApplicationsオブジェクトを作成する必要があります。

Dim a As Applications 
i = 2 
While Worksheets("Admin").Cells(i, 2).Value <> "" 
    Set a = New Applications      ' <~~~~ 
    a.Name = Worksheets("Admin").Cells(i, 2).Value 
    Apps.Add i - 2, a 
    i = i + 1 
Wend 

あなたはアプリの名前をキーとして使用したいと思うかもしれませんか?この場合、変更:

Apps.Add i - 2, a 

Apps.Add a.Name, a 

に続いて、後にアプリを取得するために、辞書から(名与えられた):

dim a as Applications 
set a = User.Apps("someAppName") 
+0

ありがとう、そしてどのように私はの属性を変更する/アクセスすることができます私のオブジェクトは今? 私は試しました:?User.Apps(a) – Cocalero

+0

@sebastiengaumin最後の部分をお読みください –

+0

ありがとう – Cocalero

0

多分これはあなたがしているものです後:

Option Explicit 

'Variables Declaration 
Public name As String 
Public FirstName As String 
Public Mail As String 
Public Phone As String 
Public Zone As String 
Public Apps As New Scripting.Dictionary 

'Initialize Class 
Private Sub Class_initialize() 

    Dim i As Integer 
    Dim a As Applications 

    i = 2 
    While Worksheets("Admin").Cells(i, 2).Value <> "" 
     Set a = New Applications 
     a.SetName Worksheets("Admin").Cells(i, 2).Value 
     Apps.Add i - 2, a 
     i = i + 1 
    Wend 

End Sub 

そうでない場合は変更

Public Sub SetName(passedName As String) 
    name = passedName 
End Sub 

のように、あなたはApplicationsクラスにいくつかのSetNameサブを持って提起:

a.SetName Worksheets("Admin").Cells(i, 2).Value 

に:

a.Name = Worksheets("Admin").Cells(i, 2).Value 
関連する問題