|
こんばんわ。
>実は、印字内容は縦方向の印刷内容で、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) ってのはマクロ実行ダイアログに
マクロが表示されないようにするための・・・奥の手(^^;;
うまいこといかんかったらかんにんな。
ほな。
|
|