2016-04-12 17 views
0

Kod uzunluğu sorunum hakkında Uzmanlığınızı öğrenmek istiyorum.VBA'daki değişkenler dizisi

Çeşitli Özellikleri, P1, P2, ... P16 ile MyClass adlı bir sınıfım var.

Özelliklere dahil etmek istediğim değerler MyArray adlı bir dizide.

Ben ne yapıyorum Şu anda

, ve iyi çalışıyor ise:

MyClass.P1 = MyArray(0) 
... 
MyClass.P16 = MyArray(15) 

hatlarla çok zaman alır ve kod çok okunabilir değil.

Ben Ancak

For i = 0 to 15 
    array_of_variables(0) = MyArray(0) 
Next 

gibi değişkenlere döngü muktedir istiyorum

, bu 'array_of_variables' nasıl oluşturulacağı hakkında hiçbir fikrim yok.

Ben Array olarak sınıfın bir özellik oluşturarak denedi, ama bu :(VBA doğru değil.

? Bunu başarmak için nasıl bir fikriniz var

Çok teşekkürler, yapın Maxime

+1

değişken dize alacağım bir alan genellikle yoktur. Formlarınız olduğunu varsayalım, ancak kodunuzu yeniden kullanmak için bir dize kullanmak istiyorsunuz. 'String = 'FormName'' ve sonra 'Forms (string) .blabla' kullanabilirsiniz. MyClass.Properties() 'veya' MyClass.Fields() 'ya da IDE'de benzer bir şey aramayı deneyin. – CyberClaw

cevap

0

Bunu yapmak için kirli bir yöntem istiyorsanız koleksiyon kullanabilirsiniz, önceden tanımlanmış tuşlarla (isimler) tek bir özellik koleksiyonuyla sınıfınızı kurun ve aynı biçimi kullanarak koleksiyonunuza aktarılacak 2 koleksiyon arasındaki eşleşmeyi bulmak ve v edilen değerler. Sanırım bir diziyle aynı şeyi yapabilirsin ama dizilerinde sadece dizine sahip isimleri tanımlayan koleksiyonların aksine, onların içindeki verilerin hizalı olduğundan emin olmalısın.

0

önerilerinizi o

Option Explicit 

Sub main() 

Dim MyClassInstance As MyClass 
Dim i As Long 

Set MyClassInstance = New MyClass 

With MyClassInstance 
    .Properties = Array(1, 2, 3, 4, 5, 6) 

    For i = LBound(.Properties) To UBound(.Properties) 
     MsgBox .Properties(i) 
    Next i 
End With 

End Sub 
0

teşekkür olası bir sömürü burada izler senin "Sınıfım" Sınıf Modülü

Public Properties As Variant 

aşağıdaki ve bu

yer deneyin, ben geldi hepsini karıştırarak bir şeyle.

sınıfında böyle özelliği oluşturuldu:

Property Let Target(index, Value) 
    Select Case index 
     Case 0: 
     P1 = Value 
     ... 
     Case 15 
     P16 = Value 
    End Select 
End Property 

Bu şekilde, elimden böyle döngü:

For i = 0 to 15 
    MyClass.Target(i) = MyArray(i) 
Next 
+0

Yardım etmemize sevindik. Her nasılsa bu şekilde sınıftaki tüm özellikleri ('P1 = Value',' P2 = Value', ...), hem isimleri hem de 'Case-Case - Case' bloğu için sabit kodlamanız gerekir. Üstelik 'P1',' P2' kamu malı olarak kullanacak mısınız? Eğer öyleyse, bu sizin kodunuzun bir "kısıtlamasına" yol açacaktır. Daha yararlı olmamıza izin vermek için ihtiyaçlarınız hakkında daha fazla bilgi paylaşmak isteyebilirsiniz. Son olarak, sizin için yararlı olabilecek herhangi bir cevabı oyalamak isteyebilirsiniz. şerefe – user3598756