在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 --------------------编程问答-------------------- --------------------编程问答--------------------
会的,你多打开几次,多试试。
--------------------编程问答--------------------
谢谢。我看看 --------------------编程问答-------------------- Veron_04
你好,你的方法很好。
但每当我执行Set accP = GetObject(DataPath, "Access.Application")时,会打开Access的打开对话框、
有没有什么办法不用出来。直接执行
补充:VB , 数据库(包含打印,安装,报表)