Microsoft Access 掲示板

views
4 フォロー
6,283 件中 6,001 から 6,040 までを表示しています。
17
igaguri 2019/05/24 (金) 07:29:24 32a1e@d14a6

ありがとうございます。
JANコード 以外にも 自社コード での商品検索がありますので参考にして下記のように記述したところ
メインフォームでのレコードの移動はできているのですが
  MsgBox "未登録のコードを入力しました。もう一度自社コードを確認してください。" が表示されてしまいます。
どこが間違っているのでしょうか?

Private Sub Btn 自社コードで検索する_Click()

       If Nz(Me.自社コード検索, "") = "" Then
        MsgBox "自社コード入力欄 に値が入力されていません。自社コードを入力してください。"
        Me.SetFocus
        Me.自社コード検索.SetFocus
        Exit Sub
    End If

    Forms![C15_入出庫履歴_メイン].SetFocus
    Forms![C15_入出庫履歴_メイン]!自社コード.SetFocus
    DoCmd.FindRecord Me.自社コード検索, acEntire

    If Me.自社コード検索 = Forms![C15_入出庫履歴_メイン]!自社コード Then
    DoCmd.Close acForm, Me.Name
    Else
        MsgBox "未登録のコードを入力しました。もう一度自社コードを確認してください。"
        Me.SetFocus
        Me.自社コード検索.SetFocus
    End If

End Sub

2
igaguri 2019/05/23 (木) 22:57:16 32a1e@d14a6

ありがとうございます。
SELECT DISTINCTROW C1_入出庫台帳.入出庫ID, Format$([C1_入出庫台帳].[入出庫日],'mmmm yyyy') AS [入出庫日 を月でグループ化], C1_入出庫台帳.品名ID, C1_入出庫台帳.入出庫備考, Sum(C1_入出庫台帳.入庫数量) AS [入庫数量 の 合計], Sum(C1_入出庫台帳.出庫数量) AS [出庫数量 の 合計]
FROM C1_入出庫台帳
GROUP BY C1_入出庫台帳.入出庫ID, Format$([C1_入出庫台帳].[入出庫日],'mmmm yyyy'), C1_入出庫台帳.品名ID, C1_入出庫台帳.入出庫備考, Year([C1_入出庫台帳].[入出庫日])*12+DatePart('m',[C1_入出庫台帳].[入出庫日])-1;画像1

入出庫ID 6 と 12 は 品名ID 1 で同じ2019年4月 に出荷されているので集計されて出庫数量の合計欄が 15 にならないといけないと思うのですが?私の間違いでしょうか?

1

画像が見づらいので、詳細が分かりません。

クエリをSQLビューにして表示されるSQL文をコピーして貼り付けてもらえますか。

また、どのようにうまく集計できないのか、言葉で説明してもらえますか。

11
hatena 2019/05/23 (木) 19:55:37 修正 >> 8

メインメニュー起動時にAccessの閉じるボタンが右上に表示されますが、ここはメインメニューの閉じるボタンのみで
閉じてもらいたいので、そのようにしてみました。

Windowsの普通のアプリには閉じるボタン(×)がついているものです。それをあえて消すのは、あまりよい設計とはいえないと思います。
フォーム上の閉じるボタンでも、ウィンドウの閉じるボタンでも同じ動作になるように設計すればいいだけのことです。
閉じる時に必要な処理は、メインメニューの「閉じる時」に記述すればいいでしょう。処理の最後に、
DoCmd.Quit でAccessを終了します。
フォーム上の閉じるボタンは、単純に
Docmd.Close
だけでいいでしょう。

5

txt氏名ID のコントロールソースには何も設定しません。
既定値には、実際に存在する 氏名ID を設定しておいてください。
その個人のデータが開いた直後に表示されます。

あるいは、下記の式を設定しておいてもいいでしょう。

=DLookup("氏名ID","個人マスター")

テーブルの先頭の個人のデータが表示されます。

16

テキスト型でいいと思います。数値型だと桁数オーバーになったり、先頭の0が消えたりしますので。
フィールドの「IME入力モード」は「オフ」にしておくといいでしょう。

15

非連結テキストボックスの場合、通常は IsNull でいいと思います。
通常のユーザーによる入力では "" になることはないので。
ただし、VBAで "" を代入したりすると、""(空文字列)なることもあるので、Nzの方がより安全かとは思います。

連結なら、フィールドの方で、「空文字列の許可」を「いいえ」にすれば、"" になることはないので、IsNullで問題ないです。
逆に、「空文字列の許可」を「はい」、「値要求」を「はい」にすると、Nullになることはなく、
Me.JANコード検索 = "" でOKということになります。

14
igachan 2019/05/23 (木) 17:01:02 fdd2e@d14a6

