Datensatzänderungen im Formular anzeigen

Den Code optimieren

Der hier vorgestellte Code ist zwar korrekt und funktioniert, für Formulare mit sehr vielen Steuerelementen ist er jedoch sehr aufwändig zu erstellen, und es sind viele Anpassungen notwendig, wenn Sie Steuerelemente umbenennen, aus dem Formular löschen oder neue hinzufügen. Für komplexere Formulare ist es daher sinnvoller, die Steuerelemente in Schleifen zu bearbeiten (Listing 4). Sie benötigen dazu je eine Prozedur

  • zum Anzeigen der alten Werte,

  • zum Ausblenden der Steuerelemente beim Datensatzwechsel,

  • zum Wiederherstellen der alten Werte und

  • entsprechende Ereignisprozeduren, um diese Prozeduren aufzurufen.

Sub ausblenden(strSuffix As String, strPraefix As String)
Dim objContr As Control
Dim bytSuff As Byte
Dim lngI As Long
bytSuff = Len(strSuffix)
For lngI = 1 To Me.Controls.Count
On Error Resume Next
Set objContr = Me.Controls(lngI)
If (strSuffix <> "") Then
If Mid(objContr.ControlName, Len(objContr.ControlName) - _
bytSuff + 1) = strSuffix Then
'Name endet mit Suffix
objContr.Visible = False
End If
ElseIf (strPraefix <> "") Then
If InStr(1, objContr.ControlName, strPraefix) = 1 Then
'Name beginnt mit Präfix
objContr.Visible = False
End If
End If
Next lngI
End Sub
Sub einblenden(strSuffix As String, strPraefix As String)
Dim objContr As Control
Dim bytSuff As Byte
Dim lngI As Long
Dim strName As String
bytSuff = Len(strSuffix)
Dim strSuffixTemp As String
Dim strPraefixTemp As String
For lngI = 0 To Me.Controls.Count
On Error Resume Next
Set objContr = Me.Controls(lngI)
strSuffixTemp = Mid(objContr.ControlName, _
Len(objContr.ControlName) - bytSuff + 1)
strPraefixTemp = Mid(objContr.ControlName, 1, Len(strPraefix))
If ((strSuffix <> "") Or (strPraefix <> "")) Then
If (strSuffix <> "") And (strSuffixTemp <> strSuffix) Then
'Name endet nicht mit Suffix und beginnt nicht mit Präfix
'Prüfen, ob der alte Wert vom aktuellen abweicht
If objContr.Value <> objContr.OldValue Then
'Alten Wert anzeigen
strName = objContr.ControlName & strSuffix
Me.Controls(strName).Value = objContr.OldValue
Me.Controls(strName).Visible = True
Else
Me.Controls(strName).Visible = False
End If
ElseIf (strPraefix <> "") And ((strPraefixTemp <> strPraefix) _
And (strPraefixTemp <> "")) Then
If objContr.Value <> objContr.OldValue Then
strName = strPraefix & objContr.ControlName
'Alten Wert anzeigen
Me.Controls(strName).Value = objContr.OldValue
Me.Controls(strName).Visible = True
Else
Me.Controls(strName).Visible = False
End If
End If
End If
Next lngI
End Sub
Sub wiederherstellen(strSuffix As String, strPraefix As String)
Dim objContr As Control
Dim bytSuff As Byte
Dim lngI As Long
Dim strName As String
bytSuff = Len(strSuffix)
Dim strSuffixTemp As String
Dim strPraefixTemp As String
For lngI = 0 To Me.Controls.Count
On Error Resume Next
Set objContr = Me.Controls(lngI)
strSuffixTemp = Mid(objContr.ControlName, _
Len(objContr.ControlName) - bytSuff + 1)
strPraefixTemp = Mid(objContr.ControlName, 1, Len(strPraefix))
If ((strSuffix <> "") Or (strPraefix <> "")) Then
If (strSuffix <> "") And (strSuffixTemp <> strSuffix) Then
'Name endet nicht mit Suffix und beginnt nicht mit Präfix
'Prüfen, ob der alte Wert vom aktuellen abweicht
If objContr.Value <> objContr.OldValue Then
'Alten Wert wiederherstellen
strName = objContr.ControlName & strSuffix
objContr.Value = Me.Controls(strName).Value
Me.Controls(strName).Visible = True
Else
Me.Controls(strName).Visible = False
End If
ElseIf (strPraefix <> "") And ((strPraefixTemp <> _
strPraefix) And (strPraefixTemp <> "")) Then
If objContr.Value <> objContr.OldValue Then
strName = strPraefix & objContr.ControlName
'Alten Wert wiederherstellen
objContr.Value = Me.Controls(strName).Value
Me.Controls(strName).Visible = True
Else
Me.Controls(strName).Visible = False
End If
End If
End If
Next lngI
End Sub