|
確かにおっしゃる通りです。
分かりやすい変数名に変更させて頂きました。
Dim ctl As Control
Dim ctl_FieldName As Variant
>Dim ctl As Access.Textbox
ではなく、
Dim ctl As Control
と宣言しております
> ctl.ControlType = acComboBox Then
> という記述で何かおかしいな…と気づく訳です。
If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acCheckBox Then
と記述して、見た感じは間違いはないように感じます。(チェックボックスが漏れていました)
ctl As Control と宣言しているんですが、どこに間違いがあるのでしょうか・・・。
テキストボックスのみ編集した場合もあれば、テキストボックスとチェックボックスを編集した場合もあれば、
コンボボックスのみ編集する場合もあります。それぞれです。
> エラー発生時において、ctl という変数の中には
> どのコントロールが入っているのでしょうか。
あるクエリを元に貼り付けたコントロールの種類は「テキストボックス」、「コンボボックス」、
「チェックボックス」の3つのみです。
したがって、ctlの変数には上の3つのコントロールが入っていると思いますが、如何でしょうか。
下記プログラムで試しても、If Nz(ctl.OldValue) <> Nz(ctl.Value) Thenで
エラーが起きてしまいます。
テキストボックスのみ編集した場合は何故か、問題ありませんが、両方を編集した場合は、
エラーが起きてしまいます。
------------------------------------------------------
Dim ctl As Control
Dim ctl_FieldName As Variant
ctl_FieldName = Null 'Variantなので、初期値Null
'コントロール名(フィールド名)の取得
For Each ctl In Me.Controls
'コントロールがテキストボックスである
If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acCheckBox Then
'更新前データと更新後データを比較
If Nz(ctl.OldValue) <> Nz(ctl.Value) Then
'コントロール名をctl_FieldName に格納
If IsNull(ctl_FieldName) Then
ctl_FieldName = ctl.Name
Else
ctl_FieldName = ctl_FieldName & "," & Chr(32) & Chr(32) & ctl.Name
End If
End If
End If
Next ctl
MsgBox ctl_FieldName
|
|