Access VBA質問箱 IV

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

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


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

【6510】入力規制 koorin 05/10/17(月) 13:16 質問[未読]
【6511】Re:入力規制 小僧 05/10/17(月) 14:47 発言[未読]
【6514】Re:入力規制 koorin 05/10/17(月) 16:25 質問[未読]
【6516】Re:入力規制 小僧 05/10/17(月) 16:37 発言[未読]
【6519】Re:入力規制 koorin 05/10/17(月) 17:42 質問[未読]
【6520】Re:入力規制 小僧 05/10/17(月) 18:00 発言[未読]
【6523】Re:入力規制 koorin 05/10/18(火) 0:14 質問[未読]
【6525】Re:入力規制 小僧 05/10/18(火) 9:30 回答[未読]
【6536】Re:入力規制 koorin 05/10/18(火) 12:06 質問[未読]
【6538】Re:入力規制 小僧 05/10/18(火) 13:27 発言[未読]
【6544】Re:入力規制→出来ました! koorin 05/10/18(火) 16:02 お礼[未読]
【6545】Re:すみません。追加です。 小僧 05/10/18(火) 16:22 発言[未読]
【6546】Re:すみません。追加です。 koorin 05/10/18(火) 17:50 お礼[未読]
【6549】Re:すみません。追加です。 小僧 05/10/19(水) 9:48 発言[未読]
【6551】Re:すみません。追加です。 koorin 05/10/19(水) 11:34 お礼[未読]

【6510】入力規制
質問  koorin  - 05/10/17(月) 13:16 -

引用なし
パスワード
   テーブルの入力規制について質問です。
すでに作成されているクエリの値を参照してテーブルデータの入力規制を
作成したいのですがどうしたらよいでしょうか?
具体的にいうと、部品の見積価格をテーブルに入力したいのですが、その入力規制としてクエリで抽出したコスト合計の130%以上という式を入れたいのです。
そして実際に見積価格のフィールドにコストの130%以上の値が入力されたとき
「利益30%以下!」というエラーメッセージを表示させたいのです。
ACCESSのヘルプを見たらテーブルのプロパティで設定する場合、他のテーブルやクエリのフィールド参照は出来ないと書いてあったので困っています。
見積価格を入力する場所をクエリにしてもよいのですが、この場合クエリでの
入力規制の設定方法も分かりません。
どなたかよい方法を教えてください。よろしくお願いします。

【6511】Re:入力規制
発言  小僧  - 05/10/17(月) 14:47 -

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

Access の機能の話になってしまうのですが、
テーブルやクエリは直接値を操作するものではなく、
ユーザからのデータ投入に関してはフォームを介するのが一般的です。

連結フォームでデータの入力画面を作成されれば、
テーブルに連結されたテキストボックスの「更新前処理」にでも
VBA を使って色々と判断させる事ができますよ。

【6514】Re:入力規制
質問  koorin  - 05/10/17(月) 16:25 -

引用なし
パスワード
   小僧 さん
アドバイスありがとうございます。
見積金額を入力したいテーブルのフォームはすでに作ってあります。
見積金額のテキストボックスの更新前処理に式ビルダで条件を入れれば
よいということでしょうか?
VBAは詳しくないので、その辺も教えていただけませんか?
よろしくお願いします。

【6516】Re:入力規制
発言  小僧  - 05/10/17(月) 16:37 -

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

>クエリで抽出したコスト合計の130%以上

ここの作りが不明ですので、完全な回答にはなりませんが、
テキストボックスの「更新前処理」で
「コードビルダ」を選択して、「...」をクリック。

出現した画面に

Private Sub 見積金額_BeforeUpdate(Cancel As Integer)
  If Me.見積金額.Value < xxx Then
    MsgBox "利益30%以下!"
    Cancel = True
  End If
End Sub

のようにコードを書くと、
If の条件を満たすとメッセージボックスが出現して、
データの更新ができなくなります。

