最近、いつ泣きましたか?

以前も質問させていただきました。
今回も宜しくお願いいたします。
まず、商品の売価変更の簡単なシステムを作ろうとしてます。そこでわからない点があるので教えてください。

1.フォームで商品コードを入力したら商品マスタから商品名を表示するようにしたのですが、商品マスタにない商品コードを入力したらエラーで止まってしまったのです。そうなったときのために「この商品コードは商品マスタに存在しません。」ようなメッセージを出したいのですが、どのタイミングで出したらよいかわかりません。

2.バーコードリーダーを使って商品コードを読むようにしたいのですが、実際読む込むと全角数字で読み込まれてしまいます。そこでそれを半角数字に直したいのですが、どのタイミングでどの関数を使用したらよいかわかりません。

3.レポートに以下のように6つの商品ごとに総合計を出すということはできるのでしょうか?
例)
A商品 100円
B商品 100円
C商品 100円
D商品 100円
E商品 100円
F商品 100円
総合計 600円

G商品 200円
H商品 100円
I商品 100円
J商品 100円
K商品 100円
L商品 200円
総合計 800円

馬鹿な質問で失礼します。本当は専門家にお願いしたいのですが、会社側に伝えたところ、お金を出せないため、初心者の私がつくることになりましたが、まわりにわかる人がいなくて本やネットで調べてもわからなかったので教えてください。宜しくお願いいたします。

A 回答 (2件)

ウーン!



1、どのタイミングで=>エラートラップを仕組みます。または、事前にチェックするです。

Private Sub プロシージャ名
On Error Goto Err_プロシージャ名
  ・・・・・
Exit_プロシージャ名:
  Exit Sub
Err_プロシージャ名:
  MsgBox ・・・・・・
  Resume Exit_プロシージャ名
End Sub

次の DBCount関数は、DCount関数の3倍速です。

Public Function DBCount(ByVal strField As String, _
            ByVal strTable As String, _
            Optional ByVal strWhere As String = "") As Variant
On Error GoTo Err_DBCount
   Dim N
   Dim strQuerySQL As String
   Dim rst     As ADODB.Recordset

   Set rst = New ADODB.Recordset
   strQuerySQL = "SELECT COUNT(" & strField & ") FROM " & strTable
   If Len(strWhere) > 0 Then
     strQuerySQL = strQuerySQL & " WHERE " & strWhere
   End If
   With rst
     .Open strQuerySQL, _
        CurrentProject.Connection, _
        adOpenStatic, _
        adLockReadOnly
     If Not .BOF Then
       .MoveFirst
       N = Nz(.Fields(0), 0)
     End If
   End With
Exit_DBCount:
On Error Resume Next
   rst.Close
   Set rst = Nothing
   DBCount = N
   Exit Function
Err_DBCount:
   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBCount)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
   Resume Exit_DBCount
End Function


2、半角を全角に=>StrConv関数を利用。

バーコードは自作していないのですか?
ならば、この質問は成立しないかと?
もしかしたら、私の利用しているリーダと仕様が違って全半角の設定があるのでしょうか?

? StrConv("ABC", vbNarrow)
ABC

ところで、商品コードをバーコードで読ます場合は、次のような手法がお勧めです。

Private Sub 商品コード_GotFocus()
  If Len(商品コード & "") = 0 Then
    DoCod.OpenForm ”商品コードの読み込み”
  End If
End Sub

<商品コードの読み込み>のコード

Private Sub 商品コード_AfterUpdate()
  Forms("フォーム名").Controls("商品コード")=strConv(商品コード, vbNarrow)
  Unload Me
End Sub

これですと、バーコードの処理をユーザに促すこと、手入力の双方を併用できます。

3、レポート合計。

テキストボックスを配置し、=Sum("XXXX")

*全て、検証なしの書きなぐりです。(ミスはありかも!)
    • good
    • 0
この回答へのお礼

返事が遅くなりましたが、大変たすかりました。現在、いそがしいので作業が中断してますが、ひまを見つけて再開してみます。ありがとうございました。

お礼日時:2006/08/31 20:53

> 1.フォームで商品コードを入力したら商品マスタから商品名を表示するように


> したのですが、商品マスタにない商品コードを入力したらエラーで止まって
> しまったのです。そうなったときのために「この商品コードは商品マスタに
> 存在しません。」ようなメッセージを出したいのですが、どのタイミングで
> 出したらよいかわかりません。

商品コードを入力するコントロールの更新前イベントで、

If DCount("*", "[商品マスタ]", "[商品コード]=" & Me!商品コード) = 0 Then
MsgBox "この商品コードは商品増谷存在しません。"
Cancel = True
End If

のようにしてみてください。


> 実際読む込むと全角数字で読み込まれてしまいます。

バーコードリーダーの設定で、全角/半角の設定ができるのでは?
取扱説明書などを確認してください。


> 3.レポートに以下のように6つの商品ごとに総合計を出すということは
> できるのでしょうか?

いろいろなやり方はあると思います。
6レコードだけが印刷できるようにレポートのデザインを調整して、
ページ合計を出すとか。

[ACC2002] レポートでページ別に数値型の列を集計する方法
http://support.microsoft.com/kb/296249/JA/
    • good
    • 0
この回答へのお礼

返事が遅くなりました。エラーの出し方等大変参考になりました。作業が中断している状況ですが、なんとか時間を見つけて完成させます。ありがとうございます。

お礼日時:2006/08/31 20:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す