|
グラフシートではなく、ワークシートに埋め込んだグラフですよね ?
こんな感じで出来るようです。
グラフのあるシートのシートオブジェクトに
Private Sub Worksheet_Activate()
Dim Ch As ChartObject
Set MyDic = CreateObject("Scripting.Dictionary")
Set MyDic2 = CreateObject("Scripting.Dictionary")
On Error Resume Next
MyDic.RemoveAll: MyDic2.RemoveAll
If ActiveSheet.ChartObjects.Count = 0 Then
Exit Sub
End If
For Each Ch In ActiveSheet.ChartObjects
Ch.OnAction = "Test_ChResize"
MyDic.Add CStr(Ch.Width), CStr(Ch.Height)
MyDic2.Add CStr(Ch.Left), CStr(Ch.Top)
Next
End Sub
標準モジュールに
Public MyDic As Object, MyDic2 As Object
'↑モジュールの先頭に宣言する。
Sub Test_ChResize()
Dim x As Variant, KAry As Variant, IAry As Variant
Dim KAry2 As Variant, IAry2 As Variant
Dim WL As Single, WT As Single, WW As Single, WH As Single
Dim Ind As Integer
x = Application.Caller
If VarTyp(x) <> 8 Then Exit Sub
If MyDic.Count = 0 Then Exit Sub
With ActiveWindow.VisibleRange
WL = .Cells(1).Left: WT = .Cells(1).Top
WW = .Width - 50: WH = .Height - 10
End With
KAry = MyDic.Keys: IAry = MyDic.Items
KAry2 = MyDic2.Keys: IAry2 = MyDic2.Items
With ActiveSheet.ChartObjects(x)
Ind = .Index - 1
If .Width > WW - 5 And .Width < WW + 5 Then
.Left = CSng(KAry2(Ind))
.Top = CSng(IAry2(Ind))
.Width = CSng(KAry(Ind))
.Height = CSng(IAry(Ind))
Else
.Left = WL: .Top = WT
.Width = WW: .Height = WH
End If
End With
End Sub
を入れ、該当のシートから一度別のシートを開き、戻ります。するとグラフを
クリックしたとき画面全体に拡大して表示し、再度クリックすると元の位置と
サイズに戻ります。拡大したときのサイズは
>WW = .Width - 50: WH = .Height - 10
で、調節して下さい。
|
|