あとは xxx の場所に、クエリから持ってくる(?)値を入れることになります。

【6519】Re:入力規制
質問  koorin  - 05/10/17(月) 17:42 -

引用なし
パスワード
   ▼小僧 さん:
大変丁寧に回答を頂きありがとうございます。

>>クエリで抽出したコスト合計の130%以上

ですが、具体的に説明すると”注番別コスト”という名前のクエリの
”コスト合計”というフィールドの値に1.3をかけたものです。
見積金額を入力するテーブルと注番別コストは注番でリレーションシップが
組まれています。

教えていただいたコードのxxxにはどう入力したらよいのでしょうか?

たびたびすみません。よろしくお願いします。

【6520】Re:入力規制
発言  小僧  - 05/10/17(月) 18:00 -

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

なんとなく状況は理解できるのですが…。

VBA や クエリ を使用する場合は、
フィールドのデータ型によって条件式が変わる場合が多々あります。

また今回のご質問の場合は、フォーム上にどういったコントロールが
配置されているかもご提示されておりません。

全て回答者の想像任せになってしまうために、勘を外すと効率が悪くなってしまいますよね?
どのへんまでを情報として提示した方が良いのかは
難しいと思うのですが、もうちょっと情報量を増やして下さいね。


さて、フォーム上には「注番」というテキストボックスに数値型の番号があると仮定しますと、

Private Sub 見積金額_BeforeUpdate(Cancel As Integer)
Dim curCost As Currency
  curCost = CCur( _
  DLookup("コスト合計","注番別コスト","注番 = " & Me.注番.Value)*1.3)

  If Me.見積金額.Value < curCost Then
    MsgBox "利益30%以下!"
    Cancel = True
  End If
End Sub

こんな感じになると思います。

【6523】Re:入力規制
質問  koorin  - 05/10/18(火) 0:14 -

引用なし
パスワード
   ▼小僧 さん:
大変お返事が遅くなってすみません。
せっかく教えていただいたのですが、何度やってもエラーメッセージが
出てしまいます・・・
メッセージをそのまま書くと、

実行時エラー'3075':
クエリ式'注番=FK508012-'の構文エラー:演算子がありません。

小僧さんのお返事に

>さて、フォーム上には「注番」というテキストボックスに数値型の番号があると仮定しますと、

とありましたが、注番はエラーメッセージをご覧の通りテキスト型です。
注番のフィールドには定型入力 >LL000000\-99;0;_ を設定しています。

>VBA や クエリ を使用する場合は、
>フィールドのデータ型によって条件式が変わる場合が多々あります。
>

だからエラーが出たのでしょうか?

>また今回のご質問の場合は、フォーム上にどういったコントロールが
>配置されているかもご提示されておりません。
>
>全て回答者の想像任せになってしまうために、勘を外すと効率が悪くなってしまいますよね?
>どのへんまでを情報として提示した方が良いのかは
>難しいと思うのですが、もうちょっと情報量を増やして下さいね。

すみません、どこまで書けばよいのか分からなくて・・・

自分で気になっている点は「注番別コスト」クエリの「注番」、「コスト合計」
は「注番別コスト詳細」クエリの「注番」をグループ化、「コスト」を合計した
ものです。グループ化したフィールドを使っても問題ないですか?
あと情報として何が必要でしょうか?

なんとかあとは自分で解決出来ないかと色々試しましたが、VBAがよく分からない
のでやはり無理でした。
申し訳ありません、よろしくお願いします。

【6525】Re:入力規制
回答  小僧  - 05/10/18(火) 9:30 -

引用なし
パスワード
   ▼koorin さん:
おはようございます。

>実行時エラー'3075':
>クエリ式'注番=FK508012-'の構文エラー:演算子がありません。

>>VBA や クエリ を使用する場合は、
>>フィールドのデータ型によって条件式が変わる場合が多々あります。

