チャートのplotarea.widthプロパティを設定しようとしているサブルーチンでエラーが発生しています。
前の行をコメントアウトすると、他のディメンションでもこのエラーが発生します。ActiveChartや選択などがありません。具体的なエラーメッセージは次のとおりです。「-2147467259(80004005)オブジェクト「PlotArea」のメソッド「幅」が失敗しました」
これはいくつかの理由で私を困惑させています:
- デバッグモードでは、F8を押してコードをステップ実行してもエラーは発生しません。
- AFAIKの「幅」は「メソッド」ではなく、チャートのプロットエリアの「プロパティ」であるため、エラーメッセージでさえかなりあいまいです。
何かご意見は?共有できるコード、ChartSizeMediumサブルーチン全体、およびチャートを確立して、別の関数に渡す前にサイズとその他のプロパティを設定するサブに渡す方法を示すダミースニペットを次に示します。系列データをグラフに追加します。
Option Explicit
Private Sub EstablishChartObject()
Dim cObj as ChartObject
Set cObj = ActiveSheet.ChartObjects.Add(Left:=30, Top:30, Width:=740, Height:=300)
ChartSizeMedium cObj.Chart, "Integer", "Example Chart Title"
End Sub
Private Sub ChartSizeMedium(cht As Chart, NumType As String, Optional chtTitle As String)
'Subroutine to make a consistent size chart
Dim s As Long
With cht
'Add a chart title if one exists.
If Len(chtTitle) > 0 Then
.HasTitle = True
.chartTitle.Characters.Text = chtTitle
End If
'Create the default chart Legend
.HasLegend = True
With .Legend
.Position = xlTop
.Font.Size = 11
.Font.Bold = True
End With
'Format the axes
.Axes(xlValue).MajorGridlines.Format.Line.Visible = msoFalse
.Axes(xlValue).MinorGridlines.Format.Line.Visible = msoFalse
'Format the size of the chart
With .Parent
.Width = 740
.Height = 396
End With
With .PlotArea
.Width = 640 '<---- THIS LINE TRIGGERS THE ERROR
.Height = 280
.Left = 30
.Top = 30
End With
End With
'Some charts start with more than one series container, so make sure they're gone:
With cht
Do Until .SeriesCollection.Count = 0
s = .SeriesCollection.Count
.SeriesCollection(s).Delete
Loop
End With
End Sub
更新2012年12月12日
問題のないコードをすべて削除し、ブロック付きのPlotAreaのみを使用します。同じルーチンで、グラフの種類(いくつかの値)を設定し、この例に示すように、設定を試みる前に1つの一連のデータを手動で追加しました。 PlotAreaディメンションですが、エラーが解決しません。
Option Explicit
Private Sub EstablishChartObject2()
Dim cObj As ChartObject
Dim sh As Worksheet
Set sh = ActiveSheet
Dim srs As Series
Set cObj = sh.ChartObjects.Add(Left:=30, Top:=30, Width:=740, Height:=300)
Set srs = cObj.Chart.SeriesCollection.NewSeries
srs.Values = "={1,3,5,7,4}"
cObj.Chart.ChartType = 57
With cObj.Chart.PlotArea
.Width = 100 '<---- THIS LINE TRIGGERS THE ERROR
.Height = 280
.Left = 30
.Top = 30
End With
End Sub