======[VBA][Access] getControlPath()======
Eine Beispiel um den Pfad von Verschachtelungen eines Controls herauszufinden: [ParentControl2]![ParentControl1]![ActualControl]
'/**
' * Gibt den Pfad eines Formularcontrols zurück [ParentControl2]![ParentControl1]![ActualControl]
' * Dies ist vor allem bei verschachtelten Formularen interessant
' * @param Das Formularelement
' * @return String
' */
Public Function getControlPath(ByVal ctrl As Control) As String
Const C_DELEMITER = "!"
Const C_FORMAT = "[%s]"
Dim path() As String
Dim sortetPath() As String
Dim lastIndex, i As Integer
ReDim path(0)
path(0) = ctrl.Name
On Error GoTo exit_loop
'Solange die Parents suchen bis keine mehr da sind
Do While IsObject(ctrl.parent)
ReDim Preserve path(UBound(path) + 1)
path(UBound(path)) = ctrl.parent.Name
Set ctrl = ctrl.parent
Loop
exit_loop:
On Error GoTo 0
'Reihenfolge umdrehen damit der Master als erstes kommt
lastIndex = UBound(path)
ReDim sortetPath(UBound(path))
For i = 0 To lastIndex 'To 0 Step -1
'Dein Eintrag formatieren und am entsprechenden Ort im neuen Array einfügen
sortetPath(lastIndex - i) = Replace(C_FORMAT, "%s", path(i))
Next i
'und alles zu einem String zusammensetzen
getControlPath = Join(sortetPath, C_DELEMITER)
End Function
Und so könnte dann ein Aufruf aussehn
MsgBox getControlPath(Me.Command0)
{{tag>VBA MS_Access}}