命名范围中断代码

时间:2010-05-13 16:53:02

标签: excel-vba vba named-ranges excel

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

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

这是一个常见问题吗?命名范围不是问题,因为它将数据传递到列表框,我知道它正在选择数据,因为只要列表框失去焦点,它就会将单元格的内容吐出到单元格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

结束功能

1 个答案:

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