在EXCEL中使用VBA连接数据库查询,每运行一次,进程就多一个,请问什么原因,如何改善

Subtest()DimxlAppAsExcel.ApplicationDimxlBookAsExcel.WorkbookDimxlSheetAsExcel.Worksh... Sub test()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(2)
Dim Fieldlen() As Integer
Dim Irowcount, Icolcount As Integer
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim path As String
path = "C:\Users\declanjun\Desktop\excel-db.accdb"
Dim connstr As String
connstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & path & ";"
' Set conn = CreateObject("ADODB.Connection")
conn.Open connstr
Dim sql As String
sql = "select * from epp" 'SQL语句,决定从数据库中取哪些数据,填入rs记录集
rs.Open sql, conn, 1, 1

With rs
If .RecordCount < 1 Then
MsgBox ("no result!")
Exit Sub
End If
Irowcount = .RecordCount
Icolcount = .Fields.Count
rs.MoveFirst
ReDim Fieldlen(Icolcount) As Integer
For Irow = 1 To Irowcount + 1
For Icol = 1 To Icolcount

Select Case Irow
Case 1 '在Excel中的第一行加标题
xlSheet.Cells(Irow, Icol).Value = RTrim(.Fields(Icol - 1).Name)
Case 2 '将数组FIELDLEN()存为第一条记录的字段长
If IsNull(.Fields(Icol - 1)) = True Then
Fieldlen(Icol) = LenB(RTrim(.Fields(Icol - 1).Name))
Else
aa = RTrim(.Fields(Icol - 1))
Fieldlen(Icol) = LenB(aa)
End If
xlSheet.Columns(Icol).ColumnWidth = Fieldlen(Icol)
xlSheet.Cells(Irow, Icol).Value = RTrim(.Fields(Icol - 1))
Case Else
Fieldlen1 = LenB(.Fields(Icol - 1))
If Fieldlen(Icol) < Fieldlen1 Then
xlSheet.Columns(Icol).ColumnWidth = Fieldlen1
Fieldlen(Icol) = Fieldlen1
Else
xlSheet.Columns(Icol).ColumnWidth = Fieldlen(Icol)
End If
xlSheet.Cells(Irow, Icol).Value = .Fields(Icol - 1)
End Select
Next
If Irow <> 1 Then
If Not .EOF Then .MoveNext
End If
Next
With xlSheet
.Range(.Cells(1, 1), .Cells(1, Icol - 1)).Font.Name = "黑体"
.Range(.Cells(1, 1), .Cells(1, Icol - 1)).Font.Bold = True
.Range(.Cells(1, 1), .Cells(Irow, Icol - 1)).Borders.LineStyle = xlContinuous
End With
xlApp.Visible = True
xlBook.Save
Set xlApp = Nothing
End With
End Sub
试了下好像还是会增加,还没搞懂怎么回事,时间也少,这问题再挂几天看看
展开
 我来答
木与铃铛匕首
2011-04-21 · TA获得超过552个赞
知道小有建树答主
回答量:370
采纳率:0%
帮助的人:196万
展开全部
1.首先你没有关闭Excel.Application,你只是xlApp = Nothing
,让对象失去引用。应该让xlApp.quit并在执行这行代码前关闭xlApp打开的所有Excel文件。
2.不建议你这样CreateObject("Excel.Application") 。因为Excel进程不是那么容易关掉的,你可以直接用执行这段代码的Excel,就是直接用Application。
也就是Set xlBook = xlApp.Workbooks.Add
改成Set xlBook = Application.Workbooks.Add
表里如一
2011-04-17 · 知道合伙人软件行家
表里如一
知道合伙人软件行家
采纳数:2066 获赞数:11638
从事6年生产管理,期间开发了多款小软件进行数据处理和分析,后

向TA提问 私信TA
展开全部
最后这一块
因为你没有关闭新建的工作簿,肯定进程会一直增加的
xlApp.Visible = True
xlBook.Save
'加入2条
xlbook.close ’关闭工作簿
Set xlbook = Nothing '清空对象
Set xlApp = Nothing

End With
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式