Excel VBA質問箱 IV

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

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


82 / 13006 ツリー ←次へ | 前へ→

【78726】ファルダ内の画像を任意のセルに貼り付ける方法 VBA勉強中 17/1/10(火) 17:11 質問[未読]

【78732】Re:ファルダ内の画像を任意のセルに貼り付... VBA勉強中 17/1/11(水) 10:58 発言[未読]
【78734】Re:ファルダ内の画像を任意のセルに貼り付... β 17/1/11(水) 12:47 発言[未読]
【78736】Re:ファルダ内の画像を任意のセルに貼り付... VBA勉強中 17/1/11(水) 13:54 お礼[未読]

【78732】Re:ファルダ内の画像を任意のセルに貼り...
発言  VBA勉強中  - 17/1/11(水) 10:58 -

引用なし
パスワード
   ▼β さん:
すごすぎます、短時間、あの説明でここまで作っていただけるとは…ありがとうございます!
一通りわからないものについては調べて参りました。
Scripting.Dictionary、WScript.Shell につきましてわからずでして
前者が重複を防いでほしいとこの画像をオブジェクトに指定している
後者はとても多くのメソッドとプロパティを内包しているんですね…
2つとも CreateObjectを使われていることから画像とファイルを操作できるように指定してしているのかな?といった認識です。合っていますか?
といっても CreateObjectも先ほど調べて把握したばかりで恥ずかしい話ですが…すごく便利なものですね

また、Set Pos = Pos.Offset(, 11)
ここです、これも説明不足で申し訳ないのですが
画像の貼り付け場所なのですが1ページに4枚貼ります、位置は左上、右上、左下、右下、の順になります。
これが20ページ以上ほどありまして自動化できないだろうかと考えている状態です
1ページ目の上下間と、1ページ目の下側と2ページ目の上側間が違うため(左側の列は常にF、右側はQです)
画像位置の順は、F5,Q5,F22,Q22,F44,Q44,F61,Q61,F83,Q83....
画像名を参照するセルは、常に画像位置のセルから左に1進んだもの右3文字と、左に1、下に2つ進んだものの数値になります。
(F5の場合、D5の右3文字,D7の数値)

組んでいただいたものは非常に見やすく、勉強になりました。
今から自分でもこれをもとに作ってみます
ありがとうございます。
とは言いましてもおそらく詰まってしまうのでまたお時間あればご連絡いただけると幸いです。

【78734】Re:ファルダ内の画像を任意のセルに貼り...
発言  β  - 17/1/11(水) 12:47 -

引用なし
パスワード
   ▼VBA勉強中 さん:

まず、質問されている部分。

>2つとも CreateObjectを使われていることから画像とファイルを操作できるように
>指定してしているのかな?といった認識です。合っていますか?

そうではありません。
VBAコードを書く際に、エクセルオリジナル機能だけで処理できればいいのですが
エクセルとは別のプログラム(外部プログラム)の機能を使いたいという場合があります。

そういった場合、その外部プログラムを読みこんで、VBAから利用できるように
しなければいけません。 
それが CreateObject("定められたプログラム呼び出し文字列") です。

"WScript.Shell" は、調べられた通り、実に様々な機能を提供してくれます。
今回使ったのは、その中の SpecialFolders("特殊フォルダ指定文字列") です。

たとえば デスクトップ のパス、vista以降は c:\Users\xxxxx\DeskTop ですね。
この xxxxx は PCのWindowsログインID ですから、実行するPC毎に異なります。
また、Users というフォルダ以降、DeskTop に至るまでのパス経路も、Vista以降、
『たまたま』そういった経路になっているだけで、XP時代は、全く別物でした。
ということは、今後のWindowsバージョンアップに伴って、このパス経路そのものも
変わる可能性があります。

なので、コード内で固定せず、WScript.Shellプログラムに対して、現在のバージョンの
実行PCの環境にふさわしいパス文字列をくださいね と依頼して、その文字列を
取得しています。

"Scripting.Dictinary" は、一般に ディクショナリーといわれる機能で
文字通り 『辞書』。辞書には『見出し語』と『内容』が登録されていますね。
今回は、辞書に 抽出済み画像ファイル名を見出し語として登録しておき、
それが、すでに使われたかどうか(Existsメソッド)チェックしています。
(『内容』は、今回不要なので、いずれも True をセットしています)

追加で説明のあった件も含めて、処理コードについては、今から説明を読んでみて
取り掛かります。

【78736】Re:ファルダ内の画像を任意のセルに貼り...
お礼  VBA勉強中  - 17/1/11(水) 13:54 -

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

とても詳しくわかりやすい説明ありがとうございます
理解が少しだけ深まってきました
教えていただいたものはどれも非常に汎用性があり、今後もよく使っていく気がします。

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