Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2013)
画像の圧縮
投稿日時: 19/06/24 15:27:33
投稿者: 快晴

ご教示お願いします。
10年位前エクセル2003で、セルに貼り付けた写真を圧縮するマクロを作成しました。
エクセル2013でも最近まで正常に作動していたのですが、突然、●の部分で、「実行時エラー’1004’worksheetクラスのPast Specialメソッドが失敗しました」とエラーが出るようになったのですがどこに問題があるでしょうか。(処理数が少ないと正常な場合もあります)
 
Private Sub CommandButton1_Click()
 
           Dim l As Integer
           Dim T As Integer
           Dim he As Single
           Dim wi As Single
           Dim bai As Single
            
 
           Application.ScreenUpdating = False
       For Each sh In ActiveSheet.Shapes 'Pictures
        
           l = sh.Left '位置取得
           T = sh.Top
            
           he = sh.Height '現在の大きさ取得
           wi = sh.Width
            
           bai = Worksheets("写真帳").Range("N1").Value '倍率
            
           sh.ScaleHeight bai, msoFalse '倍率に拡大
           sh.ScaleWidth bai, msoFalse
            
           sh.Cut
           ●ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False '圧縮する
            
           With Selection.ShapeRange
                .Height = he '元の大きさに戻す
                .Width = wi
                .Left = l '元の位置に戻す
                .Top = T
           End With
            
       Next
      Application.ScreenUpdating = True
      Unload Me
End Sub

回答
投稿日時: 19/06/24 17:07:53
投稿者: WinArrow
投稿者のウェブサイトに移動

Format引数が、
「クリップボードの形式を指定する」
ことになっているため、
 
おそらく
"図(JPEG)"
が、あっていないと思います。
 
試しに
Format:="ビットマップ"
と指定してみてください。
 
 

投稿日時: 19/06/24 17:26:54
投稿者: 快晴

 WinArrow様
 
ご回答ありがとうございます。
 
Format:="ビットマップ"  を試しましたが、同じエラーが発生しました。
他に心当たりがございましたら、よろしくお願いいたします。

回答
投稿日時: 19/06/24 17:38:02
投稿者: WinArrow
投稿者のウェブサイトに移動

FORMATの指定の具体例が検索できないので
 
Format:="BITMAP"
とか
省略するとか
 
いろいろ試しているとよいでしょう。

投稿日時: 19/06/24 20:10:20
投稿者: 快晴

WinArrow様
 
ご回答いただきありがとうございます。
どちらも確認しましたが、途中で同じエラーが出ました。
数枚は圧縮処理されて、途中でエラーが出ます。
外いろいろ試してみます。

回答
投稿日時: 19/06/24 23:10:42
投稿者: mattuwan44

>数枚は圧縮処理されて、途中でエラーが出ます。
 
こういう時は、エクセルが重くなって処理が間に合わないのかなと思われますね。
 
Sleep

Do Event
などを検索してみましょう^^

投稿日時: 19/06/25 08:01:48
投稿者: 快晴

mattuwan44様
 
ご回答ありがとうございます。
エクセル2003とエクセル2013でそれぞれテストしてみました。
 
■写真を4枚、6.4cm×8.57cmで貼り付けた直後
エクセル2003
画像の元のサイズ=24.05cm×32.16cm
ファイルサイズ=7.2MB
 
エクセル2013
画像の元のサイズ=6.4cm×8.57cm
ファイルサイズ=1.48MB
 
■圧縮後(貼り付けたサイズの2倍に圧縮)
エクセル2003
画像の元のサイズ=12.86cm×17.2cm
ファイルサイズ=787KB
 
エクセル2013
画像の元のサイズ=12.85cm×17.19cm
ファイルサイズ=2.04MB
 
写真の貼り付けもマクロでしてますが、エクセル2013の場合、画像の元のサイズと貼り付けた画像のサイズが同じなので、圧縮すると逆にファイルサイズが大きくなりました。
ファイルサイズを小さくするのが目的なので、圧縮する意味がありません。
 
 

投稿日時: 19/06/25 08:20:25
投稿者: 快晴

皆様ご回答ありがとうございました、
今後ともよろしくお願いいたします。