2014-12-02 24 views
5

Varyant() ve varyant arasında bir fark var mı?

Dim u As Variant, v() As Variant 

u = Range("A1:B3").Value 
v = Range("A1:B3").Value 

şimdi u ve v arasında herhangi bir fark var mı düşünün? Ve eğer değilse, onu bir varyant olarak ilan etmekten farklı olarak v bir varyant dizisi olarak deklare etmek gereksiz midir?

+0

Varyant dizisi olarak bildirimde herhangi bir fayda göremiyorum. – Rory

+0

() işlevi, kodun okunmasıyla ilgili başka birisine yararlı olacak şekilde v kullanımıyla ilgili * niyet * sinyallerinin eklenmesi konusunda yararlı olacak bir argüman oluşturabilirsiniz (ya da daha sonra) –

+0

Eklediğim bir dezavantaj.(), ona boş bir dizi atamaya çalışırken hataya neden olmasıdır. Örneğin, bir işlev bir dizi döndürür, ancak dizi boşsa, v = SomeFunction() bir çalışma zamanı hatasına neden olur, ancak u = SomeFunction() buna neden olmaz. –

cevap

2

Farklılıklar var. Variant'u makinenizde düşük seviyede bulunan ve VBA'ya bir uygulama programlama arabirimine (API) sahip bir şey olarak düşünün. Düşük seviye olan şey VARIANT ve Windows birçok dilde işlem yapmanıza izin veren çeşitli işlevlerle birlikte gelir; VBA bunlardan biri.

v, VARIANT s gibi bir Visual Basic dizisidir, u tek bir tanesidir.

Farkı belirlemenin bir yolu, vbArray + vbVariant olarak değerlendirilen VarType(v) kullanmaktır. VarType(u), vbEmpty değerini değerlendirir. Bunu, atama öncesinde aralık içeriğine test edebilirsiniz.

Özel durumunuzda, Excel-VBA v'a atandığında (başka bir terim olduğunu düşünmüyorum) korkak bir şey yapıyor: hedef türün bir dizi olduğunu "bilir" ve biraz farklı bir baskı gerçekleştirir . u ve v, Excel.Range'un değerine ayarlanmış olanla aynıdır.

+0

Tek bir hücreyi, 'v 'öğesinin atama başarısız olduğu Range()' ile seçmediyseniz. – ja72

+0

Her ikisi de, bir sayı içeriyorsa 'vbDouble' olarak değerlendiren tek bir hücre seçili olmadıkça, benim için 'vbVariant + vbArray' değerini değerlendirir. – ja72

İlgili konular