Access VBA質問箱 IV

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

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


1159 / 2272 ツリー ←次へ | 前へ→

【8518】エラーで実行できません ねもと 06/8/25(金) 11:42 質問[未読]
【8521】Re:エラーで実行できません 小僧 06/8/25(金) 13:13 回答[未読]
【8523】Re:エラーで実行できません ねもと 06/8/25(金) 13:40 質問[未読]
【8527】Re:エラーで実行できません 小僧 06/8/25(金) 14:36 回答[未読]
【8528】Re:エラーで実行できません ねもと 06/8/25(金) 15:00 お礼[未読]
【8529】Re:エラーで実行できません 飛ばない豚 06/8/25(金) 15:04 発言[未読]
【8531】Re:エラーで実行できません ねもと 06/8/25(金) 15:07 お礼[未読]

【8518】エラーで実行できません
質問  ねもと  - 06/8/25(金) 11:42 -

引用なし
パスワード
   マクロを実行すると指定した式にMicrosoft Accessが見つけることのできない関数名か含まれています。と出てしまいます。
その後に
マクロ名 登録
条件 TRUE
アクション名 プロシージャの実行
引数 エラーチェック()
と出ます。

入力テーブルに、A、A店舗コード、B、B店舗コードがあり
Aをチックしたときには、A店舗コートを入力し
Bをチックしたときには、B店舗コートを入力して
T店名テーブルと該当する場合は、企業コードテーブル追加のクエリを実行し
該当しない場合は、エラーメッセジを出したいのです。
モジュールを作成して単体ではうまくいったのですが、
フォームからマクロを実行するとエラーになってしまいます。
もっと簡単なやり方があるかもしれませんが、自分ではこれが精一杯です。
よろしくお願いします


Public Function エラーチェック()
Dim Db As Database
Dim INRsA As Recordset
Dim INRsB As Recordset
Dim 読込A As String
Dim 読込B As String
Dim エラーA As Integer
Dim エラーB As Integer

  Set Db = CurrentDb
  
  読込A = "入力テーブル"
  読込B = "T店名"
  エラーA = 0
  エラーB = 0
  
  Set INRsA = Db.OpenRecordset(読込A, dbOpenDynaset)
  Set INRsB = Db.OpenRecordset(読込B, dbOpenDynaset)
  
  Do Until INRsB.EOF
   If INRsA!A = True And INRsB!店舗コード = INRsA!A店舗コード Then
     エラーA = 1
   End If
   If INRsA!B = True And INRsB!店舗コード = INRsA!B店舗コード Then
     エラーB = 1
   End If
  INRsB.MoveNext
  Loop
  
  If INRsA!A = False And INRsA!A店舗コード = Null Then
     エラーA = 1
  End If
  If INRsA!B = False And INRsA!B店舗コード = Null Then
     エラーB = 1
  End If
  
  If エラーA = 1 And エラーB = 1 Then
    DoCmd.OpenQuery "企業コードテーブル追加"
  Else
    If エラーA = 0 Then
    MsgBox "A店舗コードエラー"
    Else
    MsgBox "B店舗コード力エラー"
    End If
  End If
  
  INRsA.Close
  INRsB.Close
  Db.Close

End Function

【8521】Re:エラーで実行できません
回答  小僧  - 06/8/25(金) 13:13 -

引用なし
パスワード
   ▼ねもと さん:
こんにちは。

>Public Function エラーチェック()

はどちらに書かれていますでしょうか。

もしフォームモジュールに書かれているのでしたら、
標準モジュールに移すとエラーが解消されるかもしれません。

【8523】Re:エラーで実行できません
質問  ねもと  - 06/8/25(金) 13:40 -

引用なし
パスワード
   小僧 さん:
いつもありがとうございます。
たぶん標準モジュールで作成しています。

標準モジュールに移すとはどういうことですか?

【8527】Re:エラーで実行できません
回答  小僧  - 06/8/25(金) 14:36 -

引用なし
パスワード
   ▼ねもと さん:
こんにちは。

>標準モジュールに移すとはどういうことですか?

ねもとさんのお使いの環境はAc97だったでしょうか。

そうなると、データベースウィンドウに
「テーブル」「フォーム」などタブが色々ありと思いますが、

「モジュール」から「新規作成」を選ぶと
「Module1」の様なものが作成できると思います。

フォームの方にコードが書いてあるのでしたらそれを切り取って
Module1 に貼り付けて実行されてみて下さい。


>標準モジュールで作成しています。

>>モジュールを作成して単体ではうまくいったのですが、

という事でしたら、

>> 見つけることのできない関数名か含まれています

というエラーが発生する原因としては
引数名が間違っている事が考えられますね。

(ー⇒−などの微妙な違いなど…)

【8528】Re:エラーで実行できません
お礼  ねもと  - 06/8/25(金) 15:00 -

引用なし
パスワード
   小僧 さん
ありがとうございます。できました。
Public Function エラーチェック()

Public Function エラー()
に変更したらできました。
ありがとうございました。

【8529】Re:エラーで実行できません
発言  飛ばない豚  - 06/8/25(金) 15:04 -

引用なし
パスワード
   ▼ねもと さん:
小僧 さん 横レス失礼します。


関数名に日本語が入っていると、ときどきこのようなエラー(Accessが見つけることのできない関数名か含まれています)に遭遇します。
(Accessのバージョンが上がるとだいぶ解消されるようですが)


昔、Win98,Acc97の環境だったとき、

全て日本語だった場合、殆どエラーでした。

関数名を英数+日本語(例えば、Function Fxエラー処理 とか)にした場合、
エラーの確率は減りましたが、3割(体感?!)程度はエラーでした。

関数名を全て英語にした場合、エラーは発生しませんでした。

これは、Functionに限りで、Subについては日本語でも大丈夫でした。


それ以来の癖(?)で、私は、Functionについては全て英数字の名前、
Subについては、英数+日本語(読みやすさの為)にしてます。
Function FxErrorChk()
Sub sub_エラーチェック()
こんな感じです。

変更してからエラーが発生したことはありません。
(WinとAccのバージョンが上がった為かもしれませんが)


名前を変更すると、他のところにも影響するかもしれませんが、
Functionの場合、英数名にする事をお勧めします。

【8531】Re:エラーで実行できません
お礼  ねもと  - 06/8/25(金) 15:07 -

引用なし
パスワード
   ▼飛ばない豚 さん:
ありがとうございます。
今度から英数字で対応していきたいと思います。
また何かありましたらよろしくお願いします。

1159 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078222
(SS)C-BOARD v3.8 is Free