0

データを解析したり、msgraph シリーズ コレクションに編集したりしようとして、髪を引っ張っています。
私は得るerror 438 - object does not support this property or method

ChartTitle.Font.Size など、オブジェクトが持つ他のプロパティを操作できますが、seriescollection は操作できません。

このオブジェクトではインテリセンスが機能していないため、特定の参照を設定していないのではないかと疑っています。

コードのセクションは以下のとおりです。
メイン ルーチンはオブジェクトを取得します。

strReportName = "Security Selection"
strChartName = "MACD_Chart"

DoCmd.OpenReport strReportName, acViewDesign
Set rptMACD = Reports(strReportName)
Set chartMACD = rptMACD(strChartName)

データ レコードセットが作成され、そのすべてがサブルーチンに渡されます。

 Call UpdateChart(chartMACD, rstMACD)


Public Sub UpdateChart(chartPlot As Object, rstChart As ADODB.Recordset)          
'FUNCTION:
'       a chart object is passed into the routine,
'       source data is update to the recordset being passed in.
Dim lngType As Long
Dim i, j, iFieldCount As Integer
Dim rst As Recordset
Dim arXValues() As Date
Dim arValues() As Double
Dim strChartName, strYAxis, strXAxis As String
Dim ChrtCollection As ChartObjects

Dim colmCount As Integer
chartPlot.RowSourceType = "Table/Query"

'get number of columns in chart table/Query
iFieldCount = rstChart.Fields.Count

 With chartPlot
'change chart data to arrays of data from recordset
    .Activate
    j = 0
    rstChart.MoveFirst
    Do While Not rstChart.EOF
        j = j + 1
        ReDim Preserve arXValues(1 To j)
        arXValues(j) = rstChart.Fields("Date").Value
        rstChart.MoveNext
    Loop

    For i = 1 To iFieldCount - 1   'Date is first field
        j = 0
        rstChart.MoveFirst
        Do While Not rstChart.EOF   'get next array of data
            j = j + 1
            ReDim Preserve arValues(1 To j)
            arValues(j) = rstChart.Fields(i + 1).Value
            rstChart.MoveNext
        Loop
        .SeriesCollection(i).Name = rstChart.Fields(i + 1).Name
        .SeriesCollection(1).XValues = arXValues
        .SeriesCollection(i).Values = arValues

    Next i
 end sub

私は多くのことを試しましたが、今は完全に混乱しています。また、レコードセットで解析しようとしましたが (これが私の好みです)、現時点では何でも取得します。

4

1 に答える 1

0

続行する前に: Chart のRowsourceプロパティを、必要なデータを返すクエリに設定してから、Chart を実行することをお勧めしますRequery。これは、以下よりもはるかに簡単です

オブジェクトのプロパティではないError 438ため、取得しています。MSDN 情報Name, XValues, ValuesSeries

そうは言っても、ここにあなたの方法とその方法でそれを行うためのいくつかの推奨事項があります. には、ExcelのSeriesCollectionように MSGraph ポイントに関連付けられた値が含まれていません。非常に面倒な DataSheet のデータを編集する必要があります。Microsoft Graph ライブラリへの参照を含める必要があります。これは、私のデータベースで動作することがテストされています。マイクロソフト グラフの MSDN 情報

ダオ

Public Sub testing()
Dim rstChart As Recordset
Dim seri As Object, fld As Field
Dim app As Graph.Chart

chartPlot.SetFocus
Set app = chartPlot.Object
Set rstChart = CurrentDb.OpenRecordset("SELECT DateTime, ASIMeasured FROM Surv_ASI WHERE CycleID = 2 ORDER BY DateTime")

app.Application.DataSheet.Range("00:AA1000").Clear

With rstChart
    For Each fld In .Fields
        app.Application.DataSheet.Range("a1:AA1").Cells(0, fld.OrdinalPosition) = fld.Name
    Next

    Do While Not .EOF
        For Each fld In .Fields
            app.Application.DataSheet.Range("a2:AA1000").Cells(.AbsolutePosition, fld.OrdinalPosition).Value = fld
        Next
        .MoveNext
    Loop
End With

app.Refresh
End Sub

ADO (rstChart既に有効な ADODB.Recordset であると仮定)

Public Sub testing()
Dim app As Graph.Chart, i As Integer

chartPlot.SetFocus
Set app = chartPlot.Object

app.Application.DataSheet.Range("00:AA1000").Clear

With rstChart
    .MoveFirst 'Since I don't know where it was left off before this procedure.

    For i = 0 To .Fields.Count - 1
        app.Application.DataSheet.Range("a1:AA1").Cells(0, i) = .Fields(i).Name
    Next

    Do While Not .EOF
        For i = 0 To .Fields.Count - 1
            app.Application.DataSheet.Range("a2:AA1000").Cells(.AbsolutePosition, i).Value = .Fields(i)
        Next
        .MoveNext
    Loop
End With

app.Refresh
End Sub

私の変更に関するいくつかの注意事項:
1.With特に、プロシージャで Recordset のプロパティに対してより多くの呼び出しが行われるため、オブジェクトが操作されるのではなく、Recordset が循環されることを強調したいと思います。2. aが適用される
変数を指定する必要はありません( )。置くだけ。 3.役に立った場合は、私の答えを選んでください:)NextNext iNext

于 2013-08-30T17:22:08.390 に答える