我想使用MSChart将两个长度不相同的数组在图形上表示出来,为什么总出错??代码如下:
num1是X()的数组长度,num2是Y()的数组长度
加入X()中有12个点,而Y()中有24个点,我使用如下的代码得到的曲线怎么总是两天长度相同阿??
Sub drew2(X() As Double, Y() As Double, num1 As Integer, num2 As Integer)
    Dim row As Integer, axisID As Integer, i As Integer, N As Integer
    With Me.MSChart1
        .ColumnCount = 2
        .RowCount = num2
            '短的那条线
            .Column = 1
            .ColumnLabel = "实测"
            For row = 1 To num1
                .row = row
                .Data = X(row)
                .RowLabel = row
            Next row
            '长的那条
            .Column = 2
            .ColumnLabel = "还原"
            For row = 1 To num2
                .row = row
                .Data = Y(row)
                .RowLabel = row
            Next row
    End With
end sub
请问高手这是怎么回事???

解决方案 »

  1.   

    什么错呀?贴出来瞅瞅...
    X() As Double, Y() As Double 别用参数传递,设置为全局变量,
    num1 As Integer, num2 As Integer 可用 UBound 代替,于是,你的过程将变为:Sub drew2
        ...
        ...
    end sub试试看。
      

  2.   

    楼上的二位,这个方法我试过了
    可还是不行,明明X()只要把他的12个坐标画出来就可以了,可莫名其妙的出来还是24个点画出的线!
    这是怎么回事?
    还有就是当X,Y的长度相同是,我在增大Y的长度,画出来的曲线,X就只有一般,Y是全部曲线,可X中没有数据的后半部分全部默认为0,横坐标的后半部分全是X的值!
    这又是怎么回事?
      

  3.   

    我帮你改了一下:
    Private Sub Command1_Click()
       
       Dim XX(10) As Double, YY(20) As Double
       For i = 0 To 10
           XX(i) = 20 * (1 + Sin(6.28 * i / 10))
       Next i
       
       For i = 0 To 20
           YY(i) = 20 * (1 + Sin(6.28 * i / 20))
       Next i
       
       Call drew2(XX, YY, 10, 20)End Sub
    Sub drew2(X() As Double, Y() As Double, num1 As Integer, num2 As Integer)
        On Error Resume Next
        Dim row As Integer, axisID As Integer, i As Integer, N As Integer
        With Me.MSChart1
            .ColumnCount = 2
            .RowCount = num2
                
                '短的那条线
                .Column = 1
                .ColumnLabel = "实测"
                For row = 1 To num2
                    .row = row
                    .Data = X(IIf(row < 11, row, 0))
                    .RowLabel = row
                Next row
                
                '长的那条
                .Column = 2
                .ColumnLabel = "还原"
                For row = 1 To num2
                    .row = row
                    .Data = Y(row)
                    .RowLabel = row
                Next row
        End With
    End Sub两条正弦曲线画得不错^_^。
      

  4.   

    修正:
                '短的那条线
                .Column = 1
                .ColumnLabel = "实测"
                For row = 1 To num2
                    .row = row
                    .Data = X(IIf(row <= num1, row, 0))
                    .RowLabel = row
                Next row
      

  5.   

    to  Gujianda:
    好像和我说的有点出入
    你的短的曲线里面后十个点还是有数据的都是X(0)=20
    我的意思很简单就是让后面的那十个点生成的曲线消失掉,只有Y()生成的曲线和X()前十个数据生成的一半曲线!
    你的我靠过去还是两断完整的曲线啊??
      

  6.   

    这其实就是一个 缺测点的问题。 不管X和Y 的数组长度如何,在MSCHART上都必须是统一的ROW的座标。所以必须将 NUM1 到 NUM2之间的值设为NULL
    使用 MSCHART1.GRIDDATA.SETDATA 函数 将NULLFLAG 设为TRUE 即可。
    Sub drew2(X() As Double, Y() As Double, num1 As Integer, num2 As Integer)
        Dim row As Integer, axisID As Integer, i As Integer, N As Integer
        With Me.MSChart1
            .ColumnCount = 2
            .RowCount = num2
                '短的那条线
                .Column = 1
                .ColumnLabel = "实测"
                 For row = 1 To num1
                    .DataGrid.SetData row, 1, x(row), False
                    .RowLabel = row
                Next row
                For row = num1 + 1 To num2
                    .DataGrid.SetData row, 1, 0, True
                Next row
                '长的那条
                .Column = 2
                .ColumnLabel = "还原"
                For row = 1 To num2
                    .row = row
                    .Data = Y(row)
                    .RowLabel = row
                Next row
        End With
    end sub
      

  7.   

    tanks
    you are the best men