listview里面的数据是仪器通过接收到回车显示出来的~~
 
    If Right$(data, 1) = Chr(10) Then '用串口调试知道数据最后一位其实是回车键
    If Mid$(data, 9, 1) = Chr(13) Then '这两行相当接收到回车键
       Dim nodeX As ListItem
       Set nodeX = ListView1.ListItems.Add()
       nodeX.Text = ListView1.ListItems.Count  '序号
       nodeX.SubItems(1) = Text1.Text    '测量值
       nodeX.SubItems(2) = FormatNumber(Val(Text1.Text), , vbTrue)   '误差值,还没有处理好
    End If
    End Iflistview 中显示的是量具上显示的数据 
问题:我想把listview中的数据保存成为TXT文件,这是我在网上找到的代码,根据自己需求修改了.
Private Sub Command5_Click() '保存文件按钮
  With CommonDialog1
                  .FileName = "   "
                  .DialogTitle = "另存为"
                  .Filter = "TXT格式文件(*.txt)|*.txt"
                  .DefaultExt = "txt"
                  .Flags = cdlOFNHideReadOnly Or cdlOFNOverwritePrompt
            End With
            CommonDialog1.ShowSave
            '如   果   没   有   文   件
            If Len(CommonDialog1.FileName) = 0 Then
            Exit Sub
            End If
              
            '文   本   格   式   文   件
            Open CommonDialog1.FileName For Output As #1
              Dim nodeX As ListItem
       Set nodeX = ListView1.ListItems.Add()
          nodeX.Text = ListView1.ListItems.Count  '序号
          nodeX.SubItems(1) = Text1.Text    '测量值
          nodeX.SubItems(2) = FormatNumber(Val(Text1.Text), , vbTrue)   '误差值,还没有处理好
        For i = 1 To ListView1.ListItems.Count
        Print #1, "序号" & vbTab & "测量值" & vbTab & "误差值"
        Print #1, ListView1.ListItems(i) & vbTab & nodeX.SubItems(1) & vbTab & nodeX.SubItems(2)
            Next
            Close #1
            Exit Sub
Err_Handle:
        Exit Sub
End Sub保存到txt的文件是这样的
序号 测量值 误差值
1 001. 1.00
序号 测量值 误差值
2 001. 1.00
序号 测量值 误差值
3 001. 1.001.跟listview显示的数据不一致,我想大概是因为我的代码是接收到回车键之后才显示数据到listview里面,
而Print #1, ListView1.ListItems(i) & vbTab & nodeX.SubItems(1) & vbTab & nodeX.SubItems(2)也接收到回车键代码,
所以保存到txt里面的数据是实际量具上面的数据(我仔细看了确实是这样),那么应该怎么处理?
2.有个问题如过我不保存的话,会弹出 " 实时错误53 文件未找到" 上面的代码不是处理了吗?(红色字体)
3.另外我想的是"序号 测量值 误差值 "只是显示在第一行,后面的是数据,又应该怎么处理?
4.还有就是如果加个打开文件按钮呢?
问题有点多,小弟虚心请教各位高手了!!!!!!!!!!

