2015-01-16 2 views
0

데이터를 처음으로 '원시'워크 시트로 가져 오는 매크로를 만들었습니다. 가져 오기 전에 'Raw'시트가 먼저 이전 데이터를 지 웁니다.
그런 다음 VBA에서 SQL을 사용하여 쿼리하고 최종 출력을 원하는 형식으로 가져옵니다.
최근에 "연결된 Microsoft Excel 워크 시트를 볼 수있는 연결이 끊어졌습니다."라는 오류 메시지가 나타나는 문제가 발생했습니다.Excel VBA SQL 쿼리

데이터를 가져 오기 전에 '원시'시트를 지우지 않으면 동일한 매크로가 작동합니다. 도움을 주시면 감사하겠습니다.

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 
+0

너무 많은 코드가 너무 간단합니다. MS Query를 사용하지 않는 이유는 무엇입니까? –

+0

@DaveSexton 게시하는 동안 쿼리를 삭제했습니다. 실제 StrSQL1과 StrSQL2는 약간 복잡한 쿼리입니다. – Maruthi

+0

MS 쿼리 (또는 VBA를 통해)에 직접 SQL 문을 붙여 넣을 수 있으므로 문제가되지 않는 문이 얼마나 복잡한 지 상관없이 MS 쿼리가 워크 시트의 모든 데이터 새로 고침을 처리합니다. –

답변

0

이것은 VBA 문제가 아니며 ODBC 드라이버의 문제입니다. Excel ODBC 드라이버에 대한 다음 고급 설정으로, 데이터 소스를 엽니 다 Windows KeyODBC로 이동하여 체크 박스를 설정해야합니다 :

☑ Enable Automatic Reconnect 

MS Access ODBC이 같은 problem을 체험 할 수있는, 같은 방식으로 고정 .