包含可能为空的variables值的Excel VBA SQL查询
我想获得一个SQL查询在Excel中工作。 在工作表中,我有一个5个数字(单元格中的一个)的列表。 我有查询工作,如果有5个单元格中的数字,它工作正常。 不过,如果单元格是空白的,我仍然需要它运行。 例如只有3个数字的单元格。
有没有办法做到这一点?
我的代码是例如:
var1 = worksheets("Sheet1").Range("A1") var2 = worksheets("Sheet1").Range("A2") var3 = worksheets("Sheet1").Range("A3") var4 = worksheets("Sheet1").Range("A4") Select * from Schema.Table WHERE column1 = " & var1 & " AND (column1 = " & var2 & " etc....
任何方式来编写这个,所以如果var3是空白的,它被排除在SQL查询之外?
谢谢
是的,这很容易:
Dim szSQL As String szSQL = "select * from Schema.Table WHERE " If (var1 <> "") Then szSQL = szSQL & "column1 = " & var1 If (var1 <> "" And var2 <> "") Then szSQL = szSQL & " AND " If (var2 <> "") Then szSQL & " column2 = " & var2
counter = 0 sqltext = 'Select * from Schema.Table ' if var1 <> '' then counter = counter + 1 if counter > 1 then sqltext = sqltext & ' and column1 = ' & var1 else sqltext = sqltext & ' where column1 = ' & var1 end if end if if var2 <> '' then counter = counter + 1 if counter > 1 then sqltext = sqltext & ' and column2 = ' & var2 else sqltext = sqltext & ' where column2 = ' & var2 end if end if
等等..
我会build立一个数组中的所有条件,并使用Join
来格式化最终查询:
Sub BuildQuery() Dim headers(), values(), conditions(), value, i&, ii& ' load the headers and values in an array ' headers = VBA.Array("column1", "column2", "column3", "column4", "column5") values = ActiveSheet.Range("A1:A5").value ' create each condition for each non empty value ' ReDim conditions(0 To UBound(headers)) For Each value In values If Len(value) Then conditions(ii) = headers(i) & " = " & value ii = ii + 1 End If i = i + 1 Next ReDim Preserve conditions(0 To ii - 1) ' build the final query ' Debug.Print "Select * from Schema.Table WHERE " & Join(conditions, " And ") End Sub