2016-03-20 68 views
-1

以下SQL查詢的結果中沒有結果或空白Excel表單。它工作正常,如果我刪除條件,但它的要求。所以請好心幫助我糾正我的代碼與條件。代碼是後續 私人小組cmdOpenQuery_Click()VBA SQL查詢結果錯誤

Dim strTableName As String 
Dim strFieldName As String 
Dim strFieldValue As String 
Dim strFV As String 
Dim strFieldType As String 
Dim strBaseSQL As String 
Dim strCriteria As String 
Dim varItem As Variant 
Dim strSQL As String 
Dim qdf As DAO.QueryDef 
Dim OutPut As String 
Dim intCounter As Integer 
Dim xlApp As Object 

For Each qdf In CurrentDb.QueryDefs 
    If qdf.Name = "MyQry" Then 
DoCmd.DeleteObject acQuery, "MyQry" 
Exit For 
End If 
Next 

strTableName = Me.[cboSelectTblQry] 
strFieldName = Me.[cboWhere] 
strFV = Me.[cboEqualto] 

strFieldType = CurrentDb.TableDefs(Me.cboSelectTblQry).Fields(Me.cboWhere).Type 

If strFieldType = 4 Then 
strFieldValue = "[" & strFV & "]" 
ElseIf strFieldType = 10 Then 
strFieldValue = "['" & strFV & "']" 
ElseIf strFieldType = 8 Then 
strFieldValue = "[#" & strFV & "#]" 
End If 


strBaseSQL = "SELECT " 

For intCounter = 0 To lstSelectTo.ListCount 
lstSelectTo.Selected(intCounter) = True 
Next intCounter 

For Each varItem In Me![lstSelectTo].ItemsSelected 
    strCriteria = strCriteria & "[" & Me![lstSelectTo].ItemData(varItem) & "]," 
Next 

strSQL = strBaseSQL & Left$(strCriteria, Len(strCriteria) - 1) & " FROM [" & strTableName & "]" & " Where [" & strFieldName & "] = strFieldValue " 

Set qdf = CurrentDb.CreateQueryDef("MyQry", strSQL) 

If cboFormat = "Excel" Then 
OutPut = "D:/Export_" & strTableName & "_" & Date & ".xlsx" 
DoCmd.TransferSpreadsheet acExport, , "MyQry", OutPut 
MsgBox " File has been exported to " & OutPut 

DoCmd.Close 
DoCmd.OpenForm "frmCreateQry" 


Set xlApp = CreateObject("Excel.Application") 
    xlApp.Workbooks.Open (OutPut) 
    xlApp.Visible = True 

ElseIf cboFormat = "PDF" Then 

OutPut = "D:/Export_" & strTableName & "_" & Date & ".pdf" 
DoCmd.OutputTo acOutputQuery, "MyQry", acFormatPDF, OutPut, True 
MsgBox " File has been exported to " & OutPut 

ElseIf cboFormat = "Word" Then 



End If 

ExitSub: 
    Exit Sub 
ErrorHandler: 
Resume ExitSub 
End Sub  
+0

'那裏[ 「&strFieldName&」] = strFieldValue「' - >如果你的'strFieldName'指的是一個數字類型的列,你的代碼會一直工作,如果這個列是一個日期或者一個字符串,你必須分別用'#'或者引號括住'strFieldValue' –

+0

@ThomasG - OP嘗試如果你看到SQL字符串連接之上的行,那麼這樣做在括號中關閉了這些值,並沒有連接VBA變量'strFieldValue',但將它包含在SQL字符串語句中。 – Parfait

回答

0

你的WHERE條件使用strFieldValue作爲查找值。您應該使用strFieldValue的用途進行比較。你已經用strTableName正確地做了這件事。這裏的想法是一樣的。添加它時,您需要將strFieldValue的值括在引號中。

strSQL = strBaseSQL & Left$(strCriteria, Len(strCriteria) - 1) & " FROM [" & strTableName & "]" & " Where [" & strFieldName & "] = '" & strFieldValue & "'" 
+0

感謝所有人的幫助..不工作 – user2245124

+0

strSQL在執行之前的最終價值是什麼,以及您收到的錯誤是什麼? – MikeC

0

我做了一些更正,現在它適用於數字,文本和日期類型等所有格式。在類型條件作出

以下更正: -

If strFieldType = 4 Then 
strFieldValue = Me.cboEqualto 
ElseIf strFieldType = 10 Then 
strFieldValue = "'" & strFV & "'" 
ElseIf strFieldType = 8 Then 
strFieldValue = "#" & strFV & "#" 
End If 

並按照校正STRSQL: -

strSQL = strBaseSQL & Left$(strCriteria, Len(strCriteria) - 1) & " FROM [" & strTableName & "]" & " Where [" & strFieldName & "] = " & strFieldValue & ""