2015-09-15 51 views
0

我無法使此代碼正常工作。第一次運行它時,它提示我輸入密碼並且每次都完成宏,但不會將結果拖入sheet1。我能在這裏做什麼?將結果從數據庫中提取到Excel中

Sub Update() 

    ThisWorkbook.Sheets("sheet1").Activate 
    ThisWorkbook.Sheets("sheet1").Range("A1").Select 
    Dim strStDt As String 
    Dim strEnDt As String 
    Dim strSQL As String 

    strStDt = ThisWorkbook.Worksheets("lookup").Range("B6").Value 
    strEnDt = ThisWorkbook.Worksheets("lookup").Range("B5").Value 

    strSQL = "" 
    strSQL = strSQL & "SELECT tkt.cntry_istto" 
    strSQL = strSQL & ",tkt.pod" 

    strSQL = strSQL & " FROM INTGY.GRUIP tkt" 

    strSQL = strSQL & " Where tky.year_month_nbr between " & strStDt & " and " & strEnDt 


    ThisWorkbook.Sheets("sheet1").Activate 
    ThisWorkbook.Sheets("sheet1").Range("A1").Select 

    With ActiveWorkbook.Connections(1).ODBCConnection 

     .BackgroundQuery = True 
     .Connection = "ODBC;DSN=#EDXX;UID=;;DATABASE=INTGY; AUTHENTICATION=;" 
     .CommandText = strSQL 
     .RefreshOnFileOpen = False 
     .SavePassword = False 
     .SourceConnectionFile = "" 
     .SourceDataFile = "" 
     .ServerCredentialsMethod = xlCredentialsMethodIntegrated 
     .AlwaysUseConnectionFile = False 
     .Refresh 

    End With 

End Sub 

回答

0

您是否驗證過strSQL是否正確地輸入到查詢中?在With ActiveWorkbook.Connections(1).ODBCConnection之前放Msgbox strSQL並確保它按預期顯示。

而且,這一切:

strSQL = "" 
strSQL = strSQL & "SELECT tkt.cntry_istto" 
strSQL = strSQL & ",tkt.pod" 

strSQL = strSQL & " FROM INTGY.GRUIP tkt" 

strSQL = strSQL & " Where tky.year_month_nbr between " & strStDt & " and " & strEnDt 

可以改寫爲:

strSQL = "SELECT tkt.cntry_istto,tkt.pod FROM INTGY.GRUIP tkt Where tky.year_month_nbr between " & strStDt & " and " & strEnDt 
+0

一個excel框與我的SQL調用。這是否意味着它正在工作?如果這是我怎麼能把結果放在sheet1中。感謝您的幫助 – Matt

+0

這只是讓您有機會檢查SQL並確保它正在正確輸入 - 沒有錯誤。我不知道如何將SQL結果粘貼到Excel中,您必須自己研究一下,對不起! – puzzlepiece87

0

使用一個ADO connection檢索記錄,然後使用CopyFromRecordset複製到工作表的範圍(僅指定上左細胞)。

此外,我不知道數據庫,但要注意您的日期,必須包含單引號(對於大多數數據庫)或如果使用MS Access與#而不是引號括起來。

Dim conn As Object 
Dim rst As Object 
Dim strSQL As String, strStDt As String, strEnDt As String 

Set conn = CreateObject("ADODB.Connection") 
Set rst = CreateObject("ADODB.Recordset") 

strStDt = ThisWorkbook.Worksheets("lookup").Range("B6") 
strEnDt = ThisWorkbook.Worksheets("lookup").Range("B5") 

strSQL = "SELECT tkt.cntry_istto, tkt.pod" 
strSQL = strSQL & " FROM INTGY.GRUIP tkt" 
strSQL = strSQL & " WHERE tkt.year_month_nbr" 
strSQL = strSQL & " BETWEEN '" & strStDt & "' and '" & strEnDt & "' 

conn.Open "DSN=#EDXX" 
rst.Open strSQL, conn 

ThisWorkbook.Sheets(1).Range("A1").CopyFromRecordest rst 
rst.Close 

Set rst = Nothing 
Set conn = Nothing