Excel VBA質問箱 IV

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

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


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

【78483】画像をJPEGに変換 ちろ 16/10/5(水) 21:17 質問[未読]
【78484】Re:画像をJPEGに変換 β 16/10/5(水) 22:08 発言[未読]
【78490】Re:画像をJPEGに変換 ちろ 16/10/8(土) 11:46 質問[未読]
【78492】Re:画像をJPEGに変換 β 16/10/8(土) 21:31 発言[未読]
【78493】Re:画像をJPEGに変換 β 16/10/8(土) 21:57 発言[未読]
【78494】Re:画像をJPEGに変換 ちろ 16/10/9(日) 12:08 お礼[未読]

【78483】画像をJPEGに変換
質問  ちろ  - 16/10/5(水) 21:17 -

引用なし
パスワード
   選択したセルの大きさに合わせ圧縮した画像(JPEG)を貼り付けたいのですが
JPEG変換できず苦戦しております。
いろいろなサンプルを参考にしておりますがエラーで止まってしまいます。

下記のコードは画像貼り付けできますがJPEG変換できません。

私の構想は、一度貼り付けた画像を切り取ってJPEGで貼り付けるといった手順でコードを書きたいのですが・・・

アドバイス頂きたくお願いいたします。

Public Sub CCC()

Dim myRange As Range '画像を配置するセル範囲
Dim rX, rY As Double
Dim myDhape, myPic As Variant
Dim Cancel As Boolean
Dim SpObj As Object
 
 
myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif")
If VarType(myPic) = vbBoolean Then Exit Sub

Set myRange = ActiveCell.MergeArea 'このセル範囲に収まるように画像を縮小する
   
Application.ScreenUpdating = False

With ActiveSheet.Pictures.Insert(myPic).ShapeRange
  rX = myRange.Width / .Width
  rY = myRange.Height / .Height
 If rX > rY Then
  .Height = .Height * rY
  Else
  .Width = .Width * rX
 End If
.Left = ActiveCell.Left + (myRange.Width - .Width) / 2 '写真を横方向の中央に配置
.Top = ActiveCell.Top + (myRange.Height - .Height) / 2 '写真を縦方向に中央に配置
   
End With

Application.ScreenUpdating = True
Cancel = True


End Sub

【78484】Re:画像をJPEGに変換
発言  β  - 16/10/5(水) 22:08 -

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

こんなページがありました。

ht p://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1129079816

【78490】Re:画像をJPEGに変換
質問  ちろ  - 16/10/8(土) 11:46 -

引用なし
パスワード
   βさん
アドバイスいただきありがとうございました。

ご紹介いただいたページや他のページを参考に試行錯誤してますが
残念ながら未だに完成しておりません。
何処が悪いのでしょうか。

ご教授いただけないでしょうか。


Public Sub CCC()

Dim myRange As Range '画像を配置するセル範囲
Dim rX, rY As Double
Dim myDhape, myPic As Variant
Dim Cancel As Boolean
Dim SpObj As Object
  Dim sp As Shape

 
myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif")
If VarType(myPic) = vbBoolean Then Exit Sub

Set myRange = ActiveCell.MergeArea 'このセル範囲に収まるように画像を縮小する
   
Application.ScreenUpdating = False

With ActiveSheet.Pictures.Insert(myPic).ShapeRange
  rX = myRange.Width / .Width
  rY = myRange.Height / .Height
 If rX > rY Then
  .Height = .Height * rY
  Else
  .Width = .Width * rX
 End If
 
 
 '----------------------追加--------------------------------------------
'For Each sp In ActiveSheet.Shapes
  Set sp = Range(sp.TopLeftCell, sp.BottomRightCell)
      sp.Select
      Selection.Cut
      ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
      DoEvents
      With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
        .Left = ActiveCell.Left + (myRange.Width - .Width) / 2 '写真を横方向の中央に配置
        .Top = ActiveCell.Top + (myRange.Height - .Height) / 2 '写真を縦方向に中央に配置
      End With
' Next

'--------------------------------------------------------------------
   
End With

Application.ScreenUpdating = True
Cancel = True


End Sub

【78492】Re:画像をJPEGに変換
発言  β  - 16/10/8(土) 21:31 -

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

>残念ながら未だに完成しておりません。
>何処が悪いのでしょうか。
>

どういう状況なのかを明確にしていただければ、皆さん、アドバイスしやすいと思います。

Set sp = Range(sp.TopLeftCell, sp.BottomRightCell)

ここで、実行時エラーになったのでしょうか?
であれば、左辺に右辺のオブジェクトを代入しているわけですが、その左辺の中の sp ですけど、

・まず、sp には事前に何も入れていませんよね。Nothiong ですね。
 Nothing.TopLEftCell 等、具合悪いですよね。
・次に Dim sp As Shape と規定してますよね。
 でも、このコードでセットしようとしているのは Range オブジェクトですよね。
 これまた、具合悪いですよね。

まず、そのあたりを正常にしてから、実行し、なおかつ不具合が出たら、SOSだされたらいいと
思います。

【78493】Re:画像をJPEGに変換
発言  β  - 16/10/8(土) 21:57 -

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

とりあえず一例です。
不具合あれば指摘願います。

Sub Test()
  Dim myRange As Range  '画像を配置するセル範囲
  Dim myPic As Variant

  Set myRange = ActiveCell.MergeArea  'このセル範囲に収まるように画像を縮小する
  
  myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif")
  If VarType(myPic) = vbBoolean Then Exit Sub

  With ActiveSheet.Pictures.Insert(myPic)
    .ShapeRange.LockAspectRatio = msoTrue
    .Cut
    ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
    DoEvents
    With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
      .Width = myRange.Width
      If .Height > myRange.Height Then .Height = myRange.Height
      .Top = myRange.Top + (myRange.Height - .Height) / 2
      .Left = myRange.Left + (myRange.Width - .Width) / 2
    End With
  End With
  
End Sub

【78494】Re:画像をJPEGに変換
お礼  ちろ  - 16/10/9(日) 12:08 -

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

わざわざプログラムを書いていただきありがとうございます。
思い通りに動きましたヾ(感'∀'激)ノ゙

mosを使う事で画像サイス調整のプログラムもスマートになっており大変勉強になりました。


▼β さん:
>▼ちろ さん:
>
>とりあえず一例です。
>不具合あれば指摘願います。
>
>Sub Test()
>  Dim myRange As Range  '画像を配置するセル範囲
>  Dim myPic As Variant
>
>  Set myRange = ActiveCell.MergeArea  'このセル範囲に収まるように画像を縮小する
>  
>  myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif")
>  If VarType(myPic) = vbBoolean Then Exit Sub
>
>  With ActiveSheet.Pictures.Insert(myPic)
>    .ShapeRange.LockAspectRatio = msoTrue
>    .Cut
>    ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
>    DoEvents
>    With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
>      .Width = myRange.Width
>      If .Height > myRange.Height Then .Height = myRange.Height
>      .Top = myRange.Top + (myRange.Height - .Height) / 2
>      .Left = myRange.Left + (myRange.Width - .Width) / 2
>    End With
>  End With
>  
>End Sub

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