質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

Q&A

解決済

1回答

11042閲覧

ACCESS VBA ネット上の画像をフォームにドラッグアンドドロップで保存

otojiro

総合スコア35

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

ダウンロード

リモートシステムからローカルシステムへとデータを受信する事、もしくはそのようなデータ転送を行う事をダウンロードと呼びます。

ドラッグ&ドロップ

コンピューターのGUIにおいて、バーチャルなものを「つかむ」ことによって選択し、別の場所や他のバーチャルなものの上に動かす行為、またはその行為に対応していることを指す。

0グッド

1クリップ

投稿2017/01/31 11:34

ACCESS で通販用の商品管理をしております。

現在は商品テーブルには商品名やサイズ等、テキストベースの情報しか持っておりません。
今回画像(jpg等)もデータとして持たせようと考えております。

画像の保存方法は、ACCESSのファイルと同じディレクトリにフォルダ「ItemImg」を作りその中に各商品ごとに、フォルダ名「商品ID(0001など)」を作って画像を保存する予定です。

現在は、商品テーブルにフィールド「画像パス」を作り、画像までのフルパスを保存し、フォーム上にはイメージコントロールを配置し、コントロールソースに「画像パス」を指定し表示まではできております。

商品画像は主に、問屋のWEBサイトの画像を使用するため、問屋WEBサイトから画像を右クリックで商品個別のフォルダに保存し、エクスプローラのプロパティーから画像のフルパスを確認、コピーしてデータに登録してようやくフォームに表示という結構めんどくさい状況になっております。

そこでACCESS VBAで下記の処理を実現するためのアドバイスがいただければと思います。

1: WEB上の画像をACCESS フォームにドラッグアンドドロップ(画像をデスクトップにドラッグしてコピーできる画像に限られるのかな?)

2:ドラッグアンドドロップされた画像を指定のフォルダにダウンロード(パスではなくて画像ファイルのコピー)
商品フォームでは新規商品(新規レコード)がつくられると、ACCESSファイルと同じディレクトリに ItemImg>0001(商品ID)のように自動でフォルダが作られるVBAを作成ずみ。

3:商品ID名のついた各フォルダにダウンロード保存した画像ファイルのフルパスを取得して商品テーブルの画像パスに入力

4:フォーム上のイメージコントロールで画像ファイルのフルパスをもとに表示

上記ような流れで実現できないかな?と考えているのですが、特に「1:、2:」のステップがどうやったら可能なのか見当が付きません。

ネット上でACCESS 画像ドラッグアンドドロップなどで検索して、すでにローカル上にある画像ファイルをプログレスバーコントロールにドラッグしてデータに登録などの記事は見つかったのですが、検索の方法が悪いのか、今回やりたい処理に関係する記事が見つけることができませんでした。

どのようなプロセスで実現可能かアドバイスや、関連記事があれば教えていただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

自分がやるとしたら、ですが
0. Web上の画像を指定のフォルダ(商品ID)にダウンロード
0. フォーム表示時に商品IDから画像ファイルのパスを作成しイメージコントロールにセット

でどうかな?と思いますが・・・
この方法だと質問者さんの要望にあるフォームにドラッグアンドドロップという方法ではありませんし
DBに画像パスが残らないのと、ダウンロード時の操作ミスに関しての不安がありますので
ちょっと乱暴ですかね?

###追記
不親切のような気がしたので実験がてら調べてみましたが、質問者さんが検索で見つけられた

ローカル上にある画像ファイルをプログレスバーコントロールにドラッグしてデータに登録などの記事

にあるような方法でフォームを作成し(ProgressBar_OLEDragDropにData.Filesでパスを取得)
そのフォームを使用して、ローカルにあるファイルではなくブラウザから直接ドラッグアンドドロップすると、
ブラウザキャッシュの画像のパスが取れました。
そのままブラウザキャッシュにある画像のパスから目的の(商品IDの)フォルダへファイルコピーし
(FileCopy source, target を使用)、画像フォルダのパスはコピー先なのでそのままDBに登録できます。

