Microsoft Access 掲示板

With CodeContextObject の IF の使い方でエラーになります。

7 コメント
views
4 フォロー

ACCESS2010を使用です

<現状>

フォーム上にコンボボックスを設置し、「集合ソース」に1月;2月;3月;・・・12月と設定しており
下記コードで動作しております。

Private Sub 月割_AfterUpdate()

 With CodeContextObject
        .月割金額 = DLookup("[金額]", "Q_金額表", "[Q_金額表]![月]=[月割]")
    End With
  
End Sub

新たに新料金設定が必要となりYes/No型のチェックボックスを設けて下記のように記述
しましたが、”If ([フォーム1]![チェック460] = True) Then”の箇所でエラーとなります。
どこが間違っているのか分かりません。

教えていただけないでしょうか?

Private Sub 月割_AfterUpdate()

 If ([フォーム1]![チェック460] = True) Then

  With CodeContextObject
        .月割金額 = DLookup("[金額]", "Q_金額表", "[Q_金額表]![月]=[月割]")
 End With

 End If


 If ([フォーム1]![チェック460] = False) Then

 With CodeContextObject
        .月割金額 = DLookup("[金額]", "Q_金額表NEW", "[Q_金額表NEW]![月]=[月割]")
 End With

 End If

 End Sub

宜しくお願いします。

SUZU
作成: 2019/09/25 (水) 18:26:55
通報 ...
1

回答の前に、

Private Sub 月割_AfterUpdate()

 With CodeContextObject
        .月割金額 = DLookup("[金額]", "Q_金額表", "[Q_金額表]![月]=[月割]")
    End With
  
End Sub

このコードで、正しい結果になってますか。
コンボボックスを参照していないので、コンボボックスとは無関係の値になると思いますが?
一度、確認してみてください。

回答はそれからです。

3
hiroton 2019/09/26 (木) 08:49:52 25f51@f966d >> 1

なぜCodeContextObjectを使っているのかわからないってだけでCodeContextObjectMeと同等なんじゃないですかね
どこにコードを書いているかがないんでアレですが、まぁ動いてるんだろうなとは思ってます

4

私が疑問に思ったのは "[Q_金額表]![月]=[月割]" の部分で、この抽出条件では、コンボボックスの値を反映しないからです。ここに、この条件式を入れる意味はほとんど無意味。
質問から、コンボボックスで選択した値で抽出したいのだと読めますので。
Q_金額表 の中でフォーム上のコンボボックスを参照しているのなら正常に動く可能性はあります。

6
hiroton 2019/09/26 (木) 11:58:30 4451d@5a529 >> 3

あぁすみません。そうですね
なんかボケてたみたいです

2

ありがとうございます。

正常に動作しております。

説明不足で申し訳ありませんでした。
フォーム上に「年齢欄」があります
クエリ"Q_金額表"でフォーム上の「年齢欄」を参照して年齢のフィルターを掛けています。

宜しくお願い致します。

5
hatena 2019/09/26 (木) 11:25:11 修正

正常に動作しているなら、下記でいいかと。

Private Sub 月割_AfterUpdate()

    If Me.チェック460 = True Then
        Me.月割金額 = DLookup("[金額]", "Q_金額表", "[Q_金額表]![月]=[月割]")
    Else
        Me.月割金額 = DLookup("[金額]", "Q_金額表NEW", "[Q_金額表NEW]![月]=[月割]")
    End If
End Sub

ちょっと解説すると、

[フォーム1]![チェック460] ではフォーム上のコントロールを参照できないのでエラーになります。
Forms![フォーム1]![チェック460] とする必要があります。こうすればエラーになくなります。

コードが記述してあるフォーム(オブジェクト)は Me で参照できますので、Me!チェック460 と記述することもできます。

CodeContextObject はコードが実行されているオブジェクトという意味ですのでこれでもOKです。でも、長いので Me の方が楽ですよね。

7

hatena 様

ありがとうございました。
思う通り動作できました。

Meでの記述に変更致しました。
たいへん助かりました。