Microsoft Access 掲示板

クリップボードの画像データをAccessVBAだけでBMPファイルに保存したい

7 コメント
views
4 フォロー

画像の連結オブジェクトフレームにacOLECopyを実行して画像データをクリップボードに入れる流れを作ったのですが
VBAでこの画像クリップボードデータを直にBMPとして指定のパスで保存する方法が分かりません

ネットで探してみてもExcel版ばかりでAccess単体でできる方法が見つかりませんでした
どうすればAccessでも直にBMP出力できるでしょうか?

tetsusi
作成: 2022/08/05 (金) 17:04:07
通報 ...
1

連結オブジェクトフレームということは、画像データはOLEオブジェクト型のフィールドに保存されているということですね。
OLEオブジェクト型というのは、古い技術ですので、重い、サイズが大きくなる、扱いにくい、などデメリットが多いので、
Access2007以降なら、添付ファイル型に格納するのがデフォです。

添付ファイル型なら下記が参考になるでしょう。

■T'sWare Access Tips #492 ~添付ファイルをディスクに保存するには?~

2
tetsusi 2022/08/08 (月) 09:21:33 3ae57@31120

すみません、前提が抜けていました
既にOLEオブジェクト型埋め込みで作られているDBがあり、
それを作り変えるための前提としてファイルを保存して取り出しをしたかったのです

なので取り出しの段階ではDB構造は変更できません

3

私もいろいろ検索してみましたが見つかりませんでした。
手作業で一つずつ保存するか、その手順をRPAツールなどで自動化するぐらいでしょうか。

4
hiroton 2022/08/08 (月) 13:26:43 9e6ec@f966d

一筋縄ではいかないようですね
ただ、Web検索でACCESSでの情報がないというわけでもないようです

Yahoo Japan
画像を読み込む(GetChunkメソッド)(モーグ)
”OLEオブジェクトフィールドのイメージをBMPファイルに書き出す”の覚え書き (Access2003)(とくさんブログさん)

5
tetsusi 2022/08/08 (月) 15:56:02 3ae57@31120

ありがとうございます
実際acOLECopy後にペイント起動して貼り付けをした後に名前つけて保存すれば手動でファイル保存すればできているのですが
これが1万件あるのであとちょっとの部分(クリップボード内をパス指定ファイル保存)さえ自動化できれば…と思い何とかもがいていたところです

ExcelだとVBAで空シートに貼り付け→グラフ化→グラフのイメージ化という手段が取れてるので
Accessでも何かできればとは思ったのですがどうしてもクリップボード経由でなく直にOLEを変換する方向しか見つからず
それもこのDBだとヘッダが違うらしく八方塞がりになっていました…

6
hiroton 2022/08/08 (月) 17:30:06 8e182@f966d

保存の仕方が一定ならヘッダも同じ内容になるはずなのでサンプルを取って調整してあげれば上の回答の内容でいけるんですが

ちなみにhirotonが試してみたらこうなってました
画像1

なので、たとえば
bytImage() = objRecordSet.Fields("IMAGE").GetChunk(87, nSize)
としてあげれば保存したbmpファイルがそのまま開けました

変動するなら、「バイナリ読んでBMの文字が出るまで」とかになるんでしょうか。バイナリの読み方はわかりませんが


クリップボード経由するならPowerShellにはクリップボードの画像を保存する方法があるようなので、コマンド(スクリプトファイル)を用意しておいて叩くとか、クリップボードに画像が保存されたら自動でファイルに保存するアプリを使うとかですかねぇ

7
tetsusi 2022/08/09 (火) 11:53:39 3ae57@31120

ありがとうございます
結局Sendkeys(Wscript.Shellの方)を使ってペイントに張り付けて名前を付けて保存の処理を一括自動でやる形を取りました

実際バイナリを取ってみたところ元がbmpなのに「イメージ」や「DIB」とは書かれていたのですが
「BM」と書かれていた所が見つからなかったので断念しました