解决方案 »

  1.   

    1。
    把回车符滤掉
    replace(strTemp,chr(13),"")
      

  2.   

    2。
    用一个函数来做
    Private Sub Command5_Click() '保存文件按钮              '如  果  没  有  文  件 
                If Len(fun_GetFile) = 0 Then 
                Exit Sub 
                End If end sub'************************************
    '获取文件名函数
    private function fun_GetFile() as string
                  With CommonDialog1 
                      .FileName = "  " 
                      .DialogTitle = "另存为" 
                      .Filter = "TXT格式文件(*.txt)|*.txt" 
                      .DefaultExt = "txt" 
                      .Flags = cdlOFNHideReadOnly Or cdlOFNOverwritePrompt 
     
                      .ShowSave                   fun_GetFile= .FileName
                End With
        exit function
    errDo:
         fun_GetFile=""end function
      

  3.   

    2楼修改一下2。 
    用一个函数来做 
    Private Sub Command5_Click() '保存文件按钮              '如  果  没  有  文  件 
                If Len(fun_GetFile) = 0 Then 
                Exit Sub 
                End If end sub '************************************ 
    '获取文件名函数 
    private function fun_GetFile() as string
            on error goto errDo
     
                  With CommonDialog1 
                      .FileName = "  " 
                      .DialogTitle = "另存为" 
                      .Filter = "TXT格式文件(*.txt)|*.txt" 
                      .DefaultExt = "txt" 
                      .Flags = cdlOFNHideReadOnly Or cdlOFNOverwritePrompt                   .ShowSave                   fun_GetFile= .FileName 
                End With 
        exit function 
    errDo: 
        fun_GetFile="" end function
      

  4.   

    我刚刚试了试好像不行哦~~~~如果没有文件取消不保存 调试显示 Open CommonDialog1.FileName For Output As #1 出错
      

  5.   

    3。
    拿到循环外        Print #1, "序号" & vbTab & "测量值" & vbTab & "误差值"         For i = 1 To ListView1.ListItems.Count 
                Print #1, ListView1.ListItems(i) & vbTab & nodeX.SubItems(1) & vbTab & nodeX.SubItems(2) 
           Next 
      

  6.   


    Private Sub Command5_Click() '保存文件按钮 
               dim strFileName as string
               
              strFileName=fun_GetFile

                '如  果  没  有  文  件 
                If Len(strFileName) = 0 Then 
                Exit Sub 
                End If 
                  
                '文  本  格  式  文  件 
                Open strFileName For Output As #1 
                  Dim nodeX As ListItem 
          Set nodeX = ListView1.ListItems.Add() 
              nodeX.Text = ListView1.ListItems.Count  '序号 
              nodeX.SubItems(1) = Text1.Text    '测量值 
              nodeX.SubItems(2) = FormatNumber(Val(Text1.Text), , vbTrue)  '误差值,还没有处理好 
            For i = 1 To ListView1.ListItems.Count 
            Print #1, "序号" & vbTab & "测量值" & vbTab & "误差值" 
            Print #1, ListView1.ListItems(i) & vbTab & nodeX.SubItems(1) & vbTab & nodeX.SubItems(2) 
                Next 
                Close #1 
                Exit Sub 
    Err_Handle: 
            Exit Sub 
    End Sub 
    '************************************ 
    '获取文件名函数 
    private function fun_GetFile() as string 
                  With CommonDialog1 
                      .FileName = "  " 
                      .DialogTitle = "另存为" 
                      .Filter = "TXT格式文件(*.txt)|*.txt" 
                      .DefaultExt = "txt" 
                      .Flags = cdlOFNHideReadOnly Or cdlOFNOverwritePrompt                   .ShowSave                   fun_GetFile= .FileName 
                End With 
        exit function 
    errDo: 
        fun_GetFile="" end function
      

  7.   

        Dim hFile As Integer
        
        hFile = FreeFile()
        Open CommonDialog1.FileName For Output As #hFile
        For i = 1 To ListView1.ListItems.Count
            Print #hFile, "序号" & vbTab & "测量值" & vbTab & "误差值"
            With ListView1.ListItems(i)
                Print #hFile, .Text & vbTab & .SubItems(1) & vbTab & .SubItems(2)
            End With
        Next
        Close #hFile
      

  8.   

    还是不行啊`,~~取消的不保存还是有问题~~另外我自己反过来的打开文件~因为我保存的时候多了
    Print #1, "序号" & vbTab & "测量值" & vbTab & "误差值"  这行
    分割的时候就会出错~~~如果不要的话就可以~但是它弹出的界面还是保存的~~~~~但是可以打开~
      

  9.   

    由于你赋给 FileName 的初始值有长度,如果取消,Len(CommonDialog1.FileName) 不为 0,应该如下初始化:.FileName = vbNullString 
      

  10.   

    急阿~~~其他的问题都解决了
    现在的问题是第一个问题还没有解决~~就是保存下来的数据是仪器上面的数据 不是我listview上面显示的数据~
      

  11.   


    你的表述不清仪器上面的数据 和 listview上面显示的数据 一致吗?
      

  12.   

    listview上面显示的数据 是我通过按仪器的一个确认键显示在listview上面的,也就是说我不按仪器上面的按键,listview就不会有数据,在listview上面显示的数据是我每按一次按键显示的一个记录
    (If Right$(data, 1) = Chr(10) Then '用串口调试知道数据最后一位其实是回车键 
        If Mid$(data, 9, 1) = Chr(13) Then '这两行相当接收到回车键 
          Dim nodeX As ListItem 
          Set nodeX = ListView1.ListItems.Add() 
          nodeX.Text = ListView1.ListItems.Count  '序号 
          nodeX.SubItems(1) = Text1.Text    '测量值 
          nodeX.SubItems(2) = FormatNumber(Val(Text1.Text), , vbTrue)  '误差值,还没有处理好 
        End If 
        End If )
      

  13.   

    因为单片机发送过来的数据最后两位是确认键(Chr(10 )Chr(13)),所以我设计的时候是接收到确认键就显示在listview里面~~
      

  14.   

    保存到txt的文件是这样的 
    序号 测量值 误差值 
    1 001. 1.00 
    2 001. 1.00 
    3 001. 1.00 
    跟实际显示在listview的不一样,我的猜想就是我所说的第一点吧~~~还是哪里的问题?????
      

  15.   

    看我上面的图片~~~显示的数据比如是
    1 002 2.00 
    2 003 3.00 
    3 003.5 3.50
    但是显示出来的就全部是一样的了
    保存到txt的文件是这样的 
    序号 测量值 误差值 
    1 001. 1.00 
    2 001. 1.00 
    3 001. 1.00 
      

  16.   


               '文  本  格  式  文  件 
                Open CommonDialog1.FileName For Output As #1 
                  Dim nodeX As ListItem 
          Set nodeX = ListView1.ListItems.Add() 
              nodeX.Text = ListView1.ListItems.Count  '序号 
              nodeX.SubItems(1) = Text1.Text    '测量值 
              nodeX.SubItems(2) = FormatNumber(Val(Text1.Text), , vbTrue)  '误差值,还没有处理好 
            For i = 1 To ListView1.ListItems.Count 
            Print #1, "序号" & vbTab & "测量值" & vbTab & "误差值" 
            Print #1, ListView1.ListItems(i) & vbTab & nodeX.SubItems(1) & vbTab & nodeX.SubItems(2) 
                Next text1 什么东东
      

  17.   

    Print #1, ListView1.ListItems(i).SubItems(0) & vbTab & ListView1.ListItems(i).SubItems(1) & vbTab & ListView1.ListItems(i).SubItems(2)
      

  18.   

    错误~~无效的属性
    Print #1, ListView1.ListItems(i).SubItems(0) & vbTab & ListView1.ListItems(i).SubItems(1) & vbTab & ListView1.ListItems(i).SubItems(2)这句
      

  19.   

    现在就是listview里面没有东西我按保存文件就会在listview里面显示最后一个记录~~~~~~~
    也就是说列身体listview接收到一个回车键了吧 我猜想是不是这样的意思
      

  20.   

    你现在的问题:
    listview里能正确显示,但写入txt时错误***********************************
    我说的对吗?
      

  21.   

    对 ,写如的时候
    Print #1, ListView1.ListItems(i)& vbTab & ListView1.ListItems(i).SubItems(1) & vbTab & ListView1.ListItems(i).SubItems(2)这句 前面的正常 后面就多了一个仪器上面的记录
      

  22.   

    对 ,写入的时候 
    Print #1, ListView1.ListItems(i)& vbTab & ListView1.ListItems(i).SubItems(1) & vbTab & ListView1.ListItems(i).SubItems(2)这句 前面的正常 后面就多了一个仪器上面的记录
      

  23.   

    谢谢各位的帮忙~~问题解决了~原来是多了这句
    Set nodeX = ListView1.ListItems.Add() 
              nodeX.Text = ListView1.ListItems.Count  '序号 
              nodeX.SubItems(1) = Text1.Text    '测量值 
              nodeX.SubItems(2) = FormatNumber(Val(Text1.Text), , vbTrue)  '误差值