|
因为工作过程中原始数据量十分巨大(1-15万不等),所以经常会结合ACCESS 大量使用 SQL 语句整合原始数据,固用了一个sql 的function,但是每次调用过这个function 后,执行过程以及输出结果都没有问题。
但是,现在问题来了,执行完成后,不能使用鼠标右键,例如右键点击单元格,必然 Excel 崩溃,遇见未知问题,重新启动,百试不爽。不用则没问题。
很费解,不知道问题出在哪里。当然可以不调用这个function ,但是 sql 一般来说 会使用百次以上(环境限制,只能使用Excel),使用function 会使得代码看起来比较清晰,不至于那么冗长。
使用版本是 excel 2010 中文版。
Function 如下:
Function XLSM_Inquire(ByVal strPath As String, ByVal strSQL As String, ByVal wkOut As Worksheet, ByVal iRow As Long, ByVal iCol As Long)
On Error GoTo Error_Handle
Dim cnXLSM As ADODB.Connection
Dim strConn As String
Set cnXLSM = New ADODB.Connection
With cnXLSM
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & ";Extended Properties='Excel 12.0 Macro;HDR=YES';"
.Open
End With
Dim rsXLSM As ADODB.Recordset
Set rsXLSM = New ADODB.Recordset
rsXLSM.Open strSQL, cnXLSM, adOpenKeyset, adLockOptimistic
wkOut.Cells(iRow, iCol).CopyFromRecordset rsXLSM
rsXLSM.Close
cnXLSM.Close
Set rsXLSM = Nothing
Set cnXLSM = Nothing
Exit Function
Error_Handle:
MsgBox Err.Description
Set rsXLSM = Nothing
Set cnXLSM = Nothing
End Function
一般调用为如下格式:
strPath = ThisWorkbook.Path & "\" & ThisWorkbook.Name
strSQL = "SELECT SUM([Next]) AS A FROM [在途$] WHERE [NOT_AFTER_DATE]> " & N_A_DATE & " and [ITEM]=" & Item_O & " group by ITEM"
Call XLSM_Inquire(strPath, strSQL, wkCZ, PRO_i, 44)
|
|