Microsoft Access 掲示板

6,622 件中 3,961 から 4,000 までを表示しています。
2

ご確認ありがとうございます。
下記のサイトでやってみているのですが、募集要項の「左側の大きい分類項目」と「右側の詳細文」との間に□が入ってしまうようです。「右側の詳細文」だけを選択・コピーしても、頭に□が入ってしまいます。
フォーム・印刷前のレポートでは表示されないのですが、PDF出力すると□が入っています。テキストだけを貼り付けたいのですが、、

サイト
https://doda.jp/DodaFront/View/JobSearchDetail/j_jid__3004882290/

1

「空白の改行」ってなんのことだろう。
画像の四角の中にバツ印のものことでしょうか。

問題の「WEBサイトから文章コピー」の文章をここに貼り付けてもらえますか。

5

当方のAccessファイルで「閉じる時に最適化する」を設定して試してみましたが、「バックグラウンドプロセスが残るという現象は発生しませんでした。
WEB検索してもおっしゃる通り解決法は見つかりませんね。

とりあえずAccessファイルが破損している可能性がありますので、
新規Accessファイルを作成して、現状のファイルからすべてのオブジェクトをインポートして、新規Accessファイルでも試してみてください。

それで解決しないようなら、「閉じる時に最適化する」は使わずに、タスクマネージャーでPC起動時か終了時に外部から最適化を実行するようにしてはどうでしょうか。
VBAを使って最適化する方法は下記で紹介しています。

Accessデータベースファイルを最適化する関数 - hatena chips

2

hatena様、

hatena様のサイトはいつも参考にさせていただいております。ご紹介いただいた記事を参考にやってみます。ご回答ありがとうございました。

4

ご返答ありがとうございます。

テーブル、かなりの行数を保持しています。
月に一回バックエンドから一定期間のデータをコピーし、各人で保持させています。
通常はそのデータを検索したり、一部のテキストをコピーして別のシステムに貼り付けたりして使っています。
バックエンドも月に一回更新前にバックアップをとり、更新後に最適化する様にしています。

教えていただいた起動用のaccessでもバックグラウンドプロセスが残っていました。こちらは「起動しています」と表示するだけのフォームを開いていたのですが、フォームの表示をやめるとバックグラウンドプロセスは残らなくなりました。
他のaccessでもフォームを開く時に色々処理を書いていたのですが、変更したところ残らなくなりました。
ランタイム環境でもテストしてみたのですが、バックグラウンドプロセスが残るPCと残らないPCがあるようです。

Microsoftコミュニティでも似たような現象がありましたが、これといった解決策も見つけられませんでした。

1

下記のような手順でクエリを作成したらいいでしょう。

まずは EVENT と E_Cond でグループ化した連番を作成する。
方法としては下記を参考にしてください。

グループ毎連番を自動入力する関数 - hatena chips

上記ではクエリで生成する方法と、VBAでテーブルに書き込む方法(関数)を紹介しています。
クエリの方法は重い処理になりがちなのでデータ数が多い場合は、VBAの方法をお勧めします。

連番が生成出来たら、それから、
E_Cond="START"を抽出するクエリを作成する。→ Q_START
E_Cond="END"を抽出するクエリを作成する。→ Q_END

Q_START と Q_END を含むクエリを作成して、EVENT、E_Cond、連番 で結合する。

あとは、必要なフィールドを表示させて、Datediff("s", Q_START.E_Time, Q_END.E_Time) で経過時間(秒)を計算すればいいでしょう。

3

「accessのオプションで閉じる時に最適化するにチェック」で最適化しているということは、フロントエンドを最適化していることになりますが、分割している場合は、フロントエンドの最適化は通常は必要ないです。
フロントエンド側にワークテーブルがある場合は必要ですか、フロントエンド側でワークテーブルを使っているのてしょうか。

また、バックエンドは定期的な最適化が必要ですが、フロントエンド側から接続している間は最適化は実行できません。
ユーザーが使用していない深夜などに自動で最適化を実行するようにする必要があります。
私の場合は、
最適化する前にバックアップもとっておいた方かいいので、タスクスケジューラなどで、バックエンドのバックアップと最適化を深夜に実行するよう設定します。

ということで、私自身は、「accessのオプションで閉じる時に最適化する」を使ったことがないのでそのような現象を経験したことがありません。

