| 
    
     |  | こんばんわ。 
 >実は、印字内容は縦方向の印刷内容で、JPEGを印刷したときにA4の縦用紙で印字できるように
 >イメージを保存したいのです。
 >これを
 >>    Worksheets(JPG_Sheet).Range(JPG_Sele).CopyPicture xlPrinter
 >>    Worksheets(JPG_Sheet).Range(JPG_Sele).CopyPicture xlScreen, xlBitmap
 >に変更をすると印字方向は良いのですが、中身が真っ白です。
 >なんでやろ?
 
 最初この文章読んだとき、何のこっちゃ判らんかってんけど、実験してみて判りました。
 A4縦サイズのセル範囲を対象にして実行してみても、コピーした図が小さく貼り付いてしもて
 出力されるJPEGも横長の小さいもんになってまうんやね。
 
 で、いろいろ実験してみたけど、これはエクセル君をちょっとびっくりさせんとあかんみたいです。
 びっくりってのは、OnTime メソッドを使って外部から操作するってこと。
 コードの記述は合ってるはずやのに、なぜか言うこときかんエクセル君に無理やり処理させるために、
 わてがときどき使う奥の手です(^^;;
 
 で、コード考えてみました。データを渡すのにモジュールレベルの変数を使ってます。
 
 Private TempSheet As Worksheet
 Private TargetArea As Range
 Private TargetChart As ChartObject
 Private CurrentSheet As Worksheet
 
 Sub test()
 Dim JPG_Sheet As String
 Dim JPG_Sele As String
 
 JPG_Sheet = "Sheet1"
 JPG_Sele = "A1:I51"
 Set TargetArea = Worksheets(JPG_Sheet).Range(JPG_Sele)
 Set CurrentSheet = ActiveSheet
 
 With Application
 .ScreenUpdating = False
 TargetArea.CopyPicture xlPrinter
 Set TempSheet = Worksheets.Add
 With TempSheet
 Charts.Add.Location Where:=xlLocationAsObject, Name:=.Name
 Set TargetChart = .ChartObjects(1)
 With TargetChart
 .Border.LineStyle = xlLineStyleNone
 .Height = TargetArea.Height + (.Chart.ChartArea.Top) * 2
 .Width = TargetArea.Width + (.Chart.ChartArea.Left) * 2
 End With
 End With
 CurrentSheet.Activate
 .OnTime Now(), "test_main"
 End With
 End Sub
 
 Sub test_main(Optional ByVal Dummy As Boolean)
 With Application
 .ScreenUpdating = False
 .DisplayAlerts = False
 TempSheet.Activate
 With TargetChart
 .Chart.Paste
 .Height = Selection.Height + (.Chart.ChartArea.Top) * 2
 .Width = Selection.Width + (.Chart.ChartArea.Left) * 2
 .Chart.Export Filename:="C:\Test.jpg", FilterName:="JPG"
 End With
 TempSheet.Delete
 CurrentSheet.Activate
 .DisplayAlerts = False
 .ScreenUpdating = False
 End With
 End Sub
 
 一応これでうまいこといってると思うねんけど・・・
 
 test_main の (Optional ByVal Dummy As Boolean) ってのはマクロ実行ダイアログに
 マクロが表示されないようにするための・・・奥の手(^^;;
 
 うまいこといかんかったらかんにんな。
 ほな。
 
 |  |