0

我正在拔头发,试图解析数据或编辑到 msgraph 系列集合中。
我明白了error 438 - object does not support this property or method

我可以操作对象具有的其他属性,例如 ChartTitle.Font.Size,但不能操作 seriescollection。

Intellisencing 不适用于这个对象,这让我怀疑我没有设置特定的参考。

部分代码如下。
主程序获取对象:

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属性设置为返回所需数据的查询,然后Requerying Chart。这比下面的要容易得多。

您得到的是Error 438因为Name, XValues, Values不是Series对象的属性。MSDN 信息

话虽如此,这里是您的方法和一些建议。SeriesCollection不像 Excel 中那样包含与 MSGraph 点关联的值。您需要编辑 DataSheet 中的数据,这非常挑剔。必须包含对 Microsoft Graph Library 的引用。这经过测试可以与我的数据库一起使用。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循环记录集,而不是操作对象,特别是因为在您的过程中对记录集的属性进行了更多调用。
2. 您不需要指定Next应用 a 的变量 ( Next i)。放Next.
3.如果有帮助,请选择我的答案:)

于 2013-08-30T17:22:08.390 回答