本当にフロントエンド側の最適化が必要ですか。
バックエンド側のバックアップと最適化は定期的に実行してますか。
上記の2点をよくよく検討してみてください。

2

ご返答、ありがとうございます。

以前もお話ししたのと同じaccessですので、
フロントエンドとバックエンドに分割しています。そして起動用のaccessもあります。

「最適化して終了」では以下を試しました。

①終了ボタンのvbaに
Documd.Quit
accessのオプションで閉じる時に最適化するにチェック
②終了ボタンのvbaに
Documd.Runmacro マクロ
accessのオプションで閉じる時に最適化するにチェック

です。
私以外はランタイム環境ですので、必ずオプションで設定しています。

最適化しているとは思いますが、
(Windows7まではしていた)
バックグラウンドプロセスが残ってしまいます。
別の単独のaccessやaccdbのaccessも開くと何個も残っています。
バックグラウンドプロセスが残らない場合もあり、何が原因なのか打つ手がない状態です。

テキストボックスをリッチテキスト形式にするのが原因と書かれているサイトも拝見しましたが、リッチテキスト形式にした事もありませんし、普通のテキスト形式である事も確認しました。

vbは勉強中ですが、できればこのままaccessを使い続けたいので、ご存知でしたらご教示下さい。
宜しくお願い致します。

9

フォーム(Me)を再クエリするのではなく、コンボボックスを再クエリしてください。

Private sub コンボボックスB_GotFocus()
   Me.コンボボックスB.Requery
End Sub
9
りんご 2021/05/21 (金) 01:12:59 48103@0e907 >> 8

 クロス集計テーブルとクロス集計入力フォームは、個人的には、NGです。
 クロス集計ありきで、ExcelライクなAccessを目指すと、横にフィールドを伸ばしたくなったり、縦横のイメージが抜けなくなったりしませんか?

製品名子部品1子部品2子部品36/16/26/3
製品XあいうAあいうBテープ101010

 縦横のAccessは、たぶん、複雑なSQLを都度都度要求されるので、まず完成しません。神アニメや神ゲームをExcelで再現するくらい大変でしょう。

製品名子部品使用日
製品XあいうA,あいうB,テープ,ネジ,…6/1,6/2,6/3,…

 これも、複雑なSQLが必要になるアンチパターンでしょう。

製品名子部品使用日使用数在庫数
製品XあいうA6/11030
製品XあいうA6/21020
製品XあいうA6/31010
製品XあいうB6/41020

 ある共通点を持つものを、横に並べない、これがAccessの基本だと思います。

このときA,Bの所要計画を立てると並列のためどちらからも
引き算してしまいますが、 Aが在庫切れしたところからBを引くようにしたいです。

 こんなのはどうでしょう?
・製造計画フォーム
製造日:6/1、製品名:製品X、製造数:10
材料明細

子部品No子部品予定使用数
1あいう10
2テープ5
3ネジ15

ロット明細(古いバージョンから使う事)

子部品Noロット名使用数在庫数
1あいうA30
1あいうB20

次のように、ユーザーが選んで打ち込みます。

子部品Noロット名使用数在庫数
1あいうA1030
1あいうB20

在庫数がなくなるかマイナスになると、表示されなくなったり、打ち込めなくなったりするのは、どうでしょう?

子部品Noロット名使用数在庫数
1あいうB20

あとは、在庫数をどうやって処理するかの問題は、残りますが。

 クロス集計クエリは、Access完成後、しばらく運用してから、見やすさのために、リリーフ登板する感じになるのではないでしょうか。

1

データベースを複数のユーザーで共有しているということでしょうか。

データベースはフロントエンドデータベースとバックエンドデータベースに分割していますか。

「accessを最適化して終了した」とは具体的にどのようにしていますか。

8

お世話になります。

以下のような感じになります。
ユーザが入力するのは 以下のフォーム
              D1   D2
X:2021:06:  10 10

上記データを
↓ 構成マスタと合わせ展開して 消費テーブルに追加

6/1 あいうA  10
6/1 あいうB  10

Excelライクに入力する範囲 を常に一定 にするため上記方法を考えております。

7

お世話になります。 はい、
D1~ のテーブルは入力用の一時テーブルで、入力後、縦に展開する正規化されたデータに変換してテーブルに格納するということですね。
上記の通りになります。

hatena様の 累計値をテーブルに自動入力する関数 を使用させていただき
画像のような 所要量計算テーブルで所要量を計算し、累計残高としています。

