Excel VBA質問箱 IV

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

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


10112 / 13646 ツリー ←次へ | 前へ→

【23590】「ピクチャーが不正です」が出てしまう さんい 05/3/29(火) 14:23 質問[未読]
【23603】Re:「ピクチャーが不正です」が出てしまう ichinose 05/3/29(火) 23:57 発言[未読]
【23605】jpgの圧縮率によって異なるのでしょうか? さんい 05/3/30(水) 1:56 質問[未読]
【23616】Re:jpgの圧縮率によって異なるのでしょうか... ichinose 05/3/30(水) 14:08 発言[未読]
【23619】Re:jpgの圧縮率によって異なるのでしょう... さんい 05/3/30(水) 16:08 お礼[未読]

【23590】「ピクチャーが不正です」が出てしまう
質問  さんい  - 05/3/29(火) 14:23 -

引用なし
パスワード
   userformの中に画像を貼り付けるマクロを記入して実行させると

実行時エラー’481’:
ピクチャーが不正です。

というエラーが出てしまいます。元画像のbmpを変換してjpgにしても同様な結果がでますが、
画像の変換結果によっては同じjpgでも、うまくマクロが働き成功する時もあります。
何が問題なのでしょうか?
ちなみにマクロは下記のように記述しています。

Image4.Picture = LoadPicture(ThisWorkbook.Path & "\画像.png")

画像.pngはワークブックと同じディレクトリ内にあります。

【23603】Re:「ピクチャーが不正です」が出てしまう
発言  ichinose  - 05/3/29(火) 23:57 -

引用なし
パスワード
   ▼さんい さん:
こんばんは。

>userformの中に画像を貼り付けるマクロを記入して実行させると
>
>実行時エラー’481’:
>ピクチャーが不正です。
>
>というエラーが出てしまいます。元画像のbmpを変換してjpgにしても同様な結果がでますが、
>画像の変換結果によっては同じjpgでも、うまくマクロが働き成功する時もあります。
>何が問題なのでしょうか?
>ちなみにマクロは下記のように記述しています。
>
>Image4.Picture = LoadPicture(ThisWorkbook.Path & "\画像.png")
Pngファイルは、対象外みたいですね!!

こちらで確認した限りでは、Jpgファイルは正常に表示されていますよ!!

Jpgファイルでも不具合がある理由はわかりませんが、
うまくいかない場合は、ExcelやWindowsのバージョンを記述して下さいね!!
bykinさんの

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=5411;id=excel

を真似て
以下のようにしてみましたが・・・。

新規ブックにユーザーフォーム(Userform1)に

イメージコントロール(Image1)とコマンドボタン(Commandbutton1)を
ひとつづつ配置してみてください。
標準モジュールに
'==============================
Sub main()
  UserForm1.Show
End Sub


Userform1のモジュールに
'=========================================================
Private Sub UserForm_Initialize()
  Image1.Enabled = False
' こうしておかないとイメージコントロールをクリックすると
' 動作がおかしい(画像が表示されない)
End Sub
'================================================
Private Sub CommandButton1_Click()
  On Error Resume Next
  ans = Application.GetOpenFilename("ピクチャーファイル*.png,*.png;*.jpg;*.gif;*.bmp")
  If ans <> False Then
   Image1.Picture = LoadPicture(ans)
   If Err.Number <> 0 Then 'Pngを選択した場合、Jpgで保存
     Call mk_jpg(ans, ThisWorkbook.Path & "\temp.jpg", ActiveSheet)
     Image1.Picture = LoadPicture(ThisWorkbook.Path & "\temp.jpg")
     Kill ThisWorkbook.Path & "\temp.jpg"
     End If
   End If
  Me.Hide
'こうしないとExcel2000ではユーザーフォームがモーダルからモーダレスに代わってしまう
  Me.Show
End Sub
'======================================================================
Sub mk_jpg(inflnm, otflnm, sht As Worksheet)
  Charts.Add
  ActiveChart.Location Where:=xlLocationAsObject, Name:=sht.Name
  Set shp = ActiveChart.Pictures.Insert(inflnm)
  shp.Top = 0: shp.Left = 0
  With sht.ChartObjects(1)
   .Interior.ColorIndex = xlNone
   .Border.LineStyle = xlLineStyleNone
   .Width = shp.Width
   .Height = shp.Height
   .Chart.Export Filename:=otflnm, Filtername:="JPG"
   .Delete
   End With
