Lesezugriff Array von Listboxen

15/08/2008 - 14:03 von Josef Morlo | Report spam
Hallo allerseits

Access XP alle SP's, Windows XP, SP2

Ums gleich zu sagen: es ist eigentlich nur ein 'akademisches' Problem.
Zur Lösung der Aufgabe würde man auf ein Objekt-Array wohl verzichten und
eher eine Collection heranziehen.
Interessehalber, wo liegt/liegen der/die Fehler:


'Formmodul

Private Sub Test_Click()

Dim objList As clsMyClass
Dim frm As Access.Form
Dim actlLst() As Control
Dim ctl As Control
Dim L As Long


Set frm = Forms!MyForm

For Each ctl In frm.Controls
If ctl.ControlType = acListBox Then
ReDim Preserve actlLst(L)
Set actlLst(L) = ctl
L = L + 1
End If
Next

Set objList = New clsMyClass

With objList
.ListArray() = actlLst()
.GetLists
End With

End Sub



Klassenmodul: clsMyClass
Private mactlListBoxes() as Control

Private Property Get ListArray() As Control()
ListArray() = mctlListArray()
End Property


Public Property Let ListArray(ctlListArray() As Control)
mctlListArray() = ctlListArray()
End Property

Public Sub GetLists()

Dim lst As Access.Control
Dim L As Long

'Beim Zugriff über die private Membervariable funktionierts
For l = 0 To UBound(mctlListArray)
Set lst = mctlListArray(l)
Debug.Print lst.Name
Next

'Beim Zugriff Über die Property kommt Kompilierfehler:
''Falsche Anzahl an Argumenten oder ungültige
'Zuweisung zu einer Eigenschaft'

For L = 0 To UBound(ListArray)
Set lst = ListArray(L)
Debug.Print lst.Name
Next

End sub



Danke und Gruß

Josef Morlo
 

Lesen sie die antworten

#1 Josef Poetzl
15/08/2008 - 15:30 | Warnen spam
Hallo!

Josef Morlo schrieb:
Ums gleich zu sagen: es ist eigentlich nur ein 'akademisches' Problem.
Zur Lösung der Aufgabe würde man auf ein Objekt-Array wohl verzichten und
eher eine Collection heranziehen.



Das ist eigentlich egal. Ich würde nur keines dieser Element "nach
außen" verfügbar machen, sondern eher per "Item"-Property (eventuelle
mit Default-Einstellung) o.à. zur Verfügung stellen und per Add-Method
das Anfügen ermöglichen. (Dann bleibt es der Klasse überlassen, ob ein
Array oder eine Collection verwendet wird.)
Ein Array könnte bezüglich Typsicherheit sogar angenehmer als eine
Collection sein.

Interessehalber, wo liegt/liegen der/die Fehler:


[...]
Klassenmodul: clsMyClass
Private mactlListBoxes() as Control


^^^^
sollte vermutlich mctlListArray heißen.

Private Property Get ListArray() As Control()
ListArray() = mctlListArray()
End Property

Public Property Let ListArray(ctlListArray() As Control)
mctlListArray() = ctlListArray()
End Property

Public Sub GetLists()


[...]
'Beim Zugriff Über die Property kommt Kompilierfehler:
''Falsche Anzahl an Argumenten oder ungültige
'Zuweisung zu einer Eigenschaft'

For L = 0 To UBound(ListArray)
Set lst = ListArray(L)


=>
ListArray(L) löst den Fehler aus.

Debug.Print lst.Name
Next

End sub



Es sieht für mich so aus, als würde VBA einen Konflikt mit den
Property-Prozeduren bekommen.

| Set lst = ListArray()(L)
würde funktionieren.

Auch bei
| Dim X() As Control
| X = ListArray
| For L = 0 To UBound(X)
| Set lst = X(L)
| Debug.Print lst.Name
| Next
würde das Problem nicht auftreten.

Eine Verwendung von Variant würde ListArray(L) erlauben.
| Public Property Get ListArray() As Variant
| ListArray = mctlListArray
| End Property
Diese Variante gefàllt mir bezüglich Typsicherheit aber überhaupt
nicht.


mfg
Josef


EPT: (Access Error Prevention Table) http://access.joposol.com/
FAQ: (Access-FAQ von Karl Donaubauer) http://www.donkarl.com/

Ähnliche fragen