本来、バーコードのデータ型は数値型とデータ型のどちらを使うべきなのでしょうか?
何もわからないので 住所入力支援のカスタマバーコードがテキスト型なのでテキスト型にしていますが・・・?

13
igachan 2019/05/23 (木) 16:58:20 fdd2e@d14a6

テーブル B1_在庫品マスター の フィールド JANコード のデータ型がテキスト型だからではないでしょうか?

12
名前なし 2019/05/23 (木) 13:48:36 cb785@f966d >> 11

テキストボックスってIsNullでいいんでしたっけ?

If Nz(Me.JANコード検索, "") = "" Then

いつもこんな感じでやってますが

11

クリック時のプロシージャの冒頭に下記のコードを挿入してください。

Private Sub JANコードで検索する_Click()
    If IsNull(Me.JANコード検索) Then
        MsgBox "JANコード検索 に値が入力されていません。JANコードを入力してください。"
        Exit Sub
    End If

    '以下、略

End Sub
4
ゆきぴ 2019/05/23 (木) 11:49:50 598e9@20787

ありがとうございます。

予定フィールドの氏名IDは数値型でサブフォームにはコンボボックスで作成しています。

>txt氏名ID に氏名IDを入力しておく必要があります。規定値にも氏名IDを設定しておいて試してみてください。

txt氏名IDのコントロールソースと規定値に[氏名ID]にすると、
実行時エラー'2424'
指定した式にMicrosoftAccessが見つけることができないフィールド、コントロール、プロパティ名が含まれています。
になります。
txt氏名IDのコントロールソースと規定値に=[F_calendarSF].[Form]![氏名ID]を設定しましたが同じく3075の実行時エラーが出ます。
サブフォームの氏名IDの規定値に数字を入れていくと、メインフォームサブフォームとも規定値のIDのスケジュールだけが表示されました。

出来れば入力フォームを開くときにIDを聞かれてそれを表示するという形にしたいです。

10
igaguri 2019/05/23 (木) 07:34:01 32a1e@d14a6

御世話になります。
上記に加えて、
テキストボックス JANコード検索  が 空 のままで間違って JANコードで検索するボタン を押してしまった場合 
JANコード検索 に値が入力されていません。JANコードを入力してください。と表示させたい時はどうのようにしたらよいのでしょうか?

10
ojyamajyo 2019/05/23 (木) 06:04:58

すみません。私の勘違いでした。
クエリーなどの修正をするときは、Accessウィンドウには右上に×ボタンが表示されていますね。

9
ojyamajyo 2019/05/23 (木) 06:01:59

Accessの閉じるボタンを消したことによって、クエリーなど修正したときに 閉じることができなくなりますが
そこは Alt+F4 で閉じるようにしたいと思っています。

8
ojyamajyo 2019/05/23 (木) 05:37:33

もうひとつ実行してみました。
メインメニュー起動時にAccessの閉じるボタンが右上に表示されますが、ここはメインメニューの閉じるボタンのみで
閉じてもらいたいので、そのようにしてみました。
多少、起動までに重たくなった気がするのですが 何か関係があるのでしょうか。
ファイル更新します。

提供版.zip2 です。

よろしくお願いいたします。

7
ojyamajyo 2019/05/22 (水) 21:51:52

ひとつ気になった点がありました。
DBを起動するとメニューフォームが画面の左上に表示されてしまうことです。
ネットで調べて なんとかメニューフォームが立ち上がる時に画面の中央に来るようにしてみました。
いかがでしょうか?
ファイル更新します。

6
ojyamajyo 2019/05/22 (水) 21:24:49

ご返信ありがとうございます。
ファイルのコードに無駄な記述があるのですね。
その都度、必要なことを調べながら記述していったので無駄が生じていったのかもしれません。
社員マスタのデータの入れ替えを行い、動作を確認しました。
まだ、ひとつひとつのコードの確認を行っていませんので 週末にじっくりと確認し学習したいと思います。

3

txt氏名ID に氏名IDを入力しておく必要があります。規定値にも氏名IDを設定しておいて試してみてください。

あと、下記の点にも教えてください。
予定フィールドの 氏名ID フィールドは数値型ですか、テキスト型ですか。

22
igachan 2019/05/22 (水) 17:46:33 fdd2e@d14a6

ありがとうございます。入院していましたのでお返事できませんでした。よく見て勉強させていただきます。

2
ゆきぴ 2019/05/22 (水) 17:23:04 598e9@20787 >> 1

ありがとうございます。
会社からはhatenaさんのhatena chipsがブロックされてしまってスマホからメモ帳に打ち直していました。(^^;)

教えてもらったように実行したところ、

実行時エラー'3075'
クエリ式'日付>#2019/04/27# AND 日付 <=#2019/06/08# And 氏名ID='の構文エラー:演算子がありません。