>だからエラーが出たのでしょうか?

他に問題があるかもしれませんが、原因の一端はここにありますね。

テキスト型であれば、

 DLookup("コスト合計","注番別コスト","注番 = '" & Me.注番.Value & "'")

となります。まずはここから直していきましょう。


>自分で気になっている点は「注番別コスト」クエリの「注番」、「コスト合計」
>は「注番別コスト詳細」クエリの「注番」をグループ化、「コスト」を合計した
>ものです。グループ化したフィールドを使っても問題ないですか?

もし、上記のDLookup関数がうまく行くようでしたら、こちらも試してください。

 DSum("コスト","注番別コスト詳細","注番 = '" & Me.注番.Value & "'")

クエリからクエリを作ると動作が遅くなる場合があるので、
DSum関数を使ってうまく行くようでしたらそちらの方が良いかと思います。


>あと情報として何が必要でしょうか?

今まで仮定で決めていたのですが、
フォーム上にあるテキストボックス名は「注番」で大丈夫でしょうか?


>VBAがよく分からない

実は上に提示させて頂いた事も、ヘルプに載っています。
(Access のヘルプでなく、VBA のコードが表示される画面でのヘルプです。)

ヘルプを読むのは慣れるまではきつい事だとは思われますが、
コードを組む際には必須ですので、乗り越えていきましょう。
ヘルプが理解できない、ヘルプで探せない場合はご遠慮せずに質問してくださいね。

【6536】Re:入力規制
質問  koorin  - 05/10/18(火) 12:06 -

引用なし
パスワード
   ▼小僧 さん:
何度もありがとうございます。
教えていただいたように変更してやってみましたが、またエラーが
出ました。今度は

実行時エラー'94':
Nullの使い方が不正です。

構文は
Private Sub 見積金額_BeforeUpdate(Cancel As Integer)
Dim curCost As Currency
  curCost = CCur( _
  DLookup("コスト合計","注番別コスト","注番 = '" & Me.注番.Value & "'")*1.3)

  If Me.見積金額.Value < curCost Then
    MsgBox "利益30%以下!"
    Cancel = True
  End If
End Sub

で、エラーが出たとき3,4行目が黄色になって4行目に矢印が出ていました。

>今まで仮定で決めていたのですが、
>フォーム上にあるテキストボックス名は「注番」で大丈夫でしょうか?

「注番」です。

>実は上に提示させて頂いた事も、ヘルプに載っています。
>(Access のヘルプでなく、VBA のコードが表示される画面でのヘルプです。)
>
>ヘルプを読むのは慣れるまではきつい事だとは思われますが、
>コードを組む際には必須ですので、乗り越えていきましょう。

こういう場合VBAヘルプの目次でいうとどこを見ればよいのでしょうか?

お手数をお掛けしますがよろしくお願いします。

【6538】Re:入力規制
発言  小僧  - 05/10/18(火) 13:27 -

引用なし
パスワード
   ▼koorin さん:
Null 対策も含め、ちょっとコードを変えてみました。


Private Sub 見積金額_BeforeUpdate(Cancel As Integer)
Dim varCost As Variant
  varCost = DLookup("コスト合計", "注番別コスト", "注番 = '" & Me.注番.Value & "'")
  
  If IsNull(varCost) Then
    MsgBox "注番:" & Me.注番.Value & "のコスト合計が見つかりません。"
    Exit Sub
  Else
    varCost = CCur(varCost * 1.3)
    MsgBox "閾値:" & varCost
  End If
  
  
  If Me.見積金額.value < varCost Then
    MsgBox "利益30%以下!"
    Cancel = True
  End If
End Sub

Null 値が返って来てしまう、という事は 注番別コスト から
フォームで指定した 注番 が見つからない事になってしまうのですが…。


>こういう場合VBAヘルプの目次でいうとどこを見ればよいのでしょうか?

