我有一张包含多张纸的工作簿。我在第二张纸上填充列表框(从单元格中提取静态数据),单击一个按钮,它运行正常。
当我使用命名范围填充列表框时,列表框会填充我想要的方式,但是我收到错误,因为代码认为我没有在列表框中选择任何内容,即使我这样做了。所以它通过“”而不是“标题”。
这是一个常见问题吗?命名范围不是问题,因为它将数据传递到列表框,我知道它正在选择数据,因为只要列表框失去焦点,它就会将单元格的内容吐出到单元格A1中。
更奇怪的是,我将列表框的内容设置为Msg1。因此A1填充了Msg1(我在列表框中实际选择的内容)。但是当我尝试在代码中使用Msg1时,它告诉我Msg1是“”。同样,这仅在我使用动态命名范围时发生,而不是在单元格K1:K9中使用静态数据。
私有函数strEndSQL1 As String
Dim strSQL As String
strSQL = ""
'Create SQL statement
strSQL = "FROM (SELECT * FROM dbo.Filter WHERE ID = " & TextBox1.Text & " And Source IN (" & Msg1 & ")) a FULL OUTER JOIN "
strSQL = strSQL & "(SELECT * FROM dbo.Filters WHERE ID = " & TextBox2.Text & " And Source IN (" & Msg1 & ")) b "
strSQL = strSQL & "ON a.Group = b.Group
strEndSQL = strSQL
结束功能
答案 0 :(得分:1)
我不确定您是如何填充列表框的,或者列表框是否来自“表单”工具栏或“控件工具箱”。如果是后者,这是填充和检索值的示例。
Sub FillListBox()
Sheet1.ListBox1.List = Sheet1.Range("MyNamedRange").Value
End Sub
Sub MakeSQL()
Dim sSql As String
Dim Msg1 As String
With Sheet1.ListBox1
If .ListIndex > -1 Then
Msg1 = .Value
End If
End With
sSql = "SELECT * FROM MyTable WHERE ID=" & Msg1
Debug.Print sSql
End Sub
请注意,Value属性取决于您在BoundColumn属性中设置的内容。