また、宜しくお願い致します。
フォームの連結オブジェクトフレームで、元テーブルはOLEオブジェクト型で、
Excelファイルを格納しています。
ダブルクリックした際に、連結オブジェクトフレームのLockedをFalseにし、
Excelが開いて、編集が終わって閉じたら、連結オブジェクトフレームのLockedをTrueにしたいと思っています。
編集が終わってExcelが閉じたとき、というイベントがあればいいのですが、ないので困っています。
LockedをTrueにする理由は、ドラッグアンドドロップで連結オブジェクトフレームにファイルを格納できてしまうのをLockedで防ぐためです。
ロック解除と同時に何某かのプロパティを変更して、間接的に目的を達成できないかを検討するのはどうですか?保証はしませんが、オブジェクト非表示、マウス操作制御など。
それはさておき、Excel連携するならば、Access以外の選択肢があるんじゃないでしょうか?
連結オブジェクトフレームでOLEオブジェクトを開いて編集したり閉じるときに更新時イベントが発生するようです。
閉じるときには、Code引数が2になるようです。
上記を利用して閉じたことを検知できそうです。
ただし、更新時イベントでは、更新中なので Locked = True にはできないので、タイマー時イベントで時間を遅らせてロックするようします。
簡単なサンプルの実験では下記のようなコードでうまくいっているようです。
連結オブジェクトフレームの名前は xlsData としています。
連結オブジェクトフレームは普段使ったことがなく、今回、初めて簡単なサンプルで実験しただけなので、実際に使うときはしっかりと動作検証してから使ってください。
いろいろ弄ってたんですが連結オブジェクトフレームはなかなか不思議な動きをするんですねぇ
外部からのドラッグアンドドロップが問題になるなら使用可能プロパティを使うのも手だと思います
使用可能プロパティを「いいえ」にしてるので編集は適当にコマンドボタンを配置してVBAから操作します
コマンドボタンの透明プロパティを「はい」にして、連結オブジェクトフレームにぴったり重ね合わせて前面に配置すればそれっぽくなると思います
なお、コードは「なぜか動く」系の怪しさ満点のコードなので十分に動作検証を行ってください
※プログラミング能力を疑うコードだったのでコメントを追加しました
より一層、公開したのを後悔するようなコードになった気がします
りんご様、hatena様、hiroton様
ご回答ありがとうございます。
りんご様
>Excel連携するならば、Access以外の選択肢があるんじゃないでしょうか?
Excelで作成したファイルをデータベースに収めておきたいです。
Access以外とは、Access以外のデータベースソフトを使うということでしょうか?
hatena様、hiroton様
ご提示いただいたコードをやってみます。
ご指摘の通りに両方ともしっかりと動作検証を行いたいと思います。
結果をまたご連絡させていただきます。
ファイル管理が目的ならばそれ用の既製品を使えば済みます。または、gitで管理。
Excel連携するならば、fusion_placeみたいに、ちゃんと考えられているソフトがもうあたり前に登場している時代だと思います。
りんご様
Accessで構築している最中の業務システム内の「見積作成」で、「見積番号」フィールドで関連するファイル(Excel、PDF等)も一元管理しようと思い、AccessDBに収めようと思っています。
こういうケースでも、既製品ソフトで別途管理の方がよろしいのでしょうか?
ちなみに、Accessに格納するファイルというのは、仕様書、注文書、契約書等のExcelまたはPDFファイルになります。
やろうとしている事は昭和のあるあるですね。それをデータベースと呼ぶ時代も、もしかしたらあったのかもしれませんが、黒歴史です。
データの一元管理がやりたいのであれば、Excelやpdfの中身を分解して、正規化済みのデータベースソフトに取り込んで下さい。
既製品じゃ駄目なの?ラインナップは出揃っているし、オワコンの再発明(失敗作)を頑張る必要があるのかな。
OLEオブジェクトの利点はプレビュー表示ができることです。プレビュー表示の必要なく、関連ファイルの管理をしたいだけならば添付ファイル型を使用したほうがいいと思います
データベースのレコードにファイルやグラフィックスを添付する
プレビューに関しても、対象が単票フォームであれば非連結オブジェクトフレームで対応するという方法がとれるかもしれません
それはそれとして、データベースに埋め込まないでACCESSでファイル管理機能を組む、というのもありだと思います。OLEオブジェクトにしろ添付ファイル型にしろ何かと制限はあるし、このご時世2GBまでというACCESSの制限はちょっと怖いです
ただし、ファイル操作に関して自前でVBAを駆使することになるのでそれなりに難易度は上がります
hatena様、hiroton様
ご提案のコードでプログラム作成させていただきました。
動作検証も行いましたが、特に問題なさそうです。
どちらかを使わせていただきたいと思います。
また、コードのお勉強もさせていただました。
毎度、ありがとうございます。
hiroton様
バック(テーブル)がSQL Serverを用いておりますので、ファイル容量には問題ありません。
ご心配ありがとうございます。
りんご様
既製品の導入に関してですが、
Accessでファイル管理していくことに問題や不便があれば、検討しますが、何もないので導入はしません。
特に有料であればなおさらです。
無料の場合でも、Accessでの入力とは別途に、ユーザーが既製品ソフトを起動して、ファイルを保存したり、該当ファイルを出力したりの操作をするのは余計な手間になりますし、間違いも起こりえるでしょう。
ただし、Accessから自動的に既製品ソフトを開いてファイルを保存したり、該当ファイルを出力したりするプログラムが出来れば別ですが。
昭和でも、黒歴史でも、目的が達成できればいいです。
ユーザー本位のプログラムができれば。それができなければ、失敗作なのでしょう。
それでは、この度もありがとうございました。