これまでで一番「情けなかったとき」はいつですか?

ワークシート"計算表"内のO6:U28に表を作成してあります。
その表をUserForm1上のCommandButton_ClickイベントでUserForm2のImage1に画像として表示させたのですが、

UserForm2.Image1.Picture = LoadPicture.Worksheets("計算表").Range("O6:U28")
ではエラーが出ました。

どなたか良い方法をご教授いただけませんでしょうか?
イメージ画像を貼っておきます。
よろしくお願いいたします。

「【エクセル】シート内の表をUserFor」の質問画像

A 回答 (3件)

リンク先のWin APIとやっていることはほぼ変わりません。


ChartObject を使う方法で行うことにしましたが、Excel2013?以降仕様が変わったそうで、ネットに出ている方法ではエラーが出ます。どこを探しても細かい部分は分からないので、1つずつプロパティを当たりながら調べました。また、Excel 2007 と2013 両方でチェックしました。

なお、ピタリとImage オブジェクトに納まりませんので、後は工夫してください。

ただし、質問にある画像に関しては、どうみても、リストオブジェクトのようにしか見えませんが……。だったら、もっと簡単なはずです。

'//ユーザーフォーム・オブジェクト
Private Sub CommandButton1_Click()
Dim filename As String
Dim ret As Long
filename = "$Temp.jpg"
filename = ThisWorkbook.Path & "\" & filename
' ChrtExport1 Range("O6:U28"), filename
ret = ChrtExport(Range("O6:U28"), filename)
If ret <> 0 Then MsgBox "失敗しました。", vbExclamation: Exit Sub

UserForm2.Image1.Picture = LoadPicture(filename)
UserForm2.Show False
'Kill filename
End Sub
Private Function ChrtExport(Rng As Range, filename As String)
 Dim Chrt As Chart, Ftype As String
 If InStr(1, filename, ".jpg", vbTextCompare) Then
  Ftype = "jpg"
  Else
  ChrtExport = 1
  Exit Function
 End If
 Application.ScreenUpdating = False
 
 With Rng.Resize(Rng.Rows.Count+1) 'ワンセル下に広げた
 '(Left, Top, Width, Height)
 Set Chrt = ActiveSheet.ChartObjects.Add( _
  .Left + .Width + 10, _
  .Top + .Height + 10, _
  .Width + 5, _
  .Height + 5).Chart
  .CopyPicture xlScreen, xlPicture
 End With
 Chrt.ChartArea.Select
 Chrt.ChartArea.Parent.Paste
 Chrt.Export filename, "JPG"
 Chrt.Parent.Delete
 If Dir(filename) = "" Then
  ChrtExport = 2
 End If
End Function
    • good
    • 0
この回答へのお礼

こんばんは。
僕の技術以上にかなり高度なことなんだと諦めていたところに
ドンピシャリなご回答をいただき、本当にありがとうございました!
僕ももっと勉強します!

お礼日時:2017/05/19 21:38

訂正:


Private Sub CommandButton1_Click() の中


' ChrtExport1 Range("O6:U28"), filename '←消し忘れです。不要


'Kill filename  '←「'」を外して、Kill filename にしてください。残骸が残ります
End Sub
    • good
    • 0
この回答へのお礼

訂正ありがとうございました
確認いたしました

お礼日時:2017/05/19 21:35

こんにちは



シートの内容はデータなので、画像にして貼り付けたいのであれば、一旦画像化する必要がありそうですね。

コピーの『図としてコピー』などを利用すれば、クリップボードに画像として保存することは可能です。
 対象Range.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
とか。

しかしながら、クリップボードから、直接イメージコントロールに画像を貼り付けるのが結構やっかいそうです。
次善の策としては、一旦ファイルに保存してから、通常の方法で読み込むという方法がありそうです。


直接貼り付ける方法に関しては、以前の質問にもあるようです。
https://oshiete.goo.ne.jp/qa/2885043.html

内容を確かめてはいませんが、だいぶ以前の回答なので、そのままで利用できるかどうかは不明ですが、方法としてはこのようなやり方で可能なものと思われます。
後に挙げた「ファイルとして保存する方法」に関しても↑の回答の中で言及されていますので、ご参考になるものと思います。
    • good
    • 0
この回答へのお礼

こんにちは。
ご回答くださりありがとうございます。
やはりかなり難易度が高いようですね...。
イメージ的にはシートのデータが変われば
イメージ画像も変わるようにしたかったので
今回は断念してTextBoxを数配置して表示するやり方でやってみます。
詳しくありがとうございました。

お礼日時:2017/05/15 15:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A