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

在VB6中处理EXCEL时出现的错误

我现在实现一个功能,
功能要求:
实时记录一段数据,并最好生成EXCEL文件
实现思路:
在一个timer里判断是不是可以记录,
如果是第一次就先创建EXCEL对象,
然后写A1-AB1的字段名

如果不是第一次,又有记录标志。
则,实时往下记录数据。
这时的
xlSheet.Range("B" + CStr(num1)).Value =  数据
这里的num1每次加1

如果有停止记录标志,
则保存EXCEL到指定路径

timer代码:
Private Sub Timer1_Timer()
Dim str, str1, x, y, z, str2
Dim i, j
bx1_ok = Text1.Text '记录标志
If bx1_ok = 1 Then
    If sign1 = 0 Then
        sign1 = 1
        Set xlApp = New Excel.Application
        Set xlBook = xlApp.Workbooks.Add
        Set xlSheet = xlBook.Worksheets.Add
        str1 = Date
        str = Time
        x = Hour(str)
        y = Minute(str)
        z = Second(str)
        name1_f = "一号冰箱 从" + CStr(str1) + "日" + CStr(x) + "点" + CStr(y) + "分" + CStr(z) + "秒开始到"
        xlSheet.Name = "1"
        xlSheet.Activate
        xlSheet.Range("A1").Value = "时间"
        xlSheet.Range("B1").Value = "环境温度"
        xlSheet.Range("C1").Value = "环境湿度"
        xlSheet.Range("D1").Value = "环境风速"
        xlSheet.Range("E1").Value = "冰箱内温度"
        xlSheet.Range("F1").Value = "冰箱电压"
        xlSheet.Range("G1").Value = "冰箱高压"
        xlSheet.Range("H1").Value = "冰箱低压"
        xlSheet.Range("I1").Value = "冰箱电流"
        xlSheet.Range("J1").Value = "冰箱功率"
        xlSheet.Range("K1").Value = "冰箱功率因数"
        xlSheet.Range("L1").Value = "冰箱耗电量"
        xlSheet.Range("M1").Value = "压缩机表面温度"
        xlSheet.Range("N1").Value = "压缩机排气管温度"
        xlSheet.Range("O1").Value = "压缩机吸气管温度"
        xlSheet.Range("P1").Value = "压缩机电压"
        xlSheet.Range("Q1").Value = "压缩机电流"
        xlSheet.Range("R1").Value = "压缩机功率"
        xlSheet.Range("S1").Value = "压缩机功率因数"
        xlSheet.Range("T1").Value = "压缩机耗电量"
        xlSheet.Range("U1").Value = "蒸气管初温度"
        xlSheet.Range("V1").Value = "蒸气管中温度"
        xlSheet.Range("W1").Value = "蒸气管末温度"
        xlSheet.Range("X1").Value = "冷凝器进风温度"
        xlSheet.Range("Y1").Value = "冷凝器出风温度"
        xlSheet.Range("Z1").Value = "冷凝器温度"
        xlSheet.Range("AA1").Value = "冷凝器电流"
        xlSheet.Range("AB1").Value = "化霜管电流电流"
        num1 = 2
        Text2.Text = 1
    Else
        xlSheet.Range("A" + CStr(num1)).Value = CStr(Time)
        xlSheet.Range("B" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("C" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("D" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("E" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("F" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("G" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("H" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("I" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("J" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("K" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("L" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("M" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("N" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("O" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("P" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("Q" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("R" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("S" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("T" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("U" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("V" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("W" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("X" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("Y" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("Z" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("AA" + CStr(num1)).Value = num1 + 2
        xlSheet.Range("AB" + CStr(num1)).Value = num1 + 2
    num1 = num1 + 1
    Text2.Text = CStr(CInt(Text2.Text) + 1)
    End If

Else

    If sign1 = 1 Then
        sign1 = 0

        str1 = Date
        str = Time
        x = Hour(str)
        y = Minute(str)
        z = Second(str)
        name1_b = CStr(str1) + "日" + CStr(x) + "点" + CStr(y) + "分" + CStr(z) + "秒记录数据"
        str2 = "d:\" + name1_f + name1_b + ".xls"
        xlSheet.SaveAs str2
        Set xlSheet = Nothing
        xlBook.Close
        Set xlBook = Nothing
        xlApp.Quit
        Set xlApp = Nothing
    End If
End If

End Sub

代码我调试过,可以通过,只不过是当在记录过程中,如果在电脑中打开任何EXCEL文件后,都会报错。
错误种类都是:对象'Range'的方法'_Worksheet' 失败,或 对象'SaveAs'的方法'_Worksheet' 失败

只要在记录过程中,不打开EXCEL文件就能正常运行。
不知道怎么解决。特上来问高手。
如果用On   Error   Resume   Next 之类的话,那如果有错,我的记录就不能正常保存了。
那几个小时的记录都没有了。 --------------------编程问答-------------------- 我用你的代码,把Timer1时间间隔设为1秒,然后运行你的代码,置Text1.Text为1,然后再打别的excel文件,并没有报错啊

--------------------编程问答-------------------- 我用你的代码,把Timer1时间间隔设为1秒,然后运行你的代码,置Text1.Text为1,然后再打别的excel文件,并没有报错啊

--------------------编程问答-------------------- 建议楼主将数据存入Access数据库中,需要Excel时,将其一次性转换为Excel文件即可,很方便,也很简单,给你提供一个Access数据表转换为Excel的方法:http://download.csdn.net/source/1483928 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 1 楼 chinaboyzyq 的回复:
我用你的代码,把Timer1时间间隔设为1秒,然后运行你的代码,置Text1.Text为1,然后再打别的excel文件,并没有报错啊


会的,你多打开几次,多试试。
--------------------编程问答--------------------
引用 3 楼 veron_04 的回复:
建议楼主将数据存入Access数据库中,需要Excel时,将其一次性转换为Excel文件即可,很方便,也很简单,给你提供一个Access数据表转换为Excel的方法:http://download.csdn.net/source/1483928

谢谢。我看看 --------------------编程问答-------------------- Veron_04

你好,你的方法很好。
但每当我执行Set accP = GetObject(DataPath, "Access.Application")时,会打开Access的打开对话框、
有没有什么办法不用出来。直接执行
补充:VB ,  数据库(包含打印,安装,报表)
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,