Private Sub コマンド0_DblClick(Cancel As Integer)
'//連結オブジェクトフレームはEnabled = Trueにしないと編集できない(っぽい)
Me!xlsData.Enabled = True
Me!xlsData.Action = acOLEActivate
End Sub
Private Sub xlsData_Updated(Code As Integer)
'//編集の為Enabled = TrueにしたのをFalseに戻す
'//ベストなイベント発生がないのでここで無理やり変更をかける
On Error Resume Next
Me!xlsData.Enabled = False
On Error GoTo 0
'//フォーカスを持っているフィールドなのになぜEnabled = Falseできるのか謎
'//更新時イベント自体は複数回発生するが固定回数のようなのでカウントして対応したほうが丁寧だけど面倒なのでエラーは無視でいいんじゃないかな
End Sub
Private Sub Form_Timer()
Me.TimerInterval = 0 'タイマー時イベント停止
Me.Refresh 'レコード保存
Me.xlsData.Locked = True
End Sub
Private Sub xlsData_Updated(Code As Integer)
Select Case Code
Case 0, 1
Me.xlsData.Locked = False
Case 2
Me.TimerInterval = 10 '0.01秒後にタイマーイベント発動
End Select
End Sub
度々すみません。
印刷可能なプリンターの中に
KING JIM SR5900P-NWがあり印刷は可能でした。
ただテプラの書式に合わせて印刷したいのですが、やはりそれは難しいでしょうか?
一応公式ソフトはあるのですが、二度手間になってしまうので、何か良い方法はないかと思い、質問させていただきました。
お手数おかけしてますが、よろしくお願いします。
hatena様 借方、貸方データはテーブルを分けておいた方が融通が効きますでしょうか?
各Subテーブルに処理IDをつけてMainテーブルにリレーションで(親フォームに子フォーム2つ配置する形)
フォーム入力時に(同じ取引上)借方で選んだ項目は貸方では選択できない、どちらかで選んだ項目に関連する項目だけが選択肢になる様な事もしたいと思ってます(まだそこまでは全然出来ていませんが)
とのことから、元は複数レコードになっていると解釈したのですが、
T仕訳処理Sub のデータ自体が 借方、貸方のデータが1レコードに格納されているということでしょうか。
なら、レポート上で2行に配置ですね。
hatena様 ありがとうございます。確かに配置ですね。レポートの基クエリは下記でどうかなと思ってます。
SELECT T仕訳処理Main.発生日付, T仕訳処理Sub.適用, T仕訳処理Sub.借方科目, T仕訳処理Sub.貸方科目, T仕訳処理Sub.借方金額, T仕訳処理Sub.貸方金額
FROM T仕訳処理Main INNER JOIN T仕訳処理Sub ON T仕訳処理Main.仕訳ID = T仕訳処理Sub.仕訳ID;
出力としては画像のイメージです(これはネットからの引用ですが)
上記の疑問点はとりあえず置いておいて、
1レコードのデータを2行にするなら、詳細セクションで、テキストボックスを2行になるように配置するだけのことだと思いますが。
1レコードにするからでは。
1レコードにする必要性がないように思いますが。
とりあえず現状の仕訳メインと仕訳サブのデータ例と、希望の結果出力例を提示してもらえますか。
OLEオブジェクトの利点はプレビュー表示ができることです。プレビュー表示の必要なく、関連ファイルの管理をしたいだけならば添付ファイル型を使用したほうがいいと思います
データベースのレコードにファイルやグラフィックスを添付する
プレビューに関しても、対象が単票フォームであれば非連結オブジェクトフレームで対応するという方法がとれるかもしれません
それはそれとして、データベースに埋め込まないでACCESSでファイル管理機能を組む、というのもありだと思います。OLEオブジェクトにしろ添付ファイル型にしろ何かと制限はあるし、このご時世2GBまでというACCESSの制限はちょっと怖いです
ただし、ファイル操作に関して自前でVBAを駆使することになるのでそれなりに難易度は上がります
やろうとしている事は昭和のあるあるですね。それをデータベースと呼ぶ時代も、もしかしたらあったのかもしれませんが、黒歴史です。
データの一元管理がやりたいのであれば、Excelやpdfの中身を分解して、正規化済みのデータベースソフトに取り込んで下さい。
既製品じゃ駄目なの?ラインナップは出揃っているし、オワコンの再発明(失敗作)を頑張る必要があるのかな。
ちなみに、Accessに格納するファイルというのは、仕様書、注文書、契約書等のExcelまたはPDFファイルになります。
りんご様
Accessで構築している最中の業務システム内の「見積作成」で、「見積番号」フィールドで関連するファイル(Excel、PDF等)も一元管理しようと思い、AccessDBに収めようと思っています。
こういうケースでも、既製品ソフトで別途管理の方がよろしいのでしょうか?
ファイル管理が目的ならばそれ用の既製品を使えば済みます。または、gitで管理。
Excel連携するならば、fusion_placeみたいに、ちゃんと考えられているソフトがもうあたり前に登場している時代だと思います。
りんご様、hatena様、hiroton様
ご回答ありがとうございます。
りんご様
>Excel連携するならば、Access以外の選択肢があるんじゃないでしょうか?
Excelで作成したファイルをデータベースに収めておきたいです。
Access以外とは、Access以外のデータベースソフトを使うということでしょうか?
hatena様、hiroton様
ご提示いただいたコードをやってみます。
ご指摘の通りに両方ともしっかりと動作検証を行いたいと思います。
結果をまたご連絡させていただきます。
いろいろ弄ってたんですが連結オブジェクトフレームはなかなか不思議な動きをするんですねぇ
外部からのドラッグアンドドロップが問題になるなら使用可能プロパティを使うのも手だと思います
使用可能プロパティを「いいえ」にしてるので編集は適当にコマンドボタンを配置してVBAから操作します
コマンドボタンの透明プロパティを「はい」にして、連結オブジェクトフレームにぴったり重ね合わせて前面に配置すればそれっぽくなると思います
なお、コードは「なぜか動く」系の怪しさ満点のコードなので十分に動作検証を行ってください
※プログラミング能力を疑うコードだったのでコメントを追加しました
より一層、公開したのを後悔するようなコードになった気がします
連結オブジェクトフレームでOLEオブジェクトを開いて編集したり閉じるときに更新時イベントが発生するようです。
閉じるときには、Code引数が2になるようです。
上記を利用して閉じたことを検知できそうです。
ただし、更新時イベントでは、更新中なので Locked = True にはできないので、タイマー時イベントで時間を遅らせてロックするようします。
簡単なサンプルの実験では下記のようなコードでうまくいっているようです。
連結オブジェクトフレームの名前は xlsData としています。
連結オブジェクトフレームは普段使ったことがなく、今回、初めて簡単なサンプルで実験しただけなので、実際に使うときはしっかりと動作検証してから使ってください。
ロック解除と同時に何某かのプロパティを変更して、間接的に目的を達成できないかを検討するのはどうですか?保証はしませんが、オブジェクト非表示、マウス操作制御など。
それはさておき、Excel連携するならば、Access以外の選択肢があるんじゃないでしょうか?
ご返信いただきありがとうございます。
承知しました。
ご丁寧にご説明いただきありがとうございます。
hirotonさんのリンク先に載っているようにするのが最善です。
または、公式ソフトにあるような印刷レイアウトのオブジェクトを作って、試しに印刷して希望通りの出力になるまで、ひたすら微調整を繰り返してみる。きちんと定規で測ったのに、印刷するとズレるので、ひたすらチューニング、なんて事もあるかもしれませんね。
公式ソフトの機能があるのに、わざわざAccessのレポート機能で自作しようとするのが冗長です。
度々すみません。
印刷可能なプリンターの中に
KING JIM SR5900P-NWがあり印刷は可能でした。
ただテプラの書式に合わせて印刷したいのですが、やはりそれは難しいでしょうか?
一応公式ソフトはあるのですが、二度手間になってしまうので、何か良い方法はないかと思い、質問させていただきました。
お手数おかけしてますが、よろしくお願いします。
https://www.kingjim.co.jp/download/tepra/labeleditor.html
https://www.kingjim.co.jp/download/tepra/spc10_api/
公認か非公認か、グレーゾーンか否は、私にはわかりません。
Accessの印刷プリンタの設定画面を開いて、印刷可能なプリンタ一覧に入っていれば、KING JIM SR5900P-NWで印刷する事もあっさり叶うかもしれません。
グレーゾーンだったんですね。
すみません。知識不足でした。
公認な機能でできるものだとばっかり思っておりました。
大変失礼しました。
普通は、出来ないんじゃないでしょうか。関連フォルダを眺めて、手探りで試行錯誤しているうちに出来ちゃう事もなきにしもあらずですが。そういう事がやりたいなら、最初から最後までひとりで頑張ろう。
当たり障りのない部分は自由に質問していいけれど、非公認かもしれないグレーな部分は、それとわからないように。
ご返信いただきありがとうございます。
できれば、ソフトを使って流し込み印刷するのではなく、Accessから直接テプラに印刷したいのですが、可能だったりしますか?
可能です。公式ソフトに流し込んで下さい。
標準の機能ではないので、ユーザー定義関数を作成することになります。
過去に公開してくれてる方がみえますので、それを使用すればコピーするだけで使えます。
DJoin 関数 - リスト文字列を取得する方法 | YU-TANG's MS-Access Discovery
出力先がレポートなら、下記で紹介している方法が簡単です。
グループ内のデータを横連結する - hatena chips
コメントありがとうございます。
Accessのフォームで、AccessVBAコード;レコードのループ処理:変数に該当フィールドの値を+=みたいな感じでどうですか?
ただ、脱Excel脳に切り替えないと駄目ですね。同様のことをしたいという発想を捨てないと、いつまで経っても中途半端、結局、Accessでジェンガジェンガする事に。
ありがとうございます。
聞きたいことが正しくこの場で聞けるように、
再度運用を確認して設計をしてみます!
それぞれ会社毎に、特殊な運用実態があることなので、ここの掲示板では言葉だけでのやりとりでは実態を把握するのは困難です。
確実な設計をするとなると、そちらの現状、使用されている書類、運用実態の聞き取り、などの作業も必要になりますので、このような掲示板でのボランティアでの対応では難しいでしょう。
実際に業務運用している人が一番、業務内容を理解しているはずなので、紹介したリンク先を参考にまずはご自身で、設計してみて、その結果、うまく行かない部分、分からない部分が出てきたらピンポイントで質問されたら、具体的に回答が付きやすいと思います。
ご指摘ありがとうございます。
もう一度、共通する項目とそうじゃない項目を見直してみます。
参照リンクなどいろいろとお気遣い頂いて本当にありがとうございます。
班というのは、工事請負会社の依頼で仕事を受けた下請け業者のことです。
実際現場ではこの班の方々とお仕事をします。
なので、その日毎に代わっていく項目にはなります。
できればもっと効率的なDBを作って会社のお役に立ちたいです。
なので、なにか非効率的なところや修正したほうがいいと
感じたところなどあれば教えていただけると非常にうれしいです。
いつも本当にありがとうございます!
ご指摘ありがとうございます。
頂いた内容をもとにもう一度正規化をしてみます。
共通する項目とそうじゃない項目の分け方がちゃんと出来ていないので、
そこから見直します!ありがとうございます!
hirotonさん
ユーザーの要望が強い場合は、実装させていただきます。
ご回答ありがとうございました!
ありがとうございます。
DROP COLUMNを使うことにしました。
一応、20 の投稿のリレーションシップの設定で、
フォームウィザードでT_警備報告書DBとT_担当警備員DBから必要なフィールドを追加して、進めていけば、担当警備員データをサブフォームに複数登録できるメイン/サブフォーム形式のフォームは作成できると思います。わからなければ下記を参考にやってみてください。
Accessのフォームのメイン/サブフォームとは | できるネット
ただ、それでいいのかはちょっと疑問に思います。
そちらの業務実態が分からないので、あくまで一般的な想像からですが。
現場には複数の警備員、車両を配置するのだと思いますが、走行距離、始業時間、・・・実働時間は共通でいいのか。(現状は共通にしかできない。)
会社名というのが工事請負会社なら、会社名、現場所在地は、工事情報テーブルの方に入れた方がいいのでは。
あと、「班」というのが、どのようなものなのか。
警備員がものなのか。継続的なものなのか、工事現場やその日ごとに作成されるものなのか。
それらの状況や運用しだいでもっと効率的な設計がありそうな気もします。
それが一番簡単そうです。
列削除は、SQLの DROP COLUMN で簡単に削除できます。
【SQL学習入門】5回目:Accessテーブルの構成を編集できるデータ定義クエリ
あるいは、エクセルデータはリンクテーブルにしておいて、そこから、フィールドCを除いた追加クエリ(またはテーブル作成クエリ)を作成して、それを実行するという方法もあります。
警備報告書見出しテーブル:
🔑{伝票No},会社名,工事名
警備報告書明細テーブル:
🔑{伝票明細No},伝票ID,日付,担当班,走行距離,高速道路、始業時間…,担当警備員,社用車
こんなのを想定していたのですが、、、
皆様、お世話になっております。困り眉です。
進捗をご報告いたします。
現在、正規化を行うために新しくT_担当警備員DBを作成しリレーションシップを見直してみました。
内容は以下の通りです。ご指摘いただけると嬉しいです!よろしくお願いいたします。
有難うございます!引用符で囲みましたら希望通りの動作をしてくれました。
とても助かりました!
抽出条件の対象フィールドがテキスト型の場合は、条件値を引用符(
'
)で囲む必要があります。