製品のマスタとしては、 カレー・肉じゃがに使う じゃがいもは 代替品でOKとした マスタテーブルを持ち、
変更順をデータとして持たせるとします。

このとき、消費計画のテーブルでは
メークイン が0になったら 男爵イモ の在庫を使う ・・ のようにしたいと考えております。
累計処理で計算すると、 まだ 男爵イモを使用しなくても良い 時でも 引いてしまうため
この処理について良い案がないか というご相談になりました。

イメージばかりですみません・・。

画像1
画像1

33

hirotonさん、どちらの方法も本文最後にページが入りました。
完璧です!! 

32

もしくは改ページプロパティは弄らずに

    If FormatCount = 1 Then Me!ページ数表示.Visible = False
↓
    If FormatCount = 2 Then Me!ページ数表示.Visible = False

    If FormatCount = 2 Then Me!ページ数表示.Visible = False

にするとか

31
hiroton 2021/05/20 (木) 09:49:00 3cacd@f966d

レポートフッターの改ページプロパティを「カレント セクションの前」にしてください

今の表示は同一ページ印刷「はい」の設定で、「本文の最後のページに収まらないから次のページから開始」という処理になってると思います。この場合だと本文最後のページでレポートフッター_Formatが呼び出されます

同一ページ印刷プロパティで制御

表示内容がないだけで、本文最後のページと索引最初のページ(レポートフッター)が同じページになっている
→本文の最後のページからページ数表示が非表示

改ページプロパティで制御

本文のページと索引のページは明確に分かれる
→索引だけページ数表示が非表示

6

D1~ 日付に見立てたフィールドで~31まで用意し、別のフィールドで月、年を用意をしています。
ユーザとしては 入力フォームで
製品ごとに ある年月の 1日~31日 フィールドへ入力する形にしています。
入力したデータは 別のテーブルで日付に変換して 日付順に所要展開できるように考えています。

D1~ のテーブルは入力用の一時テーブルで、入力後、縦に展開する正規化されたデータに変換してテーブルに格納するということですね。

レコード間を順に集計していく処理(連番とか累計)はクエリは苦手です。複雑かつ重い処理になりがちです。特に今回の安形だとバージョンがあったりとより複雑になります。
VBAでレコード移動しながら処理していくのが高速かつシンプルにできます。

下記に、連番をクエリまたはVBAでする場合のサンプルがありますので、参考になると思います。

グループ毎連番を自動入力する関数 - hatena chips

30
norinori 2021/05/20 (木) 08:28:37

hiroton さん、↑の通りやってみたところ、索引にページがのらなくなりましたが、本文のページ数に索引ページ分をカウントしているようです。画像1
全体のページは必要ないので、 =[Page] & " ページ" としてみました。
ちなみに本文最後のページだけページ数が入らないのは何故でしょうか?

5
りんご 2021/05/20 (木) 00:14:47 48103@0e907

クロス集計クエリを逆にしている形です。

これは、下のような感じですか?
日付,子部品あいうA,子部品あいうB,テープ,ネジ,…
6/1,
6/2.
6/3,

4

ありがとうございます。
情報が不足しており申し訳ありません。
D1~ 日付に見立てたフィールドで~31まで用意し、別のフィールドで月、年を用意をしています。
ユーザとしては 入力フォームで
製品ごとに ある年月の 1日~31日 フィールドへ入力する形にしています。
入力したデータは 別のテーブルで日付に変換して 日付順に所要展開できるように考えています。
クロス集計クエリを逆にしている形です。

ご指摘があったように A,Bが同じ部品であることをバージョン情報として持たせるようにしたいと思います。

やはり、クエリでの計算は難しく
バージョン管理品 の場合は 変更順に Aが0となった場合は、Bから引くといった
VBAでの処理が必要と理解しました。

8
nokonoko 2021/05/19 (水) 16:01:49 653a6@54883
Private sub コンボボックスB_GotFocus()
 Me.Requery
End Sub
7
hatena 2021/05/19 (水) 15:23:43 修正

私の場合はこの方法でうまくいってます。

コンボボックスの「フォーカス取得時」のイベントプロシージャを提示してください。


コードはマークダウンのコードブロックにいれてください。

Like "*" & [Forms]![フォーム1]![テキストボックスA] & "*"

