2016-03-20 20 views
-1

次のSQLクエリの結果に結果または空白のExcelシートがありません。条件がどこで削除されれば正常に動作しますが、その必要があります。だから親切に私のコードを修正するのに役立ちますどこの条件。コードは ます。Private Sub 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の文字列連結の上に行がある場合はそれを行いますが、OP enそのような値を大括弧で囲み、VBA変数strFieldValueを連結せず、SQL文字列ステートメントに含めました。 – Parfait

答えて

0

あなたの条件に探すための値としてstrFieldValueを使用しています。代わりに、strFieldValueが保持する使用を比較のために使用する必要があります。あなたはstrTableNameでそれを正しく実行しています。ここでも同じ考えです。追加するときにstrFieldValueの値を引用符で囲む必要があります。

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

ありがとうございました。ありがとうございました – user2245124

+0

実行前のstrSQLの最終的な価値は何ですか?また、受け取ったエラーは何ですか? – MikeC

0

私はいくつかの修正を加えました。数字、テキスト、日付タイプのようなすべてのフォーマットでうまくいきました。タイプの条件で行われた

次の修正: - ます。strSQLで

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

と、次補正: -

strSQL = strBaseSQL & Left$(strCriteria, Len(strCriteria) - 1) & " FROM [" & strTableName & "]" & " Where [" & strFieldName & "] = " & strFieldValue & "" 
関連する問題