電子書籍の厳選無料作品が豊富!

下記のようなグラフのサイズ調整するVBAプログラムをEXCEL2007で動かしました。
VBEで実行すると正常に動作します。
シートに図形を設置し、その図形にマクロを登録して実行すると、
グラフが3画面位広がってしまいます。
図形にマクロ登録してグラフ調整を正常に動かすことはできないのでしょうか?

-----------------------------------------------------
'グラフの再調整を行うサブルーチン
Sub chartRerange()
 Dim wb As Workbook
 Dim strWbName As String
 Dim myRng1, myRng2, myRng3 As Range
 Dim myChart As Shape
 Dim rngTarget As Range
 
 
 '開いているすべてのワークブックを処理対象とする
 For Each wb In Workbooks
  strWbName = wb.Name
  
  '「月度」が含まれているならば処理
  If InStr(strWbName, "月度") <> 0 Then
   Set myRng1 = wb.Worksheets(2)
   Set myRng2 = wb.Worksheets(3)
   
   For Each myChart In myRng1.Shapes
    'グラフならば
    If (TypeOf myChart.OLEFormat.Object Is ChartObject) Then
     
     Select Case myChart.Name
      Case "chart1"
       Set rngTarget = Range("B24:AG42")
     End Select
      
     'グラフを指定したエリアに配置する
     With myChart
       .Top = rngTarget.Top
       .Left = rngTarget.Left
       .Width = rngTarget.Width
       .Height = rngTarget.Height
     End With
    End If
   Next
  End If
 Next
  

  MsgBox "処理完了"
  
  Set wb = Nothing
  Set myRng1 = Nothing
  Set myRng2 = Nothing
  Set myChart = Nothing
  Set rngTarget = Nothing


End Sub

A 回答 (1件)

バグかどうかの前に。


提示コードでは
>Set rngTarget = Range("B24:AG42")
ここでRangeの親Objectが指定されていない為、
標準モジュール上のコードならActiveSheet.Range("B24:AG42")がSetされています。
(たぶんマクロ登録した図形が配置されているシート)
それは意図した動作ですか?

また、グラフの場合ChartObjectをLoopすれば良いです。
2007では試していませんが
Sub test()
  Dim wb As Workbook
  Dim ch As ChartObject
  Dim i As Long

  '開いているすべてのワークブックを処理対象とする
  For Each wb In Workbooks
    '「月度」が含まれているならば処理
    If InStr(wb.Name, "月度") <> 0 Then
      For i = 2 To 3
        With wb.Worksheets(i)
          For Each ch In .ChartObjects
            If ch.Name = "chart1" Then
              With .Range("B24:AG42")
                ch.Top = .Top
                ch.Left = .Left
                ch.Width = .Width
                ch.Height = .Height
              End With
            End If
          Next
        End With
      Next
    End If
  Next
  MsgBox "処理完了"
End Sub
概ねこんな感じかと。
    • good
    • 0
この回答へのお礼

ありがとうございます。
無事動作しました!
グラフのシート指定があいまいだったのが原因だったのですね。
ループの仕方も勉強になりました。

グラフを初めて扱って、困っていたのでとても助かりました。

お礼日時:2009/06/23 09:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!