2016-08-03 7 views
0

Fehler:Property Verfahren Definitionen inkonsistent - Get und Set VBA

enter image description here

Code:

Private pColumnLabels() As MSForms.Label 

Public Property Get Column(Index As Integer) As MSForms.Label 
    'some irrelevant code here 
    Set Column = pColumnLabels(Index) 
End Property 

Public Property Set Column(lbl As MSForms.Label, Index As Integer) <--- errornous line 
    Set pColumnLabels(Index) = lbl 
End Property 

Grundsätzlich ich etwas ähnliche Steuerelement List-Box bin zu schaffen (aber mit der Fähigkeit, spezifisch anpassen Zellen nach meinem Geschmack, zB Hintergrundfarbe, Schriftart usw.) und so hat jede meiner Zeilen mehrere Spalten. Ich erstelle Etiketten an anderer Stelle, und dann möchte ich diese Beschriftungen dem Array zuweisen, das es für jede Zeile enthält.

Gegeben Index, ich möchte (Get) die Bezeichnung für diese bestimmte Spalte zurückgeben, so dass zum Beispiel row.Column(0).caption Überschrift für die angegebene Spalte zurückgeben würde.

Mitgeliefertes Etikett und Index wird Set das Etikett zu dieser bestimmten Zeile, so dass: Set row.Column(0) = someLabel. Ich kann sehen, warum das Set falsch ist, dh. Ich sollte etwas tun wie Set row.Column = {someLabel, 0}, aber das ist nicht in VBA möglich.

Irgendwelche Vorschläge, wie man das ordentlich macht? Ich weiß, ich kann eine Funktion erstellen, die die Parameter werden geben wird, also so etwas wie:

Public Function passParams(lbl as MSForms.Label, Index as Integer) 
    Set pColumnLabels(Index) = lbl 
End Function 

Aber dann bekomme ich nicht die nette Funktionalität der Beispiele zu tun in der Lage, die ich oben vorgesehen, das heißt, statt von:

row.Column(0).caption   'get 
Set row.Column(0) = someLabel 'set 

würde ich

row.Column(0).caption    'get 
Call row.passParams(someLabel, 0) 'set 
+0

Was ist pColumnLabels? –

+0

@Nathan_Sav 'Private pColumnLabels() Wie MSForms.Label' – emihir0

+0

Ist dies definiert, um die Beschriftungen zu enthalten, d. H. Existiert ein Index von x in diesem Array? Wie es leer definiert ist, überprüfen Sie, ob Index <= ubound (pcolumnlabels) –

Antwort

1

der Satz Parameter sein letztes muss, das ich

habe Arbeit zu tun haben,
Option Explicit 

Private pColumnLabels() As MSForms.Label 

Public Property Get columnx(i As Integer) As MSForms.Label 
    Set columnx = pColumnLabels(i) 
End Property 

Public Property Set columnx(i As Integer, lbl As MSForms.Label) 
    Set pColumnLabels(i) = lbl 
End Property 
+0

Works, thanks! @Nathan_Sav – emihir0