Ich habe eine Funktion, die alle Steuerelemente in einem Formular durchläuft. Wenn das Tag "Audit" anzeigt, verfolgt es die Änderungen, die an diesem Feld vorgenommen wurden. Es hat bis jetzt gut funktioniert. Jetzt gibt es einen Fehler von "Operation wird für diesen Objekttyp nicht unterstützt". Wenn ich die Fehlerbehandlung abstelle und den Code überprüfe, füttert er aus irgendeinem Grund das tatsächliche Feld VALUE als den Kontrollnamen. Jede Hilfe würde sehr geschätzt werden. Hier ist der Code:Zugriff VBA-Schleife durch Steuerelemente Zeigt Feld Wert als Steuerelementname
Dim rst As Recordset
Dim ctl As Control
Dim datTimeCheck As Date
Dim strUserID As String
Dim dbs As DAO.Database
Dim strSQL As String
Set dbs = CurrentDb
strSQL = "SELECT * FROM ChangeLog"
Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges)
datTimeCheck = Now()
strUserID = Environ("USERNAME")
For Each ctl In Screen.ActiveForm.Controls
If ctl.Tag = "Audit" Then
If Nz(ctl.Value) <> Nz(ctl.OldValue) Then
With rst
.AddNew
![ChangeTimeStamp] = datTimeCheck
![UserId] = strUserID
![FormName] = Screen.ActiveForm.Name
![LeadID] = Lead
![EstID] = Estimate
![EOINumber] = Order
![InstalID] = Install
![FieldName] = ctl.ControlSource
![FieldValueBeforeChange] = Nz(ctl.OldValue, "Blank")
![FieldValueAfterChange] = Nz(ctl.Value, "Blank")
.Update
End With
End If
End If
Next ctl
Ich schätze den Vorschlag. Ich werde es definitiv nutzen können, um dies effizienter zu machen. Das löst das Problem jedoch nicht. Es erzeugt immer noch den gleichen Fehler. Ich habe ein Textfeld mit dem Namen "Adresse", und der Wert auf dem bestimmten Datensatz, mit dem ich gerade teste, ist "444 Shadow Hill". Wenn ich den Code ausführe, läuft er falsch und zeigt ctl als "444 Shadow Hill", wenn ich auf dem Debugging-Bildschirm darüber blättern werde. –
In welcher Zeile markiert der Debugger? Auf 'ctl.ControlSource'? – Parfait
on "Für jedes ctl In Screen.ActiveForm.Controls" –