End Sub

コマンドボタンのクリックで画像を選択するようになっています。


Pngファイルを別形式に他のアプリで変換するのであれば
上記のようなコードは要りませんが・・・。

試してみてください。

【23605】jpgの圧縮率によって異なるのでしょうか?
質問  さんい  - 05/3/30(水) 1:56 -

引用なし
パスワード
   ichinose 様
ご返事をしていただきありがとうございます。
png形式の画像はワークシート内に、
jpg形式の画像はuserform内に貼り付けられました。ありがとうございます。
ところで、jpg形式でも画像優先で圧縮形式を小さくした
画像はいくらjpg形式でも全く画像は現れませんでした。
圧縮率と関係があるのでしょうか?

【23616】Re:jpgの圧縮率によって異なるのでしょう...
発言  ichinose  - 05/3/30(水) 14:08 -

引用なし
パスワード
   ▼さんい さん:
こんにちは。

>ご返事をしていただきありがとうございます。
>png形式の画像はワークシート内に、
>jpg形式の画像はuserform内に貼り付けられました。ありがとうございます。
>ところで、jpg形式でも画像優先で圧縮形式を小さくした
>画像はいくらjpg形式でも全く画像は現れませんでした。
JPGでいくつかサンプルを作成しましたが、再現は出来ませんでした。
が、私のPCにころがっている複数のgifファイルで画像が現れない
という現象を確認しました。
何が原因なのかはわかりません。

で、対応策としては、前回投稿したように一度JPGに変換して表示する。

'=======================================================
Private Sub CommandButton1_Click()
  On Error Resume Next
  Me.Hide
  DoEvents
  ans = Application.GetOpenFilename("ピクチャーファイル*.png,*.png;*.jpg;*.gif;*.bmp")
  If ans <> False Then
   Call mk_jpg(ans, ThisWorkbook.Path & "\temp.jpg", ActiveSheet)
   Image1.Picture = LoadPicture(ThisWorkbook.Path & "\temp.jpg")
   Kill ThisWorkbook.Path & "\temp.jpg"
   End If
  Me.Show
End Sub
'==================================================
Private Sub UserForm_Initialize()
  With Image1
   .Enabled = False
   .PictureAlignment = fmPictureAlignmentTopLeft
   .PictureSizeMode = fmPictureSizeModeClip
   End With
End Sub
'====================================================
Sub mk_jpg(inflnm, otflnm, sht As Worksheet)
 
  Charts.Add
  ActiveChart.Location Where:=xlLocationAsObject, Name:=sht.Name
  Set shp = ActiveChart.Pictures.Insert(inflnm)
  shp.Top = 0: shp.Left = 0
  With sht.ChartObjects(1)
   .Interior.ColorIndex = xlNone
   .Border.LineStyle = xlLineStyleNone
   .Width = shp.Width + .Chart.ChartArea.Left * 2
   .Height = shp.Height + .Chart.ChartArea.Top * 2
'    ↑は、やっぱりLeftとTopの分を足しておかないとまずいですね
   .Chart.Export Filename:=otflnm, Filtername:="JPG"
   .Delete
   End With
End Sub


とするか、Imageコントロールを止めて、Webbrowserコントロールを使う方法。

ユーザーフォームにImage1の代わりにWebbrowser1を配置して

'==========================================================
Private Sub CommandButton1_Click()
  On Error Resume Next
  Me.Hide
  DoEvents
  ans = Application.GetOpenFilename("ピクチャーファイル*.png,*.png;*.jpg;*.gif;*.bmp")
  If ans <> False Then
   WebBrowser1.Navigate ans
   End If
  Me.Show
End Sub

私のPCころがっていたgifファイルはこれでは、表示されました。
また、PngファイルもOKです。
確認してみて下さい。

【23619】Re:jpgの圧縮率によって異なるのでしょう...
お礼  さんい  - 05/3/30(水) 16:08 -

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

こんにちは。
確認いたしました。
原因はどうあれ、ichinose さんに教えていただいた方法で十分用が足りますので
これを使わせていただくことにしました。
ありがとうございます。
これで、いままで画像の変換方法で悩んでいたことが解消され、
とってもうれしいです。
感謝! 感謝!

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