Excel VBA質問箱 IV

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

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


4638 / 13644 ツリー ←次へ | 前へ→

【55387】フォームのImageに表示した写真をエクセルシートに貼り付けたい ken 08/5/2(金) 8:21 質問[未読]
【55388】Re:フォームのImageに表示した写真をエクセ... ハチ 08/5/2(金) 8:33 発言[未読]
【55391】Re:フォームのImageに表示した写真をエクセ... ken 08/5/2(金) 11:19 発言[未読]
【55396】Re:フォームのImageに表示した写真をエクセ... ハチ 08/5/2(金) 13:00 回答[未読]
【55397】Re:フォームのImageに表示した写真をエクセ... kanabun 08/5/2(金) 13:37 回答[未読]
【55398】Re:フォームのImageに表示した写真をエクセ... kanabun 08/5/2(金) 13:56 回答[未読]
【55399】Re:フォームのImageに表示した写真をエクセ... ken 08/5/2(金) 14:01 発言[未読]
【55400】Re:フォームのImageに表示した写真をエクセ... kanabun 08/5/2(金) 14:08 回答[未読]
【55401】Re:フォームのImageに表示した写真をエクセ... ken 08/5/2(金) 14:37 お礼[未読]
【55404】Re:フォームのImageに表示した写真をエクセ... Yuki 08/5/2(金) 16:06 発言[未読]
【55406】Re:フォームのImageに表示した写真をエクセ... kanabun 08/5/2(金) 16:28 回答[未読]
【55410】Re:フォームのImageに表示した写真をエクセ... ken 08/5/2(金) 17:02 発言[未読]
【55409】Re:フォームのImageに表示した写真をエクセ... ken 08/5/2(金) 16:57 発言[未読]
【55413】Re:フォームのImageに表示した写真をエクセ... Yuki 08/5/2(金) 17:27 発言[未読]
【55460】Re:フォームのImageに表示した写真をエクセ... ken 08/5/5(月) 6:57 お礼[未読]

【55387】フォームのImageに表示した写真をエクセ...
質問  ken E-MAIL  - 08/5/2(金) 8:21 -

引用なし
パスワード
   フォームにリストボックスを作成し、Imege1に表示するように参考書をみて
作りました。

Private Sub ListBox1_Change()
  Dim MyDir As String
  MyDir = ActiveWorkbook.Path & "\写真\"
  Image1.Picture = _
    LoadPicture(MyDir & ListBox1.Text)
End Sub
--------------------------------------
Private Sub UserForm_Initialize()
  Dim MyDir As String
  Dim myFName As String
  
  MyDir = ActiveWorkbook.Path & "\写真\"
  myFName = Dir(MyDir & "*.JPG")
  Do While myFName <> ""
    ListBox1.AddItem myFName
    myFName = Dir()
  Loop
End Sub
-------------------------------------------
ここまでは作動しましたが
選択した写真をエクセルシートに貼り付けるよう

-------------------------------------------
Sub 表示()
 Dim myDir As String
  myDir = ActiveWorkbook.Path & "\写真\"
  ActiveSheet.Range("D2") = _
  SavePicture(Image1 & myDir)
End Sub
--------------------------------------
Sub 表示2()
  Dim myDir As String
  myDir = ThisWorkbook.Path & "\写真¥"
  Call SavePicture(Image1.Pictures, myDir)
  ActiveSheet.Pictures.Insert myDir
  Kill myDir
End Sub
-------------------------------------------
Sub 表示3()
  ActiveSheet.Range("D2") = Image1.Pictures
End Sub
--------------------------------------------
と3タイプ作って見ましたがどれも作動しませんでした
シートに貼り付けるにはどのように記述したらいいですか?
教えてください。
追伸
似たような質問もあり、それも試して見ましたが-----

【55388】Re:フォームのImageに表示した写真をエク...
発言  ハチ  - 08/5/2(金) 8:33 -

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

>シートに貼り付けるにはどのように記述したらいいですか?
>教えてください。
>追伸
>似たような質問もあり、それも試して見ましたが-----

