1

我有一本带有几张纸的工作簿。我在第二张表上填充列表框(从单元格中提取静态数据),单击一个按钮,它运行良好。

当我使用命名范围填充列表框时,列表框会以我想要的方式填充,但我收到错误,因为代码认为我没有在列表框中选择任何内容,即使我这样做了。所以它通过""而不是"title".

这是一个常见问题吗?命名范围不是问题,因为它将数据传递到列表框,我知道它正在选择数据,因为一旦列表框失去焦点,它将单元格的内容吐出到 cell 中A1

更奇怪的是,我将列表框的内容设置为Msg1. 所以A1被填充Msg1(我在列表框中实际选择的内容)。但是当我尝试Msg1在代码中使用时,它告诉我Msg1"". 同样,这仅在我使用动态命名范围时发生,而不是在单元格中使用静态数据时发生K1:K9

Private Function 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

End Function
4

1 回答 1

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 属性中设置的内容。

于 2010-05-13T21:22:15.237 回答