如何从下拉列表中select所有的值,或者在VBA中只使用SQL查询来select单个值?

我正在尝试将SQL表根据用户input的date和地点拉到我的Excel工作表。

Cell E6有一个数据validation下拉列表,如空白,其次是波士顿,芝加哥,休斯敦,纽约和洛杉矶。 该列表是根据H8:H19值定义的。

下面的代码对Else部分实际上工作正常,其中结果是基于非空格的用户所选位置进行过滤。

但是当单元格E6是空的,即没有select位置时,它应该输出所有位置的数据。 有关这方面的任何build议或意见将不胜感激。

 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 & "'" 

在这里输入图像说明

如果你想发送所有的项目到SQL,而不是例如:

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

你需要:

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

所以如果您的inputE6是空的示例代码如下所示。 注意使用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语句,因为您不需要filter。