マークダウンの使い方の詳細は下記を参照ください。

Microsoft Access 掲示板 の使い方 Microsoft Access 掲示板 - zawazawa

6
nokonoko 2021/05/19 (水) 15:13:04 653a6@54883

コンボボックスのイベントなら、「フォーカス取得時」のイベントがいいでしょう。

変更したところ、最初はリストが変更されましたが、
テキストボックスAの書き込みを消去して改めてコンボボックスを更新しようとしたところ、
イベントは起きましたが、リストの更新はできませんでした。
(一度コンボボックスのリストを表示させると、リストが更新されなくなった)

絞り込みは
Like "" & [Forms]![フォーム1]![テキストボックスA] & ""
としているだけです。

3

テーブル設計がまずいですね。

画像「計画のテーブル」のD1,D2,D3~というフィールドは日付をあらわしているのですよね。このような日々追加されているようなデータをフィールドにしてはいけません。データベース設計のセオリーから外れます。
「日付」というフィールドに日付を追加してく形にすべきです。

※BはAの次バージョン品のため、在庫がなくなった後に使用する。

AとBは同じ部品でバージョン違いであるという情報をテーブルに持たせる必要があります。

情報が不足しているで全体像が分かりませんが、とりあえず、下記のような感じのテーブル設計になると思います。

製品マスター
※製品CD
 製品名

部品マスター
※部品CD
 部品名

部品バージョンマスター
※部品CD
※バージョンCD
 バージョン名

製品構成マスター
※製品CD
※部品CD
 必要数

生産計画
※日付
※製品CD
 生産数

部品在庫履歴
※日付
※部品CD
※部品バージョン
 使用数
 在庫数

部品在庫履歴 をクエリだけで計算するのは難しいので、
VBAでDAOを使ってレコードセットとして開いて、
レコード移動しながら累計値を入力していくことになると思います。

29
hiroton 2021/05/19 (水) 11:20:16 db65e@f966d

『用法・容量がすごく長くてその薬品一つだけで1ページを超えるようなデータ』はない為、ダメな例を勉強してみます。

今のコードも突っ込みどころはいろいろあるんですが、いったん完成ということにしてしまいますか。ダメな場合があるということだけは覚えておいてください。

見栄えがよくありません。

元々見栄え自体はあまり気にしなくてもいい方法のようですから。見栄えを気にするならhatenaさん指摘のように、索引専用のレポートを作ることも検討してみましょう
ちなみに「薬品名(文字数は制限なし)」とすると発生する問題があります。どんな問題が出るのか確かめて、どうしたいか考えてみてください


索引にページ数が入るのは仕方がないことですか?

ページフッターのページ数表示ですよね?索引のページ(レポートフッター)だったら非表示にすればいいと思ったんですが意外とめんどうでした

Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
    Me!ページ数表示.Visible = True
End Sub

Private Sub レポートフッター_Format(Cancel As Integer, FormatCount As Integer)
    If FormatCount = 1 Then Me!ページ数表示.Visible = False

(後略)

※ページ数表示は実際のコントロール名に合わせてください

2

起動時実行マクロ(AutoExecマクロ)でリボン非表示のVBAを実行してもいいでしょう。

標準モジュールに下記のプロシージャを作成します。

Public Function HideRibbon()
    DoCmd.ShowToolbar "Ribbon", acToolbarNo
End Function

マクロを新規作成する。
リボンの「すべてのアクションを表示」を選択。
「新しいアクションの追加」で「プロシージャの実行」を選択。
「プロシージャ名」に「HideRibbon()」と設定。
マクロを保存する。名前は「AutoExec」とする。

トップページフォームのDoCmd.ShowToolbar "Ribbon", acToolbarNoは削除しておく。

以上です。

28
norinori 2021/05/19 (水) 10:24:52

hiroton さん、確認しましたが、やはり索引に印字されているページが本文のページと一致していました。完璧です。
『用法・容量がすごく長くてその薬品一つだけで1ページを超えるようなデータ』はない為、ダメな例を勉強してみます。
グループヘッダーのセクション繰り返しの設定 → 画像を添付しました。画像1

索引の印刷プレビュー画面も添付しました。3段組、30行、文字数も制限しいている為、見栄えがよくありません。現在の薬品集が薬品名(文字数は制限なし)・・・ページ数となっている為、そのようにしてみようと思っています。自分で変えてみようと思いますが、無理だったらまた質問をさせて頂きます。
索引にページ数が入るのは仕方がないことですか?
画像2

