【发布时间】:2015-01-16 12:22:52
【问题描述】:
我已经构建了一个宏,其中数据首先导入到“原始”工作表中。在导入之前,“原始”工作表首先会清除以前的数据。
然后我在 VBA 中使用 SQL 查询它并以所需格式获得最终输出。
最近我遇到了一个问题,它给出了一条错误消息“查看链接的 Microsoft Excel 工作表的连接已丢失”。
如果我在导入数据之前不清除“原始”表,则相同的宏可以正常工作。 任何帮助表示赞赏。
Option Explicit
Public ROW As Integer
Public Cnn As New ADODB.Connection
Public Rs As New ADODB.Recordset
Public StrSQL As String
Public Sub OpenDB()
If Cnn.State = adStateOpen Then Cnn.Close
Cnn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & _
ActiveWorkbook.Path & Application.PathSeparator & ThisWorkbook.Name
Cnn.Open
End Sub
Public Sub CloseRS()
If Rs.State = adStateOpen Then Rs.Close
Rs.CursorLocation = adUseClient
End Sub
Sub MonthlyYorN()
StrSQL1 = "SELECT * FROM [RAW$] where SOME CONDITION"
StrSQL1 = "SELECT * FROM [RAW$] where SOME CONDITION2"
StrSQL = StrSQL1 & " UNION " & StrSQL2
CloseRS
OpenDB
Rs.Open StrSQL, Cnn, adOpenKeyset, adLockOptimistic
If Rs.RecordCount > 0 Then
'Do Something
End If
End Sub
【问题讨论】:
-
这么多代码来做这么简单的事情——为什么不直接使用 MS Query
-
@DaveSexton 我在发布时修剪了查询。实际的 StrSQL1 和 StrSQL2 是一点复杂的查询。
-
您可以将 SQL 语句直接粘贴到 MS Query(或通过 VBA)中,因此无论您的语句多么复杂都不会成为问题。MS Query 将为您处理工作表的所有数据刷新.
标签: sql excel vba odbc database-connection