Tipp 2.6 - Controls in Array

Wie kann ich einem Array die Namen der Controls im angegebenen Formular übergeben?

Mit dieser Funktion können Sie einem Array die Namen der Steuerelemente im angegebenen Formular übergeben. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.

Beispiel:

Option Explicit
 
Public Function A2XCtlsToArray( _
                               psFrmName As String, _
                               pasControls() As String) _
                               As Integer
  '// =====================================================
  '// Methode   | Übergibt einem Array die Namen der
  '//           | Controls im angegebenen Formular
  '// -----------------------------------------------------
  '// Parameter | psFrmName     - Name des Formulars
  '//           | pasControls() - Array zum Füllen der
  '//           |                 Namen
  '// -----------------------------------------------------
  '// Rückgabe  | Integer - Anzahl der Controls
  '// -----------------------------------------------------
  '// Erstellt  | Manuela Kulpa
  '//           | EDV Innovation & Consulting - Dormagen
  '// -----------------------------------------------------
  '// Beispielaufruf:
  '// Dim iCount       As Integer
  '// Dim iCounter     As Integer
  '// Dim asControls() As String
  '//
  '// iCount = A2XCtlsToArray("frmPersonal", _
  '//                         asControls)
  '// Debug.Print "Formular Controls:"
  '// For iCounter = 0 To iCount - 1
  '//   Debug.Print iCounter & ": " & _
  '//               asControls(iCounter)
  '// Next iCounter
  '// =====================================================
  On Error GoTo HandleErr
  Dim frm As Form
  Dim ctl As Control
 
  Dim iCount   As Integer
  Dim iCounter As Integer
  Dim fBClose  As Boolean
 
  ' Ist das Formular geöffnet?
  If SysCmd(acSysCmdGetObjectState, acForm, _
            psFrmName) <> 0 Then
    ' Ist das Formular im Entwurfs-Modus?
    If (Forms(psFrmName).CurrentView = 0) Then
      ' Ok, ist in Ordnung, tue nichts
    Else
      ' Nein, öffne es im Entwurfs-Modus
      DoCmd.OpenForm psFrmName, acDesign
      fBClose = True
    End If
  Else
    ' Öffne das Formular im Entwurfs-Modus
    DoCmd.OpenForm psFrmName, acDesign
    fBClose = True
  End If
 
  ' Formularobjekt setzen und Anzahl der Controls
  ' ermitteln
  Set frm = Forms(psFrmName)
  iCount = frm.Count
 
  ReDim pasControls(0 To iCount - 1)
 
  For Each ctl In frm.Controls
    pasControls(iCounter) = ctl.Name
    iCounter = iCounter + 1
  Next ctl
 
  If fBClose Then
    DoCmd.Close acForm, psFrmName
  End If
 
  A2XCtlsToArray = iCount
 
HandleExit:
  Exit Function
 
HandleErr:
  Select Case Err.Number
    Case Else
      MsgBox "Fehler " & Err.Number & ": " & _
             Err.Description, vbCritical, _
             "basFrm.A2XCtlsToArray"
  End Select
  Resume HandleExit
End Function