27

条件を付けている通りで特別なデータ(用法・容量がすごく長くてその薬品一つだけで1ページを超えるようなデータ)があるとうまくページを取得できません

そんなデータあるわけない!なら多分うまくページが取れてると思います。適当に用法・容量が1ページを超えるようなデータを作って試してみてください。ダメな例がわかると思います

「データ」は今は良くても、今後、誰がどのように登録するかわからないなので

データに依存する仕組みじゃ使いにくいですね。対策します

という方針を示しています。今後についても「そんなデータあるわけない!」なら今のコードで完成でもいいかなぁとは思います


追加の対策を考える場合、ちょっとテストしていたらグループヘッダーのセクション繰り返しの設定で動作を変えないといけないようでした。このプロパティの設定も教えてください。

1
ゲッキョク駐車場 2021/05/19 (水) 08:51:56 cb55f@f6500

私はこちらのサイトのmindwoodさんのやりかたを採用しております。
https://qiita.com/mindwood/items/062cde46b848d0c9e96a
「コンテンツの有効化」をクリックしてもらうために の欄です。

26
norinori 2021/05/19 (水) 08:22:04

hiroton さん、索引に印字されているページが本文のページと一致しているかもです。ページに跨ぎになっている薬剤を全て確認し、また報告をさせて頂きます。

7
りんご 2021/05/18 (火) 19:13:15 48103@0e907

 例えば、最初の行2020,AAA,10000を選ぶと、集計前のクエリが絞り込まれて、2020,AAAのレコード一覧が表示されるという方針はいかがでしょうか?
 この方針でやってみるならば、スレを閉じて、集計前のクエリを絞り込むフォーム作りから始めましょう。

25

•詳細セクションの同一ページ印刷プロパティは「はい/いいえ」どちらですか?→ はい
•詳細セクションに印刷時拡張の設定はありますか? → はい
       となっています。

6
エアー 2021/05/18 (火) 16:51:56 58219@6dd7b

基本的には取引先ごとの年間集計が必要になると思うので、前もってクエリを作成しておき
年間集計ボタンを押すとそれを表示させるのがよさそうですね
集計なので基本的に編集することもなさそうですし

集計なので個々のレコードが表示されないと思うのですが、なぜその集計金額になったのかを確認するために、

年数 取引先 金額  
2020 AAA  10000  詳細
2020 BBB   20000  詳細
2021  AAA  2000   詳細

と集計を出したときに、各集計の横に詳細ボタンを配置して押すと
フォームを開いて、集計元のレコード一覧を表示させることなどはできますか?

5

ところで、コンボボックスのクリックイベントは、使えないイベントなのでしょうか?

リストを変更するという目的にはつかえませんね。hirotonさんも回答している通り、リストから値を選択したときに発生しますので。

コンボボックスのイベントなら、「フォーカス取得時」のイベントがいいでしょう。

テキストボックスAの更新後処理でもいいですが、例えば、レコード移動してテキストボックスの値が変わった場合には対応できません。

4
りんご 2021/05/18 (火) 15:34:28 48103@0e907

うーん、me.コンボボックスB.requeryでどうですか?

3
hiroton 2021/05/18 (火) 15:29:08 f7e14@f966d

コンボボックスの場合、リストから値を選ぶためのクリックをしたときに発生するようです。(値がないとクリックしてもイベントは発生しません)

2
nokonoko 2021/05/18 (火) 15:09:27 653a6@54883

ありがとうございました。その方法がよさそうです。
ところで、コンボボックスのクリックイベントは、使えないイベントなのでしょうか?

1
ゲッキョク駐車場 2021/05/18 (火) 15:06:18 cb55f@f6500

テキストボックスAの更新後処理に再クエリを設定すると良いかもしれません。

24

今後継続して使用していく目的としてはとても便利で、思っていた以上のレポートです。
現にhirotonの回答は次々と問題が出てきて穴だらけですし
→ 私が条件を全て表示していなかったからです。感謝しかないです。

8
nokonoko 2021/05/18 (火) 14:44:28 653a6@54883

ご回答ありがとうございました。
アクセス以上にネットワーク関連の知識が足りず、事業所に迷惑をかけている状態なのですが、アクセス側はどうしようもないようですね。
ありがとうございました。