ただ、実験的にやってみただけなので、例えばブラウザキャッシュにあるファイルの形式がビットマップになっちゃっていたり、
そもそもブラウザによってキャッシュがちゃんと保存されるのかとか、
いろいろクリアしなければならない問題はあると思いますが、いかがでしょうか。

投稿2017/02/01 15:21

編集2017/02/01 15:44
kjml

総合スコア219

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otojiro

2017/02/01 23:23

ご回答ありがとうございます。 キャッシュのがぞうパスが取れましたか? 以前試したときは何も表示されなかったのでもう一度試してみます。 >(FileCopy source, target を使用) とても有益な情報ありがとうございました。 サイドプログレスバーの方法を検証してみます。
otojiro

2017/02/02 01:45

kjml様 先ほどプログレスバーへドラッグしてパス名取得の再検証をしてみました、 ローカルに保存済のファイルのパスは取得できましたが、やはりWEB上の画像をブラウザからドラッグいてみたところ、パス(キャッシュのパスを含め)は表示されませんでした。 よろしければキャッシュパスが取得できた手順環境をもう少し詳しく教えていただけませんでしょうか? こちらのテスト環境は、ACCESS 2013、プログレスバーコントロール(Microdoft ProgressBar Control,version6.0)、WEBブラウザ CHROME 宜しくお願いいたします。
kjml

2017/02/02 07:38

あああ、すみません。 簡単に実験しただけだったのでブラウザの種類はFirefoxしか試してませんでした。 申し訳ないです。 ブラウザをいくつか試してみたところ、キャッシュのパスが取れるのはFirefoxのみで EdgeやIEではパスが取れませんでした。 ○Firefox (パス) ×Edge(空白) ×InternetExplorer(空白) Chromeでもダメのようですね。 それ以外の環境としては、Windows10、Access2010、プログレスバーコントロール(Microdoft ProgressBar Control, version 6.0)です。 どうにかならないかもう少し考えてみます。
otojiro

2017/02/02 10:41

ご回答ありがとうございます。 Firefoxでしたか、メインでChrome使ってますが、FireFoxも嫌いではないので試してみます。 IEも試してみましたが、IEではプログレスバーに持ってきた辞典で「×」マークが出てきましたのでIEはダメそうでした。 >どうにかならないかもう少し考えてみます。 ありがとうございます。 他の方法も考えてもう少し考えてみます。
kjml

2017/02/02 22:55 編集

ざっと調べてみましたが、APIを使ってドラッグアンドドロップを自前で処理という方法でいけるかもしれません。 ただ、ブラウザからのドラッグアンドドロップに際してキャッシュなり画像のURLなりの情報が出てきていない事を考えると、ドラッグアンドドロップから画像のパスではなく画像のデータそのものを取得してクリップボード経由などで保存の処理も自前でという事になりそうです。 ただ、私のAPIの経験が乏しいため具体的にどうすればよいかはまだ検証していませんので引き続き。 そうなってくると、やはりブラウザ上で指定のフォルダへ画像の保存→Accessで保存されている(はずの)パスを扱う、という手順の方が簡単で実現に近いように思います。
otojiro

2017/02/02 23:03

kjml様 いろいろアドバイスありがとうございます。 >そうなってくると、やはりブラウザ上で指定のフォルダへ画像の保存→Accessで保存されている(はずの)パスを扱う、という手順の方が簡単で実現に近いように思います。 そうですね、多少の手間ですが、少しでも前に進むためにその方法で進めてみます。 ブラウザからダウンロードする際に事前に画像ファイル名もそのフォルダで1つ目の画像は「1.jpg」等ルールを作って保存する必要がありそうですね。 APIについても私もほぼ知識ゼロですので、これを機に少し勉強してみます。 ありがとうございました。
kjml

2017/02/02 23:48

WebBrowserコントロール(Microsoft Web Browser)はどうだろうかと試してみましたが ・Firefoxは同じようにキャッシュのパスが取得 ・EdgeはURLのドメインまでが(中途半端) ・IEは反応すらしない と全く使えませんでした。(使えないのは私かもしれませんが) 参考までに。
otojiro

2017/02/03 10:18

いろいろご検証ありがとうございます。合わせて参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問