2016-04-06 9 views
3

VBA'da (Excel 2010) özel bir sınıftan Get özelliği ile ilgili bir sorun yaşıyorum. Bir dizin argümanı verilmediyse, Get özellikim Class 'dizisine bir referans (en azından benim izlenimim) vermelidir. Bir indeks verilirse, belirtilen dizideki değeri özel diziye döndürmelidir.VBA Derleme Hatası: Salt Okunur Öğeye Dönen Öğeyi Geri Atanamayan Özellik Atılabilir Özellik Al

ReDim temp(1 To 1) As String 
temp(1) = pMtbSheets(index) 
MtbSheets = temp 
: herkes
+0

İşleviniz şartname dönüş değeri bir 'Dize array' olduğunu söylüyor. Hatayı alıyorsunuz çünkü Else durumunuz tek bir dize döndürmeye çalışıyor. Her neyse, bu bir işlevden kafa karıştırıcı bir dönüş olurdu çünkü kullanmadan önce döndürülen değişkenin Türünü kontrol etmeliyim. Ancak, işlevinizi yazılı olarak çözmek için, dönüş değerini 'Dize 'olarak' Varyant 'olarak değiştirin. – PeterT

cevap

2

Bir dizi erişimi vs bir özellik/yöntemle/işlev çağrısı olarak yorumlanmasını MtbSheets(i) arasındaki belirsizliği önlemek için geçici bir dizi ihtiyaç sunabilmektedir herhangi bir yardım için

' Custom Class Properties 
Private pMtbSheets() As String 

'Get and Let Methods 
Public Property Get MtbSheets(Optional index As Variant) As String() 
    If IsMissing(index) Then 
     ReDim MtbSheets(1 To UBound(pMtbSheets)) 
     MtbSheets = pMtbSheets() 
    Else 
     ReDim MtbSheets(1 To 1) 
     MtbSheets(1) = pMtbSheets(index) '**Compiler error occures here** 
    End If 
End Property 

Teşekkür

+0

Bu başardı! Teşekkürler Alex. Ayrıca, If ifadesinin ilk bölümünde bir geçici diziyi kullanmam gerekiyordu. –

0

Düzenleme: Tabii ki cevabım işe yaramayacak, cevapta Alex K. tarafından belirtildiği gibi geçici bir dizi kullanmanız gerekecek. Eğer IsMissing yapmak gibi

Sadece dizi döndürür() şube:

' Custom Class Properties 
Private pMtbSheets() As String 

'Get and Let Methods 
Public Property Get MtbSheets(Optional index As Variant) As String() 
    If IsMissing(index) Then 
     ReDim MtbSheets(1 To UBound(pMtbSheets)) 
     MtbSheets = pMtbSheets() 
    Else 
     ReDim MtbSheets(1 To 1) 
     MtbSheets = pMtbSheets(index) 
    End If 
End Property 
İlgili konular