Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4369 / 9994 ←次へ | 前へ→

【8872】Re:履歴について
質問  アイマール  - 06/12/7(木) 15:48 -

引用なし
パスワード
   確かにおっしゃる通りです。
分かりやすい変数名に変更させて頂きました。
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
1,172 hits

【8868】履歴について アイマール 06/12/6(水) 19:30 質問
【8871】Re:履歴について 小僧 06/12/7(木) 14:42 発言
【8872】Re:履歴について アイマール 06/12/7(木) 15:48 質問
【8873】Re:履歴について 小僧 06/12/7(木) 16:16 発言
【8875】Re:履歴について アイマール 06/12/7(木) 16:53 質問
【8877】Re:履歴について 小僧 06/12/7(木) 17:50 発言

4369 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078215
(SS)C-BOARD v3.8 is Free