当前位置:编程学习 > VB >>

vb如何把文本框中的数据保存到excel,不能覆盖,而是能自动换行

我做的界面上有21个文本框,我想点一次保存按钮,就能把这21个文本框中的数据按照一行自动保存到excel中。当文本框中有新的数据时,再点保存按钮,则能保存到excel的下一行,而不是覆盖之前保存的数据;这个该怎么实现啊,小弟琢磨了好几天都没成功,公司急用,愁死我了。
Private Sub Command3_Click() '保存(不合格)
Dim Ex As Object
Dim ExBook As Object
Dim ExSheet As Object

Set Ex = CreateObject("Excel.Application")
Set ExBook = Ex.Workbooks.Add
Set ExSheet = ExBook.Worksheets("Sheet1")  '打开
ExSheet.Activate '激活工作表
Ex.Visible = True


ExSheet.Range("A1:U1").Value = Array("产品型号", "测试日期", "测试时间", "峰峰值", "均方根值", "频率", "周期", "上升时间", "下降时间", "正脉宽", "负脉宽", "正占空比", "负占空比", "最大值", "最小值", "平均值", "幅度", "顶端值", "底端值", "过冲", "预冲")




Static count As Integer
Dim j As Integer
count = count + 1
For j = 1 To 21
ExSheet.Cells(count + 1, j) = Text1(j - 1).Text
Next j



On Error Resume Next
ActiveWorkbook.SaveAs ("Z:\工作区\测试\测试数据保存(不合格).xls")

Set ExSheet = Nothing
Set ExBook = Nothing
Ex.Quit
Set Ex = Nothing

End Sub
这段代码只是能自动换行,但怎么才能把每次文本框中得到的新数据添加到excel的下一行,而不影响前几行保存的数据。求高手帮忙,小弟感激不尽。 --------------------编程问答-------------------- 很想帮你,但看不懂你的问题... --------------------编程问答-------------------- ExSheet.Range("A1:U1").Value = Array("产品型号", "测试日期", "测试时间", "峰峰值", "均方根值", "频率", "周期", "上升时间", "下降时间", "正脉宽", "负脉宽", "正占空比", "负占空比", "最大值", "最小值", "平均值", "幅度", "顶端值", "底端值", "过冲", "预冲")

你看,每次按下按钮,Range都定位第一行:-) --------------------编程问答-------------------- 找到原因了,你每次按下按钮都新生成一个Excel文件,而不是打开原有文档。

--------------------编程问答-------------------- 我是想实现这样的功能:每次点击保存按钮,文本框中的内容就添加到excel的一行,当文本框中有新的数据时,再次点击保存按钮,则文本框中的新数据保存到这个excel的下一行(不能对前几行的数据有影响),如此往复下去。就相当于我们在信纸上写了一行字,接着写第二行字,写第三行字……每写一行的时候都对前面的几行的数据没有影响,不知道我这样说清楚没。

急用,求高手帮忙,感激不尽。 --------------------编程问答--------------------
引用 4 楼 victorywan123 的回复:
我是想实现这样的功能:每次点击保存按钮,文本框中的内容就添加到excel的一行,当文本框中有新的数据时,再次点击保存按钮,则文本框中的新数据保存到这个excel的下一行(不能对前几行的数据有影响),如此往复下去。就相当于我们在信纸上写了一行字,接着写第二行字,写第三行字……每写一行的时候都对前面的几行的数据没有影响,不知道我这样说清楚没。

急用,求高手帮忙,感激不尽。

你已经说清楚了
所以,你应该分步实现
1.打开Excel文档
2.点击保存时不新建也不关闭上述文档
3.完成后保存文档并退出Excel
--------------------编程问答-------------------- 或者换个方式
1.将每次更新的一行21列数据统一保存到一个二维数组
2.一次性写入到Excel里
--------------------编程问答-------------------- Form的代码改成这样应该ok:

Option Explicit

Dim iCount As Long
Dim arrStr() As String

Private Sub Form_Load()
    ReDim arrStr(0 To 255, 0 To 20) As String
    iCount = 0
End Sub

Private Sub Command1_Click()
    If iCount > 255 Then
        MsgBox "超过行数限制"
        Exit Sub
    End If
    Dim i As Long
    For i = 0 To 20
        arrStr(iCount, i) = Text1(i).Text
    Next i
    iCount = iCount + 1
    For i = 0 To 20
        Text1(i).Text = ""
    Next i
End Sub

Private Sub Command3_Click() '保存(不合格)
    If iCount > 255 Then Exit Sub
    Dim Ex As Object
    Dim ExBook As Object
    Dim ExSheet As Object
    
    Set Ex = CreateObject("Excel.Application")
    Set ExBook = Ex.Workbooks.Add
    Set ExSheet = ExBook.Worksheets("Sheet1") '打开
    ExSheet.Activate '激活工作表
    Ex.Visible = True

    ExSheet.Range("A1:U1").Value = Array("产品型号", "测试日期", "测试时间", "峰峰值", "均方根值", "频率", "周期", "上升时间", "下降时间", "正脉宽", "负脉宽", "正占空比", "负占空比", "最大值", "最小值", "平均值", "幅度", "顶端值", "底端值", "过冲", "预冲")

    Dim i As Long
    Dim j As Long
    
    For i = 0 To iCount - 1
        For j = 1 To 21
        ExSheet.Cells(i + 2, j) = arrStr(i, j - 1)
        Next j
    Next i
    
    On Error Resume Next
    Ex.ActiveWorkbook.SaveAs ("H:\测试数据保存(不合格).xls")
    
    Set ExSheet = Nothing
    Set ExBook = Nothing
    Ex.Quit
    Set Ex = Nothing

End Sub


其中iCount的限制你可以自行修改 --------------------编程问答-------------------- 谢谢你啊,经你提醒,貌似我找到原因了,马上下班。我明天试下你的代码。谢谢谢谢。 --------------------编程问答-------------------- 你的代码我试过了,可以用,谢谢你啊。如果不用二维数组,不要一次写入excel,而是点一次按钮写入一行该怎么实现啊?我自己试了一下,还是没成功。 --------------------编程问答--------------------
引用 9 楼 victorywan123 的回复:
你的代码我试过了,可以用,谢谢你啊。如果不用二维数组,不要一次写入excel,而是点一次按钮写入一行该怎么实现啊?我自己试了一下,还是没成功。


要注意细化区分一下:
1.调用Excel建立你需要的文件,这一步骤在你这个项目的这一界面的操作里只发生一次,如果每次都新建那就不可能实现逐行录入。
2.既然上一步已经打开了这个文档,那么录入的时候就只需要:
  1)获得已打开文档的焦点
  2)定位录入行,填充数据

你再动手试一下看:-)

补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,