Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


519 / 13645 ツリー ←次へ | 前へ→

【79889】画像付データベース そば 18/5/18(金) 23:50 質問[未読]
【79890】Re:画像付データベース γ 18/5/19(土) 11:34 回答[未読]
【79908】Re:画像付データベース そば 18/5/22(火) 22:03 質問[未読]
【79909】Re:画像付データベース γ 18/5/23(水) 7:15 発言[未読]
【79929】Re:画像付データベース そば 18/5/28(月) 21:11 お礼[未読]
【79930】Re:画像付データベース 亀マスター 18/5/28(月) 23:02 回答[未読]
【79945】Re:画像付データベース そば 18/5/31(木) 22:50 お礼[未読]

【79889】画像付データベース
質問  そば  - 18/5/18(金) 23:50 -

引用なし
パスワード
   簡単なデータベースをつくりました。
レコード一つ一つに画像を付けたいと思いまして、
コメント欄に画像を貼りつける機能をマクロで加えました。
こうすればカーソルを持っていくだけで、画像が表示されるからです。

その機能自体はうまくいったのですが、
レコードが3000を超えてくると、
データが重くなってしまい、
開くまでに5分以上かかるようになってしまいました。

画像データはjpegで、ファイルサイズも小さくしているつもりです。

画像データを別フォルダに保存して、
リンクを貼り付ければ一応解決するのですが、
カーソルを持っていくだけで、画像が表示されるようにしたいです。

なにかいいアイデアがあるでしょうか?
よろしくお願いします。

【79890】Re:画像付データベース
回答  γ  - 18/5/19(土) 11:34 -

引用なし
パスワード
   コメントにはリンク貼り付けのようなことができないとすれば、
画像を直接、リンク貼り付けして、
そのVisibleプロパティをコントロールしたらどうですか?

SelectionChangeプロシージャの中で、
それぞれの画像について、
・Tagetが画像のTopLeftCellとBottomRightCellで決まる範囲と
 共通領域をもつなら、画像のVisibleプロパティを True(つまり表示)
・そうでないなら、画像のVisibleプロパティを False(つまり非表示)
という処理を実行します。

手元で実行していないので、
・所要時間
・使い勝手
はわかりませんが、
ひとつのアイデアとして検討してみてはどうでしょうか。


追記:
(1)セル選択のつど処理は動きますが、さほど重い処理になる予感はしません。
(2)多数のシートに分かれているなら、Workbook_SheetSelectionChangeを
  使うことになるでしょう。

【79908】Re:画像付データベース
質問  そば  - 18/5/22(火) 22:03 -

引用なし
パスワード
   ご回答ありがとうございます!

文章が拙くてごめんなさい。
開くのが遅いというのは、
画像が出てくるのが遅いということではなく、
excelデータが立ち上がるのが遅いという意味です。

サイズは50MBほどで、立ち上がるのに5分かかるというのは遅すぎると思い、
原因はコメントに画像を張り付けているからでは、と思った次第です。


"画像を直接、リンク貼り付けして"
とのことですが、
リンク先を別フォルダにある画像にすればいいでしょうか?


SelectionChangeプロシージャを使うということは、
マウスをクリックした時のイベントということですね。

できるなら、コメントのように、
マウスを移動しただけで画像を表示したいです。

マウスを動かしただけでTargetを調べる方法はないでしょうか?
・・・と書いていたら、mousemove イベントなるものがあるみたいですね。
これ使えば何とかなるかな?

【79909】Re:画像付データベース
発言  γ  - 18/5/23(水) 7:15 -

引用なし
パスワード
   >リンク先を別フォルダにある画像にすればいいでしょうか?
「図」を「挿入」する動作をしてみてください。
メニューに、そういう挿入の仕方があると思います。

> SelectionChangeプロシージャを使うということは、
> マウスをクリックした時のイベントということですね。

違います。
マウスに限らず、セルの選択状態を変えたときに
実行されるイベントプロシージャのことです。
イベントプロシージャーという言葉で、
VBAのテキスト(書籍等)を調べてみてください。

ところで、どのような作業に使うデータベースか知りませんが、
全体をいちどきに表示させる必要があるのですか?
検索した結果だけをユーザーフォームに表示させるとか言った方法も
あるのでないかという気がします。

>マウスを移動しただけで画像を表示したいです。
所望されていることはわかりましたが、あいにく私は知りません。
他の方からの回答をお待ち下さい。

【79929】Re:画像付データベース
お礼  そば  - 18/5/28(月) 21:11 -

引用なし
パスワード
   ▼γ さん:

アドバイスありがとうございます。
もうすこし自分で努力してみようと思います。

ファイルを開く段階で重いってのは
コメントに画像を貼り付けるって
発想を変えないといけなさそうですね。
がんばってみます。

【79930】Re:画像付データベース
回答  亀マスター  - 18/5/28(月) 23:02 -

引用なし
パスワード
   横から失礼します。

WindowオブジェクトのRangeFromPointメソッドを使えばカーソル位置にあるセルをRangeオブジェクトとして取得できるので、これとAPI関数のGetCursorPosを使えばやりたいことに近いものができるかもしれません。

画像自体は直接貼り付けず、画像へのリンクをセルの値なりコメントなりに入れておいて、そのセルの上にマウスカーソルが移動したら、リンクの情報を元に画像表示用のセルかユーザーフォームにでも画像を表示するということで。

流れとしては以下のような感じでしょうか。

Do

  マウスカーソル位置取得
  カーソル位置のセルを取得
  取得したセルの値を取得
  セルの値を元に画像を表示

Loop

実際にはループを抜けるための処理やリンク先が指定されていないセルの上にカーソルがある場合の処理、その他エラートラップなどが必要になるとは思いますが。
あと、いちいちカーソルを動かす度に画像を読み込む必要があるので、処理が遅くなるかもしれません。

それぞれの処理の方法は、ググるなり追加で質問するなり。

【79945】Re:画像付データベース
お礼  そば  - 18/5/31(木) 22:50 -

引用なし
パスワード
   ▼亀マスター さん:


ご回答ありがとうございます!
亀マスターさんがアドバイスしてくれたような機能が実装できれば、
わたしの希望しているような動きになりそうです。

しかし今の自分には、なかなかレベルが高そうです。
でももう少し自分で努力してみようと思います。

そこでまたつまづいたら質問させてください。
よろしくお願いします。

519 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free