将MSHFlexgrid显示的数据存入数组,再将数组导出至EXCEL,出现以下错误:应用程序定义错误或对象定义错误! 跪请解决!

liang_love 2005-10-24 12:45:46
如题: 原代码如下(其中mrc是为查询出的库存记录集)

Dim strcaption As String
Dim sn As String
Dim i As Single
Dim recs As Integer
Dim counter As Integer

Private Type exlcell
row As Long
col As Long
End Type


'复制recordset中数据到excel表格worksheet
Private Sub copyrecords(rst As ADODB.Recordset, ws As Worksheet, startingcell As exlcell)
Dim somearray() As Variant
Dim row As Long
Dim col As Long
Dim fd As ADODB.Field
On Error GoTo err_copyrecords
'检测recordset中是否有数据
If rst.EOF And rst.BOF Then Exit Sub
rst.MoveLast
ReDim somearray(rst.RecordCount + 1, rst.Fields.Count)
'拷贝头到数组
col = 0
For Each fd In rst.Fields
somearray(0, col) = fd.Name
col = col + 1
Next
'拷贝recordset到数组
rst.MoveFirst
recs = rst.RecordCount
counter = 0
For row = 1 To rst.RecordCount - 1
counter = counter + 1
If counter <= recs Then i = (counter / recs) * 100
For col = 0 To rst.Fields.Count-1
somearray(row, col) = rst.Fields(col).Value
If IsNull(somearray(row, col)) Then somearray(row, col) = ""
Next
rst.MoveNext
Next
'将数组填充到excel worksheet
'range应该和数组拥有同样的行数和列数
ws.Range(ws.Cells(startingcell.row, startingcell.col), ws.Cells(startingcell.row + rst.RecordCount + 1, startingcell.col + rst.Fields.Count)).Value = somearray

exit_copyrecords:
On Error GoTo 0
Exit Sub

err_copyrecords:
Select Case Err
Case 0
Resume Next
Case Else
MsgBox "错误:" & Err.Number & vbNewLine & Err.Description, vbMsgBoxHelpButton, "错误"
Resume exit_copyrecords
End Select
End Sub
'将recordset数据转换到excel中
Private Sub toexcel(sn As ADODB.Recordset, strcaption As String)
Dim oexcel As Object
Dim objexlsht As Worksheet
Dim stcell As exlcell
On Error GoTo err_toexcel
DoEvents
On Error Resume Next
Set oexcel = GetObject(, "excel.application")
'若excel没启动
If Err = 429 Then
Err = 0
Set oexcel = CreateObject("excel.Application")
'无法创建对象
If Err = 429 Then
MsgBox Err & ":" & Error, vbExclamation + vbOKOnly
Exit Sub
End If
End If
oexcel.Workbooks.Add
oexcel.Worksheets("sheet1").Name = strcaption
Set objexlsht = oexcel.ActiveWorkbook.Sheets(1)
strcell.row = 1
strcell.col = 1
'填充excel表格
copyrecords sn, objexlsht, stcell
'将控制权交给用户
oexcel.Visible = True
oexcel.Interactive = True
'测试对象是否活动并释放对象
If Not (objexlsht Is Nothing) Then
Set objexlsht = Nothing
End If
If Not (oexcel Is Nothing) Then
Set oexcel = Nothing
End If
If Not (sn Is Nothing) Then
Set sn = Nothing
End If
exit_toexcel:
On Error GoTo 0
Exit Sub
err_toexcel:
Select Case Err
Case 0
Resume Next
Case Else
MsgBox "错误:" & Err.Number & vbNewLine & Err.Description, vbInformation, "错误"
Resume exit_toexcel
End Select
End Sub


FORM中一个按钮,调用事件如下:private sub out_excel.click()
call toexcel(mrc,"库存报表")
end sub
...全文
391 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liang_love 2005-10-26
  • 打赏
  • 举报
回复
好了,谢谢 faysky2() 结帐了!
liang_love 2005-10-26
  • 打赏
  • 举报
回复
我上面的代码里有啊 如下:    

On Error Resume Next
Set oexcel = GetObject(, "excel.application")
'若excel没启动
If Err = 429 Then
Err = 0
Set oexcel = CreateObject("excel.Application")
'无法创建对象
If Err = 429 Then
MsgBox Err & ":" & Error, vbExclamation + vbOKOnly
Exit Sub
End If
faysky2 2005-10-25
  • 打赏
  • 举报
回复
问题解决了:
只要把
Set oexcel = GetObject(, "excel.application")
改为
Set oexcel = CreateObject("excel.application")
还有定义是stcell,使用时却是strcell,把它也改过来就一切OK!!
faysky2 2005-10-25
  • 打赏
  • 举报
回复
楼主,叫你把On Error Goto/Resume Next 这些语句去掉你怎么不肯啊,去掉了就看到有语句提示错误了
我试了一下,把On Error 这些语句去掉了,这句有错误提示 Set oexcel = GetObject(, "excel.application"),应该改为Set oexcel = CreateObject("excel.application")
另外,strcell没有定义
这里也有错误:
ws.Range(ws.Cells(startingcell.row, startingcell.col), ws.Cells(startingcell.row + rst.RecordCount + 1, startingcell.col + rst.Fields.Count)).Value = somearray
foreverstar2004 2005-10-25
  • 打赏
  • 举报
回复
那是一段代码啊,包括2个函数   TO winehero(编程人生),是stcell,多打了一个r,上面有定义的!你们能不能把代码复制下来调试啊,光这样看怎么帮我解决啊,晕死!我多加了些注释而已,要是难看你们可以复制下来删除掉啊,唉,这么点代码都长????高手????郁闷!!!
faysky2 2005-10-24
  • 打赏
  • 举报
回复
没看到mrc在什么地方定义
faysky2 2005-10-24
  • 打赏
  • 举报
回复
代码不少,说一下是哪里出错,那样解决得快些
fishmans 2005-10-24
  • 打赏
  • 举报
回复
不好意思,太长,没看见。说实在的,确实很难看
winehero 2005-10-24
  • 打赏
  • 举报
回复
Dim objexlsht As Worksheet
Dim stcell As exlcell
___________________________________________________

工程中有对Excel类库引用吗?

strcell.row = 1
strcell.col = 1
——————————————————————
这个strcell是个什么?在哪里定义?
liang_love 2005-10-24
  • 打赏
  • 举报
回复
一样,没提示哪个地方出错,在程序运行完后,启动到excel时就出现上面的提示错误!一行一行调试也没提示具体哪行出错
faysky2 2005-10-24
  • 打赏
  • 举报
回复
你先把On Error GoTo ...这些语句注释,然后运行看是什么地方出错
liang_love 2005-10-24
  • 打赏
  • 举报
回复
fishmans(金脚指)

  没有指向哪句出错啊,在最后excel打开窗口后才弹出:应用程序定义错误或对象定义错误!

    copyrecords过程就是一个导出到excel的过程啊! 我写的代码怎么难理解??
fishmans 2005-10-24
  • 打赏
  • 举报
回复
单步调试一下吧,看在哪句出错。

另:
copyrecords是什么过程?做什么操作?
liang_love 2005-10-24
  • 打赏
  • 举报
回复
不会吧,没一个人来看!太简单了??? 还是分太少了,不够再加分!
liang_love 2005-10-24
  • 打赏
  • 举报
回复
反正mrc是一个查询记录集,它没问题,你不用管它,程序调试没指向哪行出错,就是在excel出现完后弹出这个错误窗口
内容概要:本文档聚焦于基于Peng-Robinson状态方程的化工热力学计算研究,系统介绍了利用Matlab代码实现纯组分及多组分系统的压缩因子(z因子)和逸度系数的计算方法,并进一步拓展至泡点压力与露点压力的数值求解。资源涵盖了从状态方程推导、非线性方程求根、相平衡条件判断到迭代算法实现的完整技术路线,提供了可运行的Matlab程序代码,有助于深入理解实际工程中物性参数的计算原理与实现过程; 适合人群:具备化工热力学基础知识和一定Matlab编程能力的高校学生、科研人员及工程技术人员,尤其适合从事过程系统模拟、油气田开发、精馏设计及相关领域研究的专业人士; 使用场景及目标:① 掌握Peng-Robinson方程在真实气体物性计算中的应用;② 实现多组分混合体系的相平衡计算与泡/露点预测;③ 为Aspen Plus等商用流程模拟软件提供底层算法验证与教学参考;④ 支持科研论文复现、课程设计、毕业设计及工业过程优化中的热力学数据支撑需求; 阅读建议:建议读者结合经典化工热力学教材同步学习,重点理解立方型状态方程的根判别、迭代收敛策略与相平衡准则的数学表达,动手调试并运行所提供的Matlab代码以掌握算法细节,还可将其扩展应用于其他状态方程(如SRK、vdW)的对比分析研究。

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