Excelで以下のコードを書き、XY散布図を作成し、ポイントをフォーマットして、特定の期間内に行われたイベント/決定のビジュアルタイムラインを作成します(sDate
およびeDate
)。ループ内のifステートメントを使用すると、無効なパラメータエラーが発生する
Option Explicit
Sub UpdateTimeline()
'Updates timeline chart with dates in specified range and updates formatting
Dim timelineChart As Chart
Dim recordCount As Long
Dim record As Range
Application.ScreenUpdating = False
timelineSheet.Unprotect
Call ClearSeries
Set timelineChart = Worksheets("Timeline").ChartObjects("chtDecisionTimeline").Chart
recordCount = 0
For Each record In Range(decisionRecordSheet.Range("D7"), decisionRecordSheet.Range("D7").End(xlDown))
recordCount = recordCount + 1
If record.Value >= timelineSheet.Range("sDate") Then
If record.Value <= timelineSheet.Range("eDate") Then
timelineChart.SeriesCollection.NewSeries
With timelineChart.SeriesCollection(recordCount)
.Name = "='Decision Record'!" & record.Offset(0, 1).Address
.XValues = "='Decision Record'!" & record.Address
.Values = "='Decision Record'!" & record.Offset(0, -2).Address
.AxisGroup = 2
.MarkerStyle = 8
.MarkerSize = 7
.MarkerBackgroundColor = RGB(228, 10, 56)
.MarkerForegroundColor = -2
.Format.Line.Visible = False
.ApplyDataLabels
.DataLabels.ShowValue = False
.DataLabels.ShowSeriesName = True
.DataLabels.Orientation = xlUpward
If record.Offset(0, -2).Value Mod 2 <> 0 Then
timelineChart.SeriesCollection(recordCount).DataLabels.Position = xlLabelPositionRight
Else
timelineChart.SeriesCollection(recordCount).DataLabels.Position = xlLabelPositionLeft
End If
End With
End If
End If
Next
timelineChart.SetElement (msoElementSecondaryValueAxisNone)
With timelineChart.Axes(xlCategory, xlPrimary)
.MaximumScale = timelineSheet.Range("eDate").Value
.MinimumScale = timelineSheet.Range("sDate").Value
End With
With timelineChart.Axes(xlValue, xlPrimary)
.MaximumScale = lookupSheet.Range("yMax").Value
.MinimumScale = lookupSheet.Range("yMin").Value
End With
With timelineSheet
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
.EnableSelection = xlUnlockedCells
End With
Application.ScreenUpdating = True
End Sub
decisionRecordSheetが列BFで、次の形式でデータが含まれています
そして、次のようにtimelineSheetが出て設定されている:
コードが正常に動作します(私はそれがかなりではないことは分かっていますが)、ユーザーが指定した日付範囲( sDate
およびeDate
)は、0-2レコードだけをグラフにプロットする必要があることを意味します。その場合、With timelineChart.SeriesCollection(recordCount)
の無効なパラメータエラーがスローされます。
私は18,19,42行目と43行目をコメントアウトしていますが、問題の原因となっている条件を満たすレコード数を減らすif文には表示されます。私はまた、0-2しかないように、合計データセットを減らそうとしましたが、同じエラーが発生します。
もちろん、これはプロットされているレコードの数とは関係ありませんが、これらはこの動作を一貫して複製した唯一のテストです。
EDIT:
プロットする2つの以上の項目がある場合、私は、実行時エラーを取得するが、私は自分のコードにライン18,19,42および43を含んで持っている場合にのみ - 私はそれらをコメントする場合アウト、私はもはやエラーを取得します。
私はデバッグするとき、問題がtimelineChart.SetElement (msoElementSecondaryValueAxisNone)
であることが表示されますが、私は、なぜ分かりません。