と出ました。
色々調べてはみて空白を入れてみたり消してみたり、引用符を消してみたり変えてみたり、氏名IDのテキストボックスの書式を数値にしてみたりしましたが解決しませんでした。
フォーム上の設定ミスでしょうか?

1

次にアドバイスいただいてOpenRecordsetのSQL文に抽出条件を加えたのですが、ここで躓いています。

氏名ID フィールドが数値型とするなら、下記のようなコードになります。

Dim strWhere As String

strWhere = "日付 > #" & FirstDay & "# AND 日付 <=#" & FirstDay + 42 & "# And 氏名ID = " & Me.txt氏名ID

Set rs = CurrentDb.OpenRecordset( _
    "SELECT 日付,予定または実績2,氏名,お客様名,時間 FROM Q_ScheSubForm_ko WHERE " & strWhere, _
    dbOpenForwardOnly, dbReadOnly)

VBAコード内に、SQL文を記述するときは、SQL文は単なる文字列になるということを留意してください。
その文字列がSQLとして正しいものになるように記述します。

コード内での、文字列と変数の扱いについては、下記に詳しく解説してますので、熟読して理解を深めてください。

Access上のコード内で引用符(")と単引用符(')の使い分けについて - hatena chips

6
名前なし 2019/05/22 (水) 08:35:02 90552@f966d >> 5

ふと見直したら上の式間違ってました。正しくは、

Format([日付],IIf([日付]>=#2019/05/01#,"令和" & IIf(Year([日付])=2019,"元",Year([日付])-2018),"ggge") & "年m月d日")

2つ目のIIF関数の条件部分をYear([日付])-2018=1から直そうとして・・・

5

送付していただいたファイルを上で紹介して方法に修正してみました。

修正点は、

上のリンク先のページのコードを標準モジュールにコピーする。

F_メインメニューの「ポップアップ」は「いいえ」に変更。

F_メインメニューの開く時のコードは下記に変更。

Private Sub Form_Open(Cancel As Integer)
    SetAccWinStyle
End Sub

読み込み時の CloseWindow は削除。

以上で、いちおう動作します。

それ以外に、下記の点を修正しました。

別フォームを開く時に、メニューフォームは閉じないで、非表示にするだけにする。
→閉じたり開いたりするのは無駄。開く時のイベント(初期化処理)が何度も発生してします。

別フォームを閉じる時のイベントで、メニューフォームを再表示する。

修正ファイル

4

ショートカットは必須ではありません。
普通にファイルをダブルクリックで開いてもいいし、Accessのメニューから開いてもいいです。

ショートカットだとアイコンをオリジナルなものに変更できるので、Accessで作成されているとこうことを意識させないことが可能になるだけです。

3
ojyamajyo 2019/05/20 (月) 20:20:52

早速のお返事ありがとうございます。
ちょっとハードル高いですね。。。
ショートカットを用いるとのことですが
バックエンド型にしてユーザーにはデスクトップにおいて入力をしてもらうのですが
この場合、そのショートカットはどのように扱えばいいのでしょうか?
ユーザー各々がショートカットを作って、そこから起動するということになるのでしょうか?

2
hatena 2019/05/20 (月) 19:21:47 修正

APIでAccessウィンドウを最小化して、フォームをポップアップ表示しているですね。
その方法では、タスクバーのアイコンをクリックするとAccessウィンドウが表示されてしまいます。

私は下記で紹介している方法を使っています。

Accessウィンドウを表示しない方法 Access2007以降版
Accessウィンドウを表示しない方法 で紹介していますが、これはAccess2003以前のものなので、このままだとAccess2007以降ではリボンが表示されてしまいます。 Access2007以降(Access2007, Access2010, Access2013)でもリボンが表示されないように対応したものを紹介します。 難易度:...
fc2

やっているのは、Accessウィンドウのサイズを固定してフォームを最大化表示します。
リボン非表示にすれば、Accessウィンドウとフォームが一体化して、フォームだけ表示されているようにみえます。

1
ojyamajyo 2019/05/20 (月) 17:56:50

追記です。
フォームが開いた状態で、タスクバーのAccessアイコンを数回クリックすると
背後にウィンドウが表示されてしまいます。

21

テーブル設計自体が間違ってますね。見落としてました。
マスターテーフルとリンクするフィールドは、マスターテーブルの主キーでないとダメです。

B1_在庫品マスター に、社員コード がありますが、これは削除して、社員ID に変更してください。

修正したファイルをアップしておきます。

サンプルファイル

20
igachan 2019/05/18 (土) 12:44:35 fdd2e@d14a6

入力済みリストにある従業員コードが一桁なんですけど、従業員IDが入力されているんですか?

5
名前なし 2019/05/17 (金) 10:13:32 fdd23@f966d

できる限り共通項は外に出したいなぁなどと

Format([日付],IIf([日付]>=#2019/05/01#,"令和" & IIf(Year([日付])=2018,"元",Year([日付])-2018),"ggge") & "年m月d日")

先日(2019/5/15)WindowsUpdateが入ってうちのも令和表示されるようになりました。
どうも元年対応は自前でやったほうがよさそうなので

Format([日付],"ggg" & IIf(Format([日付],"e")=1,"元","e") & "年m月d日")
Format([日付],IIf(Format([日付],"e")=1,"ggg元年m月d日","ggge年m月d日"))

このくらいだと無理に分解しない(下段の)ほうが読みやすそう

19

修正したファイルをアップしました。

サンプルファイル

修正点

cmdNextRec_Click() プロシージャが重複して入力されてますので、
片方を削除しました。

cb従業員コード の各プロパティの設定を下記のようにしてください。

値集合ソース SELECT 従業員ID, 従業員コード FROM Z1_社員マスター;
連結列 1
列数  2
列幅  0cm;2cm

cb氏名 の各プロパティの設定を下記のようにしてください。

値集合ソース SELECT 従業員ID, 氏名 FROM Z1_社員マスター;
連結列 1
列数  2
列幅  0cm;4cm

cbJANCode の各プロパティの設定を下記のようにしてください。

コントロールソース 品名ID
値集合ソース SELECT JANコード, 品名ID, [メーカー名], 品名, 品番・規格・寸法等, 単位, 保管場所 FROM B1_在庫品マスター WHERE JANコード<>"";
連結列 2
列数  7
列幅  3.3cm;0cm;2.505cm;3.2cm;0cm;0cm;0cm
リスト幅 12cm

cb自社コード の各プロパティの設定を下記のようにしてください。

コントロールソース 品名ID
値集合ソース SELECT 自社コード, 品名ID, [メーカー名], 品名, 品番・規格・寸法等, 単位, 保管場所 FROM B1_在庫品マスター;
連結列 2
列数  7
列幅  3.3cm;0cm;2.505cm;3.2cm;0cm;0cm;0cm
リスト幅 12cm

コンボボックスの、値集合ソース、連列列、列数、列幅 などの意味が理解できて自由に使いこなせると、設計の自由度が広がります。
なかなか難しいので、自分の設定と比べてみたり、いろいろ変更してみて、理解を深めてください。

他にもいろいろ修正してますが、説明しだすときりがないのでこの辺にしておきます。
修正前と変更点を比べて、なぜそのようにしたのか不明な点がありましたら、質問してください。

18
igachan 2019/05/15 (水) 12:42:21 fdd2e@d14a6

再送しました。

17

送信ファイルを拝見しましたが、値集合ソースの Z1_社員マスター テーブルがないので、検証できません。

Z1_社員マスター ですが、1列目が 従業員コード、2列目が 氏名になってますか。

16

現状のファイルを、ファイル送信フォームから送信してもらえますか。
送信フォームのリンクは右のカラムの下のほうにあります。

15
igaguri 2019/05/15 (水) 01:02:09 32a1e@d14a6

cb従業員コード が1001 に対して 1 と表示されています。

14
igaguri 2019/05/15 (水) 00:51:16 32a1e@d14a6

txt入出庫日に日付が入るようにしたらフォームが開きました。
cb従業員コード と テキストボックス従業員コード が連動しません。

13
igaguri 2019/05/15 (水) 00:35:56 32a1e@d14a6

フォームを起動すると

Private Sub Form_Load()
    Me.従業員コード.DefaultValue = Me.cb従業員コード.Value
    Me.入出庫日.DefaultValue = "#" & Me.txt入出庫日.Value & "#"

    Me.Filter = "従業員コード=" & Me.cb従業員コード.Value & _
                " AND 入出庫日=#" & Me.txt入出庫日 & "#"
    Me.FilterOn = True

    Me.cb従業員コード.SetFocus
    DoCmd.GoToRecord , , acNewRec
End Sub

の Me.FilterOn = True の部分が 黄色くなってしまい フォームが表示されません。
各名称はあっているのですが・・・

12
igaguri 2019/05/14 (火) 18:18:09 32a1e@d14a6

サンプルファイルまで作っていただいてありがとうございます。説明不足ではありますが私の考えていたモノと同じです。唯一異なるのは 次のレコード というコマンドボタンを 追加 で考えていたぐらいです。早速、データベースに書き込んでみたいと思います。本当にありがとうございます。

3

「標準モジュールにSQLを作成した」のなら、
フォームの RecordSourceプロパティにそれを設定すればいいでしょう。

どのタイミングで設定したいのか不明ですが、フォームの開く時イベントでするなら、

Private Sub Form_Open(Cancel As Integer)
    Dim SQL As String
    SQL = 標準モジュールで作成したSQL
    Me.RecordSource = SQL
End Sub