Excel VBA質問箱 IV

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

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


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

【57952】挿入した写真の原型のWeight / Width Abebobo 08/9/23(火) 11:07 質問[未読]
【57953】Re:挿入した写真の原型のWeight / Width りん 08/9/23(火) 12:22 発言[未読]
【57954】Re:挿入した写真の原型のWeight / Width Abebobo 08/9/23(火) 12:48 お礼[未読]
【57955】Re:挿入した写真の原型のWeight / Width りん 08/9/23(火) 13:27 発言[未読]
【57956】Re:挿入した写真の原型のWeight / Width Abebobo 08/9/23(火) 13:35 お礼[未読]

【57952】挿入した写真の原型のWeight / Width
質問  Abebobo  - 08/9/23(火) 11:07 -

引用なし
パスワード
   お世話になります。

報告資料作成時にエクセルで作成し、むやみに写真を挿入して(サイズが大きいまま)ブックサイズが肥大し、メールで送れない事態が会社で多発しています。
簡単にサイズを落とすことは、見つけることが出来ました。

Sub MyPic_Compression()
  Dim Pic As Object

  For Each Pic In ActiveSheet.Pictures
   With Pic
     .ShapeRange.LockAspectRatio = True
     .Cut
     .Parent.PasteSpecial Format:="Jpeg"
   End With
   Application.CutCopyMode = False
  Next
End Sub

上記ですべての写真を軽くすることは出来るのですが、
その写真の Weight / Width と その写真の原型の Weight / Width
を比較してやれば、ブックを大きくしている真犯人の写真が特定できると思っています。

その写真の原型の Weight / Width の値を ローカルで探しましたが 取得の仕方がわかりませんでした。

エクセル2000 XP SP2 です。 
上記の考え方が正しいか と その写真の原型の Weight / Width の値取得 を教えてください。

【57953】Re:挿入した写真の原型のWeight / Width
発言  りん E-MAIL  - 08/9/23(火) 12:22 -

引用なし
パスワード
         Abebobo さん、こんにちわ。

>その写真の原型の Weight / Width の値を ローカルで探しましたが 取得の仕方がわかりませんでした。

シート上にある写真の情報をログにしてみました。

Sub test()
  Dim ws(1 To 2) As Worksheet, sh As Shape
  '
  Set ws(1) = Application.ActiveSheet '表示しているシート
  Set ws(2) = Application.Workbooks.Add.Worksheets(1) 'ログ取りシート
  '
  ws(2).Range("A1:F1").Value = Array("名前", "位置", "幅", "高", "元幅", "元高")
  NN = 1
  For Each sh In ws(1).Shapes
   If sh.Type = msoPicture Then
     NN = NN + 1
     ws(2).Cells(NN, 1).Value = sh.Name
     ws(2).Cells(NN, 2).Value = sh.TopLeftCell.Address & ":" & sh.BottomRightCell.Address
     ws(2).Cells(NN, 3).Value = sh.Width
     ws(2).Cells(NN, 4).Value = sh.Height
     '元の大きさ(100%)でサイズ取得
     sh.ScaleHeight 1, msoTrue
     sh.ScaleWidth 1, msoTrue
     ws(2).Cells(NN, 5).Value = sh.Width
     ws(2).Cells(NN, 6).Value = sh.Height
     '縮小後のサイズに戻す
     sh.Width = ws(2).Cells(NN, 3).Value
     sh.Height = ws(2).Cells(NN, 4).Value
   End If
  Next
  'おわる
  Erase ws
End Sub

こんな感じです(動作確認 XL2003およびXL2007 & WinXP)。
縮小率に関連するプロパティを見つけられなかったので、縮小を解除してサイズを取得しています。
「元のサイズを基準にする」にチェックがついていない状態で加工されていれば偽装されちゃいますけどね(ダイアログでは原型のサイズで確認できます)。

【57954】Re:挿入した写真の原型のWeight / Width
お礼  Abebobo  - 08/9/23(火) 12:48 -

引用なし
パスワード
   りん さん 昼休み中ですか?
貴重な時間をさいて頂いてありがとうございます。

なるほどです、一回リセットすればよかったんですね。
ぜんぜん思いつきませんでした。今後は頭をやわらかくすることも考えます。

Erase をはじめてみたので チョットヘルプを見てみました。
様は、リセットしておく と考えればよいですね。
(ヘルプはもうチョット書き方を考えてほしい。頭の弱い40+にはわかりづらい)

現在ここまできています。

Sub MyPic_Compression()
  Dim Pic As Object
  Dim Pic_T As Double
  Dim Pic_L As Double
 
  For Each Pic In ActiveSheet.Pictures
   With Pic
     Pic_T = .Top
     Pic_L = .Left
     .ShapeRange.LockAspectRatio = True
     .Cut
     .Parent.PasteSpecial Format:="Jpeg"
   End With
   Application.CutCopyMode = False
   With Selection
    .Top = Pic_T
    .Left = Pic_L
   End With
  Next
End Sub

後は、写真の前後関係をやっていきます。

>「元のサイズを基準にする」にチェックがついていない状態で加工されていれば偽装されちゃいますけどね(ダイアログでは原型のサイズで確認できます)
 
本当ですか! 今確認したんですけど、チェックをはずしてサイズの変更して 
(原型サイズのダイアログ値は変わらず)リセットしたら、基の大きさになりました。

【57955】Re:挿入した写真の原型のWeight / Width
発言  りん E-MAIL  - 08/9/23(火) 13:27 -

引用なし
パスワード
   Abebobo さん、こんにちわ。
>りん さん 昼休み中ですか?
祝日ですので朝からのんびりとネットで遊んでおりますw

>本当ですか! 今確認したんですけど、チェックをはずしてサイズの変更して 
>(原型サイズのダイアログ値は変わらず)リセットしたら、基の大きさになりました。
偽装というのは、ダイアログでの100%が元のサイズにならないという意味でしたが、マクロで%でのサイズ変更で、RelativeToOriginalSize:=msoTrueとしておくと、常に元のサイズが基準になるので大丈夫のようですね。
検証が足りませんでした。ややこしい事を書いてごめんなさい。

【57956】Re:挿入した写真の原型のWeight / Width
お礼  Abebobo  - 08/9/23(火) 13:35 -

引用なし
パスワード
   >祝日ですので朝からのんびりとネットで遊んでおりますw

そういえば、今日は祝日でしたね  基本的に祝日は関係無いので忘れていました。

>ややこしい事を書いてごめんなさい。
いえいえ、こちらこそありがとうございます。これからもよろしくお願いします。

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