1

複数のシートを含む 1 つのワークブックがあります。2 番目のシートのリストボックス (セルから静的データをプル) にデータを入力し、ボタンをクリックすると正常に実行されます。

リストボックスに名前付き範囲を入力すると、リストボックスは希望どおりに入力されますが、リストボックスで何も選択していないとコードが判断するため、エラーが発生します。""したがって、の代わりに通過し"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 に答える