人によって使い方が異なるとは思いますが、当方は「質問」タブを良く使います。
検索窓に「DLookup」と入れて実行すると、DLookup関数に関する情報が載っています。

【6544】Re:入力規制→出来ました!
お礼  koorin  - 05/10/18(火) 16:02 -

引用なし
パスワード
   ▼小僧 さん:

どうもありがとうございますm(__)m
うまくいきました!!

>Null 値が返って来てしまう、という事は 注番別コスト から
>フォームで指定した 注番 が見つからない事になってしまうのですが…。

申し訳ありません、身に覚えがあります。確かにまだコストの出ていないデータで
テストしていました。

閾値が出ることにより幾ら以上で見積もればよいかも一目でわかり、
やりたかったこと以上のことが出来、とても嬉しいです。

ヘルプの便利な使い方も教えていただき本当にありがとうございました。
m(__)m m(__)m m(__)m m(__)m m(__)m m(__)m m(__)m m(__)m m(__)m m(__)m

【6545】Re:すみません。追加です。
発言  小僧  - 05/10/18(火) 16:22 -

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

色々テストをしていたのですが、
テキストボックスの数値を文字型と判断される場合があるので、

>If Me.見積金額.Value < varCost Then

If CCur(Me.見積金額.Value) < varCost Then

と変更をしておいて下さい。すみません。

【6546】Re:すみません。追加です。
お礼  koorin  - 05/10/18(火) 17:50 -

引用なし
パスワード
   ▼小僧 さん:
わざわざありがとうございます。構文訂正しました。

あと、余談なんですが会社の上司からVBAの本を買ってもよいと
言われたのですが、小僧さんのお勧めはありますか?
昨日、本屋へ寄色々見ていたのですがAccessのVBA関連のものだけでも
沢山あり自分では判断できませんでした。

【6549】Re:すみません。追加です。
発言  小僧  - 05/10/19(水) 9:48 -

引用なし
パスワード
   ▼koorin さん:
おはようございます。

>あと、余談なんですが会社の上司からVBAの本を買ってもよいと
>言われたのですが、小僧さんのお勧めはありますか?

以前に同じ様な質問があったのですが、当方の回答です。[#5157]


参考書を購入される場合でも、AmazonなどWeb上に情報がありますね。

http://www.amazon.co.jp/exec/obidos/tg/browse/-/525624/ref=br_bx_1_c_1_4/250-1784420-2043449

カスタマーレビューもついているので(やらせかもしれませんが…)、
実際に買った人の意見も参考になると思います。


当方が Access の参考書を購入した事がないので
この程度しかアドバイスできません。すみません。

【6551】Re:すみません。追加です。
お礼  koorin  - 05/10/19(水) 11:34 -

引用なし
パスワード
   ▼小僧 さん:
おはようございます。

いろいろありがとうございました。
昨日自宅へ戻ってから時間をかけてここの過去ログや目安箱を読み、
自分が甘えた気持ちで質問していたことを反省しました。

会社で作業をしていると、時間に追われての作業なので自分で考えてて
分からないとついつい楽な方(ここのサイトで質問してしまうm(__)m)を
選んでしまいます。
小僧さん他回答して下さる方はわざわざご自分の時間を割いて他人の
困っていることに答えて下さっている。
そのことを考えたら私たち質問するほうは自分のことなのだからもっと
自分で色々な方法を取って考え、それでもだめだったら最終手段として
ここのサイトを利用すべきだと思いました。

改めてすみませんでしたm(__)m。
でもどんな質問でもご丁寧に回答していただきありがとうございました。

今レポートで分からないことが2点ありますが、今回は自分なりに頑張ってみます。
・・・でもそれでも出来なかったら・・・
また相談に乗ってください。

ってずいぶん内容がずれてしまってすみませんでした。
追伸:VBAの本はニキータさんの「Access VBAプログラミング 開発工房」を
本屋さんで探してみようと思います。

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