どのように動作しないのでしょうか?
○○の箇所でxxエラーが出て止まってしまう など

試してませんので勘ですが、
保存するときにファイル名と拡張子を付けてないからでは?

【55391】Re:フォームのImageに表示した写真をエク...
発言  ken E-MAIL  - 08/5/2(金) 11:19 -

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

説明不足ですみません。
いずれの表示()を実行してもコンバインドエラー
「変数が定義されていません。」と出ます。

【55396】Re:フォームのImageに表示した写真をエク...
回答  ハチ  - 08/5/2(金) 13:00 -

引用なし
パスワード
   ▼ken さん:
>説明不足ですみません。
>いずれの表示()を実行してもコンバインドエラー
>「変数が定義されていません。」と出ます。

『どこで』エラーになるかが書かれていませんが、
ファイル名がないことが原因だと思います。


>Sub 表示2()
>  Dim myDir As String
>  myDir = ThisWorkbook.Path & "\写真¥"
  
myDir = ThisWorkbook.Path & "\写真¥buf.jpg"

>  Call SavePicture(Image1.Pictures, myDir)

Call SavePicture(Image1.Picture, myDir)

>  ActiveSheet.Pictures.Insert myDir
>  Kill myDir
>End Sub

【55397】Re:フォームのImageに表示した写真をエク...
回答  kanabun  - 08/5/2(金) 13:37 -

引用なし
パスワード
   おじゃまします。

画像を保存するのではなくて、
シートにファイルから画像を挿入するんですよね?

Excelのバージョンはいくつですか?
2007でなければ、シートに「図の挿入」をする操作をマクロ記録
してみれば、画像ファイル名を指定してシートに貼り付けるコード
のおおよそが分かると思います。

  Range("D5").Select
  ActiveSheet.Pictures.Insert( _
    "D:\(画像フォルダ)\サンプル.jpg").Select

マクロ記録から、
PicturesオブジェクトのInsertメソッドを使用すればいいこと
が分かります。
これをカスタマイズすればいいのです。

Sub Samp2()
  Dim picFile As String
  Dim pic As Picture
  Dim myCell As Range
  
  picFile = "D:\(画像フォルダ)\砂漠.jpg"
  With ActiveSheet
    Set myCell = .Range("A1:E5")
    Set pic = .Pictures.Insert(picFile)
    With pic.ShapeRange
     .Left = myCell.Left
     .Top = myCell.Top
     .LockAspectRatio = msoTrue '縦横比を固定
     .Width = myCell.Width   'ここでサイズ変更
     .AlternativeText = picFile
    End With
  End With
End Sub

※Shapes.AddPicture というのもありますけれど、
 これだと写真など画像のアスペクト比(縦横比)が読み込む前に
わかっていないといけないので、個人的には
原寸大をSheet にLoadしておいて、
あとからたてよこ比を変えないで変形できる
Pictures.Insert のほうが好きです。

【55398】Re:フォームのImageに表示した写真をエク...
回答  kanabun  - 08/5/2(金) 13:56 -

引用なし
パスワード
   UserForm上のリストボックスで選択されている画像ファイル
をシートに挿入でしたら、

UserFormに「シートに挿入」ボタンを配置して

上のサンプルの
>  picFile = "D:\(画像フォルダ)\砂漠.jpg"
を ↓のように修正して

Private Sub btn挿入_Click()
  Dim MyDir As String
  MyDir = ActiveWorkbook.Path & "\写真\"
  picFile = MyDir & ListBox1.Text
 '以下、Samp2 をコピー

といった感じでしょうか。

【55399】Re:フォームのImageに表示した写真をエク...
発言  ken E-MAIL  - 08/5/2(金) 14:01 -

引用なし
パスワード
   ▼kanabun さん
回答有難うございます。
ファイルからシートに貼り付けをする方法はわかりましたが
今回はフォームにリストボックスを作り、イメージをサムネイルで
「Imege1」表示させました。
その後に「Imege1」で表示した写真をシートに貼り付けるように
したいと言う事です。

【55400】Re:フォームのImageに表示した写真をエク...
回答  kanabun  - 08/5/2(金) 14:08 -

引用なし
パスワード
   ▼ken さん:
>ファイルからシートに貼り付けをする方法はわかりましたが
>今回はフォームにリストボックスを作り、イメージをサムネイルで
>「Imege1」表示させました。
>その後に「Imege1」で表示した写真をシートに貼り付けるように
>したいと言う事です。

Imageコントロール内のPictureをシートにCopyする方法は
無くはないと思うのですが、難しそう。

ディスク内の原ファイルをシートに貼る方法のほうが
Excelの機能でできることなので、ずっと簡単です。

【55401】Re:フォームのImageに表示した写真をエク...
お礼  ken E-MAIL  - 08/5/2(金) 14:37 -

引用なし
パスワード
   ▼kanabun さんへ
回答有難う御座いました。
56歳のおじさんですがもう少し勉強します。
本当に有難うがざいました。

【55404】Re:フォームのImageに表示した写真をエク...
発言  Yuki  - 08/5/2(金) 16:06 -

引用なし
パスワード
   ▼ken さん:
シートにもImageを張付けてそこにコピーでは
Private Sub CommandButton1_Click()
  Dim OLEObj As OLEObject
 
  With ActiveSheet.Range("D2")
    Set OLEObj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Image.1", _
           Link:=False, DisplayAsIcon:=False, _
           Left:=.Left, Top:=.Top, _
           Width:=Me.Image1.Width, Height:=Me.Image1.Height)
  End With
  
  OLEObj.Object.Picture = Me.Image1.Picture
End Sub

【55406】Re:フォームのImageに表示した写真をエク...
回答  kanabun  - 08/5/2(金) 16:28 -

引用なし
パスワード
   >シートにもImageを張付けてそこにコピーでは

どう使うかですが、jpg画像のばあい、
そのまま保存すると Bookサイズが肥大化しますけど、、

【55409】Re:フォームのImageに表示した写真をエク...
発言  ken E-MAIL  - 08/5/2(金) 16:57 -

引用なし
パスワード
   ▼Yuki さんへ

>シートにもImageを張付けてそこにコピーでは
>Private Sub CommandButton1_Click()
>  Dim OLEObj As OLEObject
> 
>  With ActiveSheet.Range("D2")
>    Set OLEObj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Image.1", _
>           Link:=False, DisplayAsIcon:=False, _
>           Left:=.Left, Top:=.Top, _
>           Width:=Me.Image1.Width, Height:=Me.Image1.Height)
>  End With
>  
>  OLEObj.Object.Picture = Me.Image1.Picture
>End Sub
実行してみました。
Me.Image1のMeでコンバイルエラー「Meキーワードの使用が不正です。」と出ましたが

【55410】Re:フォームのImageに表示した写真をエク...
発言  ken E-MAIL  - 08/5/2(金) 17:02 -

引用なし
パスワード
   ▼kanabun さん:
>>シートにもImageを張付けてそこにコピーでは
>
>どう使うかですが、jpg画像のばあい、
>そのまま保存すると Bookサイズが肥大化しますけど


回答有難う御座います。
yukiの回答を元に実行して見ましたがまだ駄目みたいです。
迷惑かけてすみません。 Byけん

【55413】Re:フォームのImageに表示した写真をエク...
発言  Yuki  - 08/5/2(金) 17:27 -

引用なし
パスワード
   ▼ken さん:
>実行してみました。
>Me.Image1のMeでコンバイルエラー「Meキーワードの使用が不正です。」と出ましたが

Imageの張ってあるユーザーフォームに
コマンドボタンを貼り付けてそのボタンから実行するように
して下さい。

【55460】Re:フォームのImageに表示した写真をエク...
お礼  ken  - 08/5/5(月) 6:57 -

引用なし
パスワード
   Yukiさんへ
遅くなりましたが出来ました。
ただ、Bookサイズがかなり肥大化しまい
シートに三枚張り、そのシート何枚も作成するとなると
現実的に無理がありそうです。
皆さん、本当に有難う御座いました。

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