我是大四学生,论文题目是《基于vb的上位机智能仪表监控程序设计》,采用vB通信控件MSComm及其编程方法进行上位机(PC机)通信软件的设计,实现了上位机与下位机(单片机系统)之间的数据传送以及实时数据采集。老师的意思是把电压、电流、功率通过一个picture界面显示出来,然后再把值用excel统计出来,我目前只做了个电压的,运行还有些许问题,我下的是vb6.0企业版,但是控件找不到PortOpen,input,inbuffercount,output。 想添加“Microsoft Excel Object Library”工程引用里也找不到,就找到了Kingsoft excel object library,结果显示”加载DLL错误“。现在是运行后没有坐标,麻烦大家帮我看看如何修改
 
Dim myexcel As Excel.Application ' 定义 Application 对象变量
Dim mybook As Excel.Workbook ' 定义工作薄对象变量
Dim mysheet As Excel.Worksheet ' 定义工作表对象变量
Dim n As Integer ' 定义电子表格中已有内容的行数变量'"开始采集"程序代码:
Private Sub Command1_Click()
Timer1.Enabled = True
Timer2.Enabled = True
Call draw
Set myexcel = Excel.Application ' 启动 Excel 应用软件
Set mybook = myexcel.Workbooks.Open(" e:/meter.xls ") ' 打开 E 盘工作薄文件"
Set mysheet = mybook.Worksheets(1) 'mysheet指向工作薄中的第 1 张工作表
myexcel.Visible = True ' 显示 Excel 应用环境 (工作表可视)
n = mysheet.UsedRange.Rows.Count ' 获取电子表格中已有内容的行数
End Sub'“停止监测”程序代码
Private Sub Command2_Click()
Timer1.Enabled = False ' 不允许 Timer1 计时
mybook.Save ' 保存工作薄
myexcel.Quit ' 关闭 Excel 应用软件
End Sub
'注意:在程序开始之前,必须清空发送和接收缓冲区,以免出错。
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"   ' 设置波特率和发送字符格式
MSComm1.CommPort = 1 ' 设置通讯串口
MSComm1.InputLen = 0 ' 设置或返回一次从接收缓冲区中读取字节数,0表示一次读取所有数据
MSComm1.InBufferSize = 512 ' 设置接收缓冲区512Byte
MSComm1.InBufferCount = 0
MSComm1.OutBufferSize = 512 ' 设置发送缓冲区512Byte
MSComm1.OutBufferCount = 0
MSComm1.RThreshold = 6 ' 每个字符到接收缓冲区都触发接收事件
MSComm1.SThreshold = 1
End Sub
' 接收单片机发送的数据,并显示
Private Sub MSComm1_OnComm()
Dim inth() As Byte ' 存放输入的 Byte 型采样数据
Dim th(5) As Single ' 存放 Byte 型转为 Single型数据
Dim vol As Single ' 电压值
If MSComm1.CommEvent = comEvReceive Then
inth = MSComm1.Input ' 输入 Byte 型数据存入inth
For i = 0 To 5
th(i) = inth(i) ' 把 Byte 型转换为 Single 型存入 t h
Next i
If (inth(0) Xor inth(1) Xor inth(2) Xor inth(3) Xor inth(4)) = inth(5) Then
' 异或校验正确时:
vol = th(2) * 256 + th(1) ' 计算电压采样值(二进制变十进制)
vol = 50 * vol / 1024 ' 计算电压测量值
vol = Format$(vol, "0.0")Text2.Text = vol & " V" ' 文本框显示 1 号表测量值
n = n + 1 ' 电子表格中已有内容的行数 +1(即指向首个空行)
mysheet.Cells(n, 1).Value = Time ' 当前时间存入单元格
mysheet.Cells(n, 2).Value = vol '1 号表电压值存入第 n 行 2 列单元格End IfEnd If
mybook.Save ' 保存工作薄(读 1 次表保存 1 次)
End If
Select Case MSComm1.CommEvent ' 设置oncomm事件,读取片机内存的值
Case comEvReceive
Inputsignal = MSComm1.Input
Text2.Text = Asc(Inputsignal) ' 单片机内存的值用Text2显示出
Case Else
End Select
End Sub' 绘制坐标系子函数
Private Sub Picture1_draw() '绘制坐标系
Dim X As Integer
Dim Y As Integer
Picture1.Scale (-100, 70)-(1600, -10) '定义坐标系'画坐标系
Picture1.ForeColor = RGB(200, 5, 200)
Picture1.DrawWidth = 1
Picture1.Line (0, 0)-(0, 65)
Picture1.Line (0, 0)-(1550, 0) '画电压坐标点(以10v为1个单位)
Picture1.ForeColor = RGB(0, 0, 255)
Picture1.DrawWidth = 4
For Y = 0 To 60 Step 10
Picture1.PSet (0, Y)
Next Y '画电压坐标点(以1v为1个单位)
Picture1.ForeColor = RGB(0, 0, 255)
Picture1.DrawWidth = 2
For Y = 1 To 59
Picture1.PSet (0, Y)
Next X '画时间坐标点(以1小时为1个单位)
For X = 0 To 1440 Step 60
Picture1.PSet (X, 0)
Next X '画时间坐标点(以6小时为1个单位)
Picture1.ForeColor = RGB(0, 0, 255)
Picture1.DrawWidth = 4
Picture1.PSet (720, 0)
Picture1.PSet (360, 0)
Picture1.PSet (1080, 0)
Picture1.PSet (1440, 0)
End Sub
' 提取单片机温度数据,并实现动态绘图
Private Sub Time2_Timer()
'用来实时提取串口数据并实时绘图。测电压可每分钟提取一次数据
Dim t As Single
t = Val(Text2.Text) '绘制电压实时变化曲线
'绘制电压实时变化曲线
Picture1.ForeColor = RGB(0, 0, 255)
Picture1.DrawWidth = 3
X = X + 1
Picture1.PSet (X, t)
If X > 1440 Then
Picture1.Cls
X = 0 '刷新坐标系
Call draw
End Sub
 现在运行不出来,也没有坐标显示。

解决方案 »

  1.   

    Microsoft Excel Object Library 需要安装office excel
    没有设备没法测试.....
      

  2.   

    1、excel工程库一般是 Microsoft Excel 11.0 Object Library 或 Microsoft Excel 12.0 Object Library 等形式;
    2、Set myexcel = Excel.Application ' 启动 Excel 应用软件
    该句应修改为:Set myexcel =new Excel.Application ' 启动 Excel 应用软件
    3、多用with...end with结构会有很多好处....参考下面代码(没调试过,自己调试看看哪出错)
    Option Explicit
    Dim MyExcel As Excel.Application ' 定义 Application 对象变量
    Dim MyBook As Excel.Workbook ' 定义工作薄对象变量
    Dim MySheet As Excel.Worksheet ' 定义工作表对象变量
    Dim n As Integer ' 定义电子表格中已有内容的行数变量
    '"开始采集"程序代码:
    Private Sub Command1_Click()
        Timer1.Enabled = True
        Timer2.Enabled = True
        Call Draw
        Set MyExcel = New Excel.Application ' 启动 Excel 应用软件
        Set MyBook = MyExcel.Workbooks.Open(" e:/meter.xls ") ' 打开 E 盘工作薄文件"
        Set MySheet = MyBook.Worksheets(1) 'mysheet指向工作薄中的第 1 张工作表
        MyExcel.Visible = True ' 显示 Excel 应用环境 (工作表可视)
        n = MySheet.UsedRange.Rows.Count ' 获取电子表格中已有内容的行数
    End Sub
    '“停止监测”程序代码
    Private Sub Command2_Click()
        Timer1.Enabled = False ' 不允许 Timer1 计时
        MyBook.Save ' 保存工作薄
        MyExcel.Quit ' 关闭 Excel 应用软件
    End Sub
    '注意:在程序开始之前,必须清空发送和接收缓冲区,以免出错。
    Private Sub Form_Load()
        With MsComm1
            .Settings = "9600,n,8,1"   ' 设置波特率和发送字符格式
            .CommPort = 1 ' 设置通讯串口
            .InputLen = 0 ' 设置或返回一次从接收缓冲区中读取字节数,0表示一次读取所有数据
            .InBufferSize = 512 ' 设置接收缓冲区512Byte
            .InBufferCount = 0
            .OutBufferSize = 512 ' 设置发送缓冲区512Byte
            .OutBufferCount = 0
            .RThreshold = 6 ' 每个字符到接收缓冲区都触发接收事件
            .SThreshold = 1
        End With
    End Sub
    ' 接收单片机发送的数据,并显示
    Private Sub MSComm1_OnComm()
        Dim inth() As Byte ' 存放输入的 Byte 型采样数据
        Dim th(5) As Single ' 存放 Byte 型转为 Single型数据
        Dim vol As Single ' 电压值
        If MsComm1.CommEvent = comEvReceive Then
            inth = MsComm1.Input ' 输入 Byte 型数据存入inth
            For i = 0 To 5
                th(i) = inth(i) ' 把 Byte 型转换为 Single 型存入 t h
            Next i
            If (inth(0) Xor inth(1) Xor inth(2) Xor inth(3) Xor inth(4)) = inth(5) Then
                ' 异或校验正确时:
                vol = th(2) * 256 + th(1) ' 计算电压采样值(二进制变十进制)
                vol = 50 * vol / 1024 ' 计算电压测量值
                vol = Format$(vol, "0.0")
                Text2.Text = vol & " V" ' 文本框显示 1 号表测量值
                n = n + 1 ' 电子表格中已有内容的行数 +1(即指向首个空行)
                MySheet.Cells(n, 1).Value = Time ' 当前时间存入单元格
                MySheet.Cells(n, 2).Value = vol '1 号表电压值存入第 n 行 2 列单元格
            End If
        End If
        MyBook.Save ' 保存工作薄(读 1 次表保存 1 次)
        ''End If
        Select Case MsComm1.CommEvent ' 设置oncomm事件,读取片机内存的值
        Case comEvReceive
            Inputsignal = MsComm1.Input
            Text2.Text = Asc(Inputsignal) ' 单片机内存的值用Text2显示出
        Case Else
        End Select
    End Sub
    ' 绘制坐标系子函数
    Private Sub Draw() '绘制坐标系
        Dim X As Integer
        Dim Y As Integer
        With Picture1
            Picture1.Scale (-100, 70)-(1600, -10)  '定义坐标系'画坐标系
            .ForeColor = RGB(200, 5, 200)
            .DrawWidth = 1
            Picture1.Line (0, 0)-(0, 65)
            Picture1.Line (0, 0)-(1550, 0) '画电压坐标点(以10v为1个单位)
            .ForeColor = RGB(0, 0, 255)
            .DrawWidth = 4
            For Y = 0 To 60 Step 10
                Picture1.PSet (0, Y)
            Next Y '画电压坐标点(以1v为1个单位)
            .ForeColor = RGB(0, 0, 255)
            .DrawWidth = 2
            For Y = 1 To 59
                Picture1.PSet (0, Y)
            Next X '画时间坐标点(以1小时为1个单位)
            For X = 0 To 1440 Step 60
                Picture1.PSet (X, 0)
            Next X '画时间坐标点(以6小时为1个单位)
            .ForeColor = RGB(0, 0, 255)
            .DrawWidth = 4
            Picture1.PSet (720, 0)
            Picture1.PSet (360, 0)
            Picture1.PSet (1080, 0)
            Picture1.PSet (1440, 0)
        End With
    End Sub
    ' 提取单片机温度数据,并实现动态绘图
    Private Sub Time2_Timer()
        '用来实时提取串口数据并实时绘图。测电压可每分钟提取一次数据
        Dim t As Single
        t = Val(Text2.Text) '绘制电压实时变化曲线
        '绘制电压实时变化曲线
        Picture1.ForeColor = RGB(0, 0, 255)
        Picture1.DrawWidth = 3
        X = X + 1
        Picture1.PSet (X, t)
        If X > 1440 Then
        Picture1.Cls
        X = 0 '刷新坐标系
        Call Draw
    End Sub
      

  3.   

    一般安装的OFFICE都是精简版的,一些功能都去掉了。最好是上网下载那些完全版的,一般要500多M的样子,好像是最好是2003版的。祝好运
      

  4.   

    你安装的 金山office  所以会有这个 “Kingsoft excel object library”
    而你要引用的是 微软的office “ Microsoft Excel Object Library”
    所以你的程序肯定跑不起来的,你去百度搜索,“office2003最终完美版”,记住不要用迅雷下,要不然又下到金山office 。选择全部安装即可,金山的最好还是卸掉安全点
      

  5.   

    如果装了还不行,那就要重装一下操作系统了。或者安装2003,2007,精简版等多个OFFICE,有可能有的能引用。