如何从下拉列表中选择所有值,或者在VBA中使用SQL查询仅选择单个值?

时间:2016-12-28 02:48:54

标签: sql excel vba

我正在尝试根据用户输入的日期和位置将sql表拉到我的Excel工作表。

Cell E6有一个数据验证下拉列表,其中包括空白区域,其次是波士顿,芝加哥,休斯顿,纽约和洛杉矶。该列表由H8:H19中的值定义。

以下代码实际上适用于Else部分,其中结果根据用户选择的位置而不是空格进行过滤。

但是当单元格E6为空时,即当没有选择位置时,它应输出所有位置的数据。对此方面的任何建议或意见将不胜感激。

If IsEmpty(Range("E6")) Then Reg = Range("H8:H19").Value Else Reg = Range("E6").Value

将数据提取到Excel的SQL查询代码如下:

     objMyCmd.CommandText = " SELECT a.[RDT_FileID],a.[Master Policy Number], a.[Work item /Submission no#],a.[Insured Name], a.[Credited Office]," & _
                                " a.[Credited Underwriter], a.[Product Line], a.[Product Line Subtype], a.[Current Status], a.[Effective Date], a.[Expiry Date],  a.[Premium in USD $] " & _
                                " FROM  DB1.dbo.View_Property_Rater_Of_Record a " & _
                                " WHERE a.[Master Policy Number] Is Not Null " & _
                                " AND a.[RDT_FileID] is null " & _
                                " AND a.[Product Line Subtype] <>  '0102-Marine' " & _
                                " AND a.[Effective Date] >= " & PED(0) & " and a.[Effective Date] <= " & PED(1) & " " & _
                                " AND a.[Current Status] ='Bound' " & _
                                " AND a.[Credited Office] = '" & Reg & "'"

enter image description here

1 个答案:

答案 0 :(得分:0)

如果要将所有项目发送到SQL中,而不是例如:

AND a.[Credited Office] = '001 - Boston'

你需要:

AND a.[Credited Office] IN ('001 - Boston', '002 - New York') 'etc

因此,如果您的输入E6为空,示例代码如下所示。请注意使用Transpose函数将Range转换为Array,以便您可以使用Join函数。

If IsEmpty(Range("e6")) Then
    Reg = " IN ('" & Join(WorksheetFunction.Transpose(Range("H8:H19").Value), "','") & "')"
End If

您必须稍微调整代码设置CommandText以处理新的AND子句。请注意,如果H8:H19中的列表实际上是Credited Office字段中出现的每个选项,那么您可以完全删除AND语句,因为您不需要过滤器。