我需要实现的是在datagrid中从用户选定的一行取出连续40个单元格的值,然后在时间相隔5分钟处再连续取40个值,总共取7组,但是以下的循环有下列问题,内层j循环执行无错误,外层循环一运行总是该句
DataGrid1.Book = DataGrid1.Book + 1
提示书签无效,不知何故?高手帮帮忙,谢谢!
For i = 0 To 6
    For j = 0 To 39
         array1(i, j) = DataGrid1.Columns(3).CellText(DataGrid1.Book + j)
         Text1.Text = Text1.Text & vbCr & array1(i, j)
         selectime = CDate(DataGrid1.Columns(1).CellText(DataGrid1.Book))
    Next j
    
    Do
      DataGrid1.Book = DataGrid1.Book + 1
        addselectime = CDate(DataGrid1.Columns(1).CellText(DataGrid1.Book))
        If addselectime = selectime + CDate("00:05:00") Then
         Exit Do
        End If
    Loop
    Text2.Text = DataGrid1.Columns(2).CellText(DataGrid1.Book)
    Text3.Text = DataGrid1.Columns(3).CellText(DataGrid1.Book)
Next i

解决方案 »

  1.   

    Do
          DataGrid1.Book = DataGrid1.Book + 1
            addselectime = CDate(DataGrid1.Columns(1).CellText(DataGrid1.Book))
            If addselectime = selectime + CDate("00:05:00") Then
             Exit Do
            End If
        Loop改成   Do While True    DataGrid1.Book = DataGrid1.Book + 1
        addselectime = CDate(DataGrid1.Columns(1).CellText(DataGrid1.Book))    If addselectime = DateAdd( "n", 5, selectime)  Then
          Exit Do
        End If
      Loop
      

  2.   

    Sorry 改错了。你的程序写的有点个……  DataGrid1.Book = DataGrid1.Book + 1
      addselectime = CDate(DataGrid1.Columns(1).CellText(DataGrid1.Book))  Do While True
        If addselectime = DateAdd( "n", 5, selectime)  Then
          Exit Do
        End If
      Loop
    因为你始终在循环里   DataGrid1.Book = DataGrid1.Book + 1
    最后 DataGrid1.Book > DataGrid1.RowCount-1
    就出错了.我不是很明白,你的   DataGrid1.Book = DataGrid1.Book + 1
      addselectime = CDate(DataGrid1.Columns(1).CellText(DataGrid1.Book))是个什么意思.先改成这个样子.你看看是不是还是有问题.
    你的这个错误,是个逻辑错误,建议你好好看看 VB 的书.
      

  3.   

    DataGrid1.Book书签属性总是会出错(你要先到你的记录,才会有一个书签值,不是你赋一个书签值,记录就会往下滚),你不如使用
    DataGrid1.recordset.movenext '自动往下滚,
      

  4.   

    DataGrid1.recordset.movenext '应该加在你的i控件的循环末尾。
      

  5.   

    对不起,上面的DataGrid1.recordset.movenext写法有问题,但你最后是让你的recordset集移动。
      

  6.   

    Cityhunter:按照你说的,一运行就程序不响应了。
    我的datagrid中有四个字段,我要实现的就是在用户选定一行后,从这一行开始取出其中一个字段的40个值,然后在记录中寻找时间增加5分钟的行,由此行再往下取出四十个值。一共找7组。addselectime = CDate(DataGrid1.Columns(1).CellText(DataGrid1.Book))提取当前时间字段。
      

  7.   

    你有一个字段的名称叫Book?这是不行,将这个字段的名称改为其它的,因为它和书签(book)同名。还有取出一列的40个值(不是一行),你让datagrid1所绑定的记录集(recordset)往下滚动就可以了,
      

  8.   

    Sorry,不好意思,我理解错了你的意思,你改成这个样子的,再试试。  Do While DataGrid1.Book <= DataGrid1.RowCount-1    DataGrid1.Book = DataGrid1.Book + 1
        addselectime = CDate(DataGrid1.Columns(1).CellText(DataGrid1.Book))
        If addselectime = DateAdd( "n", 5, selectime)  Then
          Exit Do
        End If  Loop
      

  9.   

    Do While DataGrid1.Book <= DataGrid1.RowCount-1显示出错,datagrid好像没有rowcount属性
      

  10.   

    我觉得你的程序问题出在使用:
    DataGrid1.Book = DataGrid1.Book + 1
    上,如果你实在想得到一个这样的结果,你可以先把 DataGrid1.Book 的值用一个变量存起来。这样就不会出错了。
      

  11.   

    Sorry。我写的太过于笼统了。使用DataGrid控件的Columns集合的Count属性和Recordset对象的RecordCount属性,可以决定控件中行和列的数目你访问那个行数时,应该用DataGrid 的 DataSource 的 RecordCount。
      

  12.   

    你的
    DO    

    LOOP
    循环少条件。