我写的一个把表格中的数据导出到execl中的函数,能导出成功,但就是导出一次后,就要关闭一次应用程序,然后再次进入程序才可以再导出到execl

suinx 2003-08-22 09:24:15
我写的一个把表格中的数据导出到execl中的函数,能导出成功,但就是导出一次后,就要关闭一次应用程序,然后再次进入程序才可以再导出到execl,否则就导不出来.我想是对象没有完全释放的原因?

那位有这方面的经验,请指点一下,谢谢!
代码如下:
Private Function GridSaveAsExcel2(vsGrid As VSFlexGrid, Optional strFile As String, Optional strTitle As String) As Boolean
On Error GoTo errHandle

Dim i As Integer, j As Integer
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook 'Object
Dim xlSheet As Excel.Worksheet ' Object

Set xlApp = New Excel.Application
Set xlApp = CreateObject("Excel.Application")


Set xlBook = xlApp.Workbooks().Add

Set xlSheet = xlBook.Worksheets("sheet1")


xlSheet.Cells(1, 1).Value = strTitle


'跨列居中
Range("A1:G1").Select
With Selection
.HorizontalAlignment = xlCenter
' .VerticalAlignment = xlBottom
' .WrapText = False
' .Orientation = 0
' .AddIndent = False
' .ShrinkToFit = False
.MergeCells = True
End With
Selection.Merge

With vsGrid
For i = 0 To .Rows - 1
For j = 0 To .Cols - 1
If .ColFormat(j) = "" Then
If Len(Trim(.TextMatrix(i, j))) >= 8 And j < 3 Then
xlSheet.Cells(i + 2, j + 1) = "'" & Trim(.TextMatrix(i, j))
Else
xlSheet.Cells(i + 2, j + 1) = Trim(.TextMatrix(i, j))
End If
Else
xlSheet.Cells(i + 2, j + 1) = Trim(.TextMatrix(i, j))
End If
Next j
Next i
End With

ActiveWorkbook.SaveAs FileName:=strFile, FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False


' 关闭工作表。
xlBook.Close
'用 Quit 方法关闭 Microsoft Excel
xlApp.Quit
'释放对象
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing


GridSaveAsExcel2 = True
Exit Function

errHandle:
GridSaveAsExcel2 = False

End Function
...全文
109 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
WQ771211 2003-08-24
  • 打赏
  • 举报
回复
这种方法效率太低
office2000支持HTML
不如写成HTML格式,在存放为xxxx.xls就行了
qifanghcy 2003-08-23
  • 打赏
  • 举报
回复
在Form_Unload()事件中:
IF typename(xlapp)<>"Nothing" THEN
xlapp.quit
set xlapp=nothing
END IF
TechnoFantasy 2003-08-22
  • 打赏
  • 举报
回复
你代码中设置了On Error GoTo ,那么你调试一下,看看xlApp.Quit这个执行到了没有。
diyee 2003-08-22
  • 打赏
  • 举报
回复
如下:
errHandle:
' 关闭工作表。
xlBook.Close
'用 Quit 方法关闭 Microsoft Excel
xlApp.Quit
GridSaveAsExcel2 = False

End Function
suinx 2003-08-22
  • 打赏
  • 举报
回复
xlApp.Quit已经执行了,但按Ctrl+Alt+Del,可看到列表中Excel进程还在没有退出.

怎么回事啊?
xingnup 2003-08-22
  • 打赏
  • 举报
回复
调试一下看.
若想知Excel有没有完全退出,按Ctrl+Alt+Del,看列表中有没有Excel.若有则未完成退出.
不需Excel也可讀寫xls檔的Delphi控件 用来读取Excel,Access的控件 读任何单元值 数字型、字符型、布尔型以及错误型。但是你了解日期和时间型单元吗?在Excel没有这样的单元。Excel是和Delphi一样的方式来存储日期和时间的,即浮点型。那是什么制造了日期或时间值啦,是格式化。 完全支持公式。你可以使用和Excel一样的函数,也支持对外部工作簿引用的公式,你甚至可以从外部引用读取结果。 与操作Delphi的TStringGrid一样的方式操作单元格,或则通过给单元格命名,比如:”D7” 根据单元格的规则以字符串格式读取单元值 根据你的需求格式化单元 格式化很简单。通过获取单元格,你就可以操作单元的格式属性。例如:XLSReadWriteII.Sheet[n].Cell[Col,Row].FontSize := 12; 你也可以对域进行格式化,比如设置边框。 支持所有的Excel格式选项 合并单元格 操作所有的打印选项 选择页面大小,设置边距 设置标题和页脚,包括格式码。 定义打印区域 设置分页符 XLSReadWriteII完全支持Unicode 所有的字符型都是宽字符型。你完全不必担心非英语字符。 控件 你可以插入控件以及定义他们的源和目的单元 绘图 插入所有种类的绘图,从简单的线条到AutoShapes 多行文本和文本框 创建和编辑文本框以及多行文本 图表 创建和Excel一样选项的图表 复制/移动/删除 可以以Excel一样的行为复制、移动和删除单元 行列也可以像单元一样复制和移动 支持工作簿之间的复制和移动 可以复制整个工作簿 使用命名的域/单元 你可以在你想要的任何地方命名 通过命名访问单元格,例如:XLS.NameAsFloat['MyCell'] := 202.5; 支持指定、内置的名称 支持所有超链接类型 网页和E-mail地址 本地文件 服务器文件 工作薄引用 加密文档 你可以读加密文件。条件是你需要知道文件的密码。 计算 可计算单元以及整个工作薄 计算引擎将依据单元进行计算。 可读取引用的外部工作薄。这通过一个特殊的快速查询程序进行执行 Rich Text单元 为了轻松地创建多字体格式的单元,单元可以以RTF格式读 VBA宏 可以读文件的宏,使用XLSReadWriteII可以为控件比如:按钮、组合框等添加宏 导入及导出 从下列导入数据… Open Office Calc文档 CSV文件以及其他可以自动识别分隔符、小数分隔符和文本引用字符的文本文件 HTML表格(标签) 数据导出数据为… CSV文件 HTML文件 其他 自动过滤 单元验证 有条件的格式 合并单元 PaintCell方法:将单元内容渲染到TCanvas对象的 XLSReadWriteII包还包含下列组件: 从任何数据导入数据到工作薄 工作薄